Lisp-Stat 翻译 —— 第一章 简介

第一章 简介

1.1 统计计算环境

    之前,统计计算主要集中于数值计算。那时的计算机运行速度慢,为了得到合理的性能,人们不得不在一个相对较低水平上细心地编写程序。结果,为了效率,大多数早期的统计系统都是简单的终端机而不是严格的数值算法。使用这些系统的人们须要提交他们的统计需求,而后在当天的晚些时候或者次日才能拿到结果。 前端

    随着计算机变得愈来愈快,愈来愈廉价,将之前花费几小时或者几天才能完成的计算工做在几分钟或几秒钟内完成已经成为可能。这种发展对统计软件提出了新的挑战。因为如今的计算机硬件可以在短时间内完成不一样的计算与分析任务,一个支持性的统计软件环境要使如下步骤变得简单易行——将不一样的计算结果展现到计算机上,将一台计算机的计算结果传递到另外一台计算机上,检测计算结果,跟踪计算过程。进一步说,随着一些计算流程的重复使用(有可能有细微的变化),将此计算流程做为一个单元来描述和请求调用,创建一个简单的抽象已经成为可能。简而言之,为了补充现代计算机硬件的能力,统计环境必须是一个带有交互能力的统计语言。 算法

    另外一个重要的发展发生在对计算速度的并行性上。愈来愈多的统计计算是在配置了高分辨率的我的电脑和工做站上完成的。这类高分辨率显示硬件开拓了不少新的机遇。统计研究的一个最使人激动的领域就是动态计算机绘图领域和它在统计学上的应用。多年以来,绘图方法已经成为统计学上的一个重要工具。可是,传统的二维绘图的一个固有的限制就是它不能很容易地表达超过二维的信息。当代计算机显示器的这项能力——显示一个快速变化的二维图形序列的能力,开拓了一个第三维度:时间维度。动态地变化的图形可能包含几种形式,从在一个旋转的点云里系统地变化,到交互地肯定的变化(经过刷新操做,在图形中一个高亮点处的刷新,在其它一些图形里同步地高亮显示)。 编程

    不少关于动态绘图显示的有思想的想法在近些年来被提出[20]。可是,为了得到这些思想全部的潜力,为了肯定最富有成果的方向,这些新方法须要在更普遍的用户范围内使用,而且在各类环境下测试。大多数至今被提出的动态绘图技术都已经在相应的硬件上实现了,一般都是使用复杂的编程方法。结果,只有不多统计学家可以在实践中探索这些方法的用法,同时仍然不多有人有机会使用这些方法提到的变量进行实验。为了支持这个领域的进展,统计环境须要实现标准动态绘图方法(像点云旋转),并也须要提供基本动态绘图组件集合,能够更容易地和可移植地实现新的想法。 数组

    最近的经验代表,一个崭新的编程范式——面向对象编程,对于通常的绘图编程是很是有用的,尤为对统计绘图编程来讲。面向对象方法在统计系统里还有不少其余应用。例如能够开发灵活的数据结构,表示统计模型等。 数据结构

    绘图编程工具和面向对象编程只不过是现代统计环境须要的众多特性中的两个而已。其它的特性还包括处理“非标准”统计数据的能力等。标准数据是数字的列表(lists)或集合(collections)形式。大多数的数据能够用这样的集合表示。在线性模型的上下文中,不一样的模型也可使用数字集合(模型系数和预测矩阵)的方式表示。可是一旦这些模型的更加普遍的类被承认的话,那么将很难找到不一样模型间的数值表示。例如,一个用于拟合非线性回归模型的系统,若是这个系统须要非线性均值函数,而这个函数选自一些拟合好的数据集的话,这个系统将受到严重的限制。在这个例子中,可以以更通常的方式指定均值函数是很必要的,要么做为一个计算不一样参数值的均值函数,要么做为一个表达式。一旦一门语言容许使用这样的非数值数据,不少新的机遇就产生了。例如,让程序检测模型表达式和计算表达式来做为衍生工具,抑或尝试肯定一个结构来引出计算和解释上的简单化,相似上边的事情将变得可能。 框架

1.2 Lisp-Stat环境

    上节提到的一个灵活的、现代的统计环境必定是嵌入到一个高水平的、可交互的编程语言里的。开发这样的环境能够采起两个办法。第一个办法是从头开始开发一个新的、高水品的语言,这已被S系统(好比S语言、R语言)采用;第二个方法是使用一门现存的语言进行统计计算。推荐最多的是Lisp语言。 编程语言

    Lisp-Stat表明了开发一个完整统计环境的尝试,该环境基于Lisp语言。它由三部分组成: 函数

  • 一个Lisp系统。对标准Lisp函数的修改以支持向量结构,附加函数以进行基础统计计算。
  • 一个对可视化操做系统的接口。
  • 一些工具,用以构造绘图尤为针对动态绘图,这些工具存在于可视化操做系统内部

    Lisp-Stat还包含一个面向对象编程系统,用来支持绘图编程和展现统计模型,好比线性和非线性回归模型。 工具

    Lisp-Stat不是一个单独的系统或者实现。相反地,它是一些基本要素的集合的规格,这个规格可使用一个Lisp系统的变种和可视化操做系统来组合实现。在本书写做的时候,已经有一个叫XLISP-STAT的Lisp-Stat环境实现存在了(注:该处的“实现”为对规格/标准的具体实现版本)。这个系统(指XLISP-STAT)基于Lisp方言XLISP,能够在Macintosh系统和X11 可视化操做系统中使用。随着时间的推移,其它的实现可能也会变得可用。在其它可视化操做系统中使用的XLISP-STAT版本正在开发中。有一个Common Lisp版本的Lisp-Stat也正在开发中。 性能

1.2.1 为何选择Lisp

    Lisp是一门丰富的、通用的编程语言,是一门理想的适合交互性和实验性的编程语言。它容许将函数做为数据,它具备支持多重编程范式的能力,包括面向对象编程。这些致使咱们在计算机科学课程中,使用用Lisp做为介绍基础编程概念的工具,也致使一些论文做者使用和建议将Lisp语言做为统计计算的理想的基础环境。

    Lisp事实上是一门很是古老的语言。它是迄今为止仍在使用的第二老的编程语言,仅次于FORTRAN。通过这么多年的Lisp发展处不少方言版本,可是从20世纪80年代早期,Lisp社区已经合流,朝向使用惟一的方言——Common Lisp.不少优秀的Common Lisp系统都已可用,Common Lisp编译器产生的代码在速度上已经与C和FORTRAN代码不相上下。Lisp-Stat系统都开始采用基于Common Lisp方言或其合理分支的方式。

    本书中全部Lisp语言方面的信息都在这里描述,最重要的再第三、4两章。可是Lisp语言的不少其它特性都没有描述或者仅是简略说起。若是您想进一步涉猎Lisp语言,有不少可用的优秀的书籍能够参考。Common Lisp语言的定义由Steele给出[文献56].Common Lisp函数的完成文档包含在[文献31]。对Common Lisp语言的两个很好的介绍是Horn[文献67]和Tater[文献59].(注:此处文献请到英文原著中查看。)

    还有一些其余语言也被建议做为统计环境的基础。其中一个受到至关大关注的语言是APL。APL有不少有用的特性,包括处理大矩阵和大数组的功能。可是它没有容易处理高级数据的能力,好比函数和表达式,也没有提供自身容易地支持面向对象编程风格的能力,这在绘图编程里是很重要的。将这些特征放到APL里与把矩阵和数组函数放到Lisp里相比是至关可贵。

1.2.2 使用Lisp-Stat

    Lisp-Stat系统能够用在不少不一样的水平,从基本的统计计算器与绘图器到为一个平台设计统计GUI。本书的组织就是基础贯穿这些等级水平的级数的(可理解为由浅入深)。

    第二章描述了如何把Lisp-Stat当作统计计算器和绘图器。在这本层级水平上不少操做均可以使用Lisp-Stat来完成。你能够输入数据,计算汇总统计,生产静态和动态图形,拟合回归模型等等。作这些统计计算的命令以下:

(mean precipitation)

    或者像这样

(standard-deviation precipitation)

来计算数据集precipitation的均值和标准方差。这些表达式正好就是Lisp表达式。但这并非说在使用Lisp-Stat之前,你必定要学习不少Lisp语法。经过学习不多的基本命令,就像任何其它统计系统须要的基本命令同样,几分钟以内你就能够开始分析数据了。

    可是有不少优点是由这样的事实致使的——Lisp-Stat的命令就是Lisp表达式。尽管你不须要知道Lisp就可使用Lisp-Stat,就像你使用其余系统同样你仍是要学一些Lisp基础知识。咱们已经学习过如何计算均值和标准差,咱们须要前进一小步,使用Lisp表达式形式计算一个标准化的变量:

(/ (- precipitation (mean precipitation)) 
  (standard-deviation precipitation))
    若是你发现你要常常标准化一个变量,那么须要再前进一小步——把这个过程封装到一个函数里,而后定义成下边的样子:

(defun standardize (x)
  (/ (- precipitation (mean precipitation)) 
    (standard-deviation precipitation)))
    从使用Lisp-Stat做为一个计算器,到写你本身的函数来自定义系统是一件很是天然的事儿,这将在第二章的最后一节进行概述。

    第二章里描述的工具已经很强大了。可是,与仅仅将一些操做组合到一个新函数里相比,你还能够作得更多。使用Lisp编程语言你能够实现新的算法、设计函数来拟合模型的新类别。为了充分利用这项能力,你须要学习Lisp和Lisp-Stat提供的基本的控制结构和函数。第三章介绍了控制结构,像条件评价结构,也描述了一些Lisp编程里常常遇到的编程风格。第四章展现了一些附加的标准lisp函数,第五章描述了Lisp-Stat包含的统计函数。

    使用面向对象编程系统,Lisp-Stat绘图和回归模型也获得了实现。第二章给出了对象使用的简单介绍,第六章展现了Lisp-Stat对象系统和隐藏在面向对象范式以后的思想的更详细的介绍。第七章描述了Lisp-Stat对象系统,是Lisp-Stat可视化系统的基础。除了造成了绘图系统的基础以外,可视化系统提供了从Lisp-Stat到GUI工具(菜单、对话框)访问的通道。绘图系统由创建在可视化操做系统之上的两个附加层组成。第一层在第八章里描述,第二层在第九章里展现,包括对绘图数据和标准交互技术的支持。

    Lisp-Stat绘图系统能够以不少不一样的方式使用。仅使用第二章介绍的工具,简单动画就能很容易地构造出来,例如,一个由滚动条控制的正态几率图形,该滚动条能够交互地改变能量转换模型中的能量。第七章描述的菜单和对话框对象能够用来设计一些图形接口,这些图形接口是针对功能集或者模型工具集的。第八、9章展现的对象和思想,能够用来以辅助的方式自定义标准图形或者彻底地开发新的图形类型。第10章展现了一些例子关于可能性范围的说明。

    使用Lisp-Stat的一个好的策略是使用键盘交互式地尝试一些表达式。一旦你可以区分一些表达式或者操做的集合,并天然地把它们放在一块儿,你就能够定义一个新的函数或者新的对象类型,把它们封装在一块儿。未来的开发中这个新的函数或者对象就能被用来做为基本的组件。这个策略是颇有用的,不管你研究一个新的数据对象、一个新的数值技术仍是一个新的绘图灵感。经过一系列的探索和封装的步骤,这样的步步为营的能力是交互式统计环境强大的一个关键点,就像Lisp-Stat。

1.2.3 一些设计和可移植性问题

    设计Lisp-Stat的广泛目标是开发一个系统,这个系统能够在不少操做系统上交互式地使用。为了达到之一目的,须要作一些设计上的决定和妥协。

用户界面变量

    在设计一个能够工做在各类不一样计算机上的绘图系统时,一个重要的问题就是用户界面设计上的不一样。例如,Macintosh系统的接口一般把菜单放在菜单栏里,而不少其它接口是当鼠标在窗口内点击时才弹出菜单的。为了处理这个问题,我试图依据一些通用惯例来设计Lisp-Stat的绘图系统,将接口的细节留给特定的实现。例如,Lisp-Stat绘图系统建议每一个图形都包含一个菜单以方便控制。全部的实现里再从Lisp-Stat内部区别对待这些菜单。每个特定的实现负责各自的细节,好比什么时候将彩带展现给用户。在Macintosh系统里,当统计图形窗口是前端窗口时,菜单可能被置于菜单栏内。而对于其它的系统,当在统计图形窗口内点击了特定的鼠标按钮时,菜单栏才会弹出。

    只是用一些通用接口特征的优点是写成的Lisp-Stat代码能够运行在装有各类操做系统的计算机之上,劣势是不可能将特定接口提供的全部特性都发挥出来。幸运的是,大可能是的GUI都是很类似的,经过提取它们的共同特征几乎没有接口特性的损失。

操做系统变量

    不管什么时候当Lisp-Stat须要与操做系统进行接口通讯时,操做系统之间的差别致使了运行其上的Lisp-Stat系统的变量差别。这种差别发生在Lisp-Stat启动和文件获取过程当中。每一个版本的Lisp-Stat都应该包含以下信息:如何从操做系统启动Lisp-Stat,文件和路径的命名规范。在一些操做系统上,经过Lisp-Stat内部或链接到Lisp-Stat系统的其它语言代码,去调用其它操做系统的命令是可能的。细节上,会因操做系统的不一样而不一样。

不一样的Lisp系统

    理想的Lisp-Stat基系统是Common Lisp系统。不幸的是,Common Lisp系统可能很昂贵。一些Common Lisp系统在与一些可用内存量有限的微机和工做站上工做得不是很好。XLISP提供的Common Lisp子集对于支持一个Lisp-Stat系统是足够胜任的。Common Lisp的最重要的特性中,XLISP没有提供的就是编译器。由于XLISP是免费可用的,咱们固然也能够制做一个基于XLISP的免费可用的Lisp-Stat版本。

硬件模型

    与用户接口模型相似,用于设计Lisp-Stat的硬件模型也是最大化地基于共同特征的。这个模型假定计算机都有一个位图显示器和一个存取设备。该模型不建议拥有任何针对特殊意图的硬件,好比支持深度感知或双缓冲技术的硬件。Lisp-Stat实现能够利用硬件的双缓冲而不改变Lisp-Stat看待硬件的方式,可是一些改变可能须要用到硬件的深度感知功能。这种修改是否值得还有待观察。

1.2.4 Lisp-Stat的前景

    Lisp-Stat是一个不断进化的系统。它的目标是为统计计算提供一个环境,这个环境将充分利用当代计算机硬件的计算速度和图形处理能力,经过如下几种手段能够达到此目的:

  1. 提供一个有用的编程工具集来知足数值统计计算的能力
  2. 提供一个框架来使用更高等级的数据(好比函数和表达式)的能力
  3. 提供一个有用的组件集合来适应自定义和开发动态绘图方法的能力

    使用Lisp-Stat的经验和统计方法论与计算机硬件的新发展,这些都会致使系统的修改和功能增长。随着Lisp-Stat的进化,只要可能,新版本就应该会兼容老版本。

相关文章
相关标签/搜索