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的進化,只要可能,新版本就應該會兼容老版本。

相關文章
相關標籤/搜索