[转载]几种常用的统计分析软体比较
2010年07月29日 by: admin本文转载自周恬弘的博客”为了美丽的地面”。周先生毕业于维吉尼亚州大学,哲学博士,现为台湾某医院行政副院长。 http://thchou.blogspot.com/2008/07/blog-post_13.html (笔者整理排版)
这一年来接触了几种不同的统计软体,有些是自己有实际去使用过,有些则是只听别人介绍或只有概念上的初步了解。每一种软体都各有利弊,我就目前所知道的这几种软体做简单的比较。
本来我只会使用SPSS,但不是很深入。SPSS是专门给社会科学研究人员使用的统计软体,其好处是视窗的介面与对话方块与下拉式选单的功能让一般的电脑使用者很容易上手,使得SPSS成为最普遍的统计软体之一。
在修计量经济学时,我们所使用的统计软体叫做Stata,以前我并不知道有这样的软体,但是使用之后也觉得蛮好用的,有其独特的功能。Stata原本只用简单的指令,研究人员可以写一连串的指令去整理资料内容与执行统计分析工作,后来Stata的版本也加入类似SPSS的视窗介面与对话方块与选单的功能。对我来说, Stata最方便的地方(这也是老师一再强调的好处),是可以将整套的执行指令存成一个do file,可以让研究人员反覆执行同样的分析工作。如果要修改分析工作中的某些步骤,只要修改其中相关的部分指令,便可以很容易让电脑重新进行分析工作,省下很多的时间与避免错误的可能性。相较之下,对话方块每执行一次分析工作,就得重头勾选对话方块中的项目,相当耗时,也容易出错。后来有朋友告诉我其实 SPSS也有类似Stata的do file的执行指令档的功能,如果懂得其执行指令,也可以反覆执行整批的指令。
因此在操作上,我觉得 SPSS与Stata其实差不多。不过我个人比较喜欢Stata的分析结果呈现格式,感觉上比较简洁;此外,Stata所提供的统计功能要比SPSS来得完整。特别是在回归分析方面,Stata的涵盖面比SPSS更为广泛,而且Stata在进行假设验证时,比SPSS来得灵活。
SPSS与Stata都不便宜,虽然Stata有简易版与学生版,价格较低廉,可是能够处理的资料量与变数量有限制,而且Stata每年都要收费。还有,SPSS与Stata在处理的资料量上面有一定的限制,对于非常大的资料档(如资料笔数很多),有时这两种软体无法处理。
在处理大量的资料方面,目前公认最好的统计软体是SAS。SAS也是透过写指令的方式去执行资料整理与统计分析,与Stata相似。SAS的功能也非常完备,可能是统计专业人员最倚重的软体。但是其缺点是SAS没有单机版,只有机构版,而且每年计费,且收费不便宜,换句话说, SAS是只提供给机构或团体使用。不是在机构工作的研究人员或没有与SAS签约的机构的研究人员都无缘使用SAS。
暑假我修Dr. Luke的健康照护机构策略,Dr. Luke在上课时会用到另一种统计软体叫做JMP,这是SAS集团的新产品之一,属于单机版的套装统计软体,感觉上相当精巧与友善。JMP是一种互动型的分析软体,也是使用视窗与对话方块的功能,研究人员每执行一次动作,结果马上会呈现出来,使用者可以根据这个结果,再做进一步的资料整理或分析,直到所期望的最终的结果出现。JMP运用很多图形的方式来呈现分析结果,让分析人员一目了然。我觉得JMP在整理资料的功能也是我目前所接触过最友善的,分析人员可以很容易地依照自己的想法操作资料,并且马上得到自己所想要的资料排列格式。据我所知,JMP可以处理的资料量也相当大,不过其统计功能的涵盖面可能不像Stata或SAS那么广泛与完整。它另外的一个缺点是没有执行指令档的功能,因此每个动作都要一次又一次透过对话方块与下拉式选单去执行。
最近,有位朋友介绍我一种开放程式码的统计软体,叫做R。我才刚在了解这个软体。据我所知,R的统计功能也相当齐全,可以处理的资料量也很大,它是采用写执行指令的方式去进行分析,但是与SAS、SPSS与Stata不同的地方在于R也是采用互动的方式,让分析人员一步一步、一层一层分析下去,直到得到自己想要的结果。而且R好像也有执行批次档的功能。然而最大的好处是R是可以自由取得,不用花钱。不过据说R的上手并不容易,因为它是由专精统计的网友所共同发展出来的,因此还是在变动中,而且没有一套完整详尽的操作手册,而是散布各处,要找到这些使用指南经常要花一些时间。因此,有位好心的统计工作者特别架设了一个网页[1],专门介绍R给对其他统计软体有些经验的人,希望藉此缩短摸索的时间。
对于各种统计软体所包括的功能,Wikipedia有做比较[2],可以参考看看。
有时候我很纳闷,为什么要有这么多不同的统计软体?每一种各有优缺,导致像我这样,每种都接触一下,学了一点,却没有一种是专精的,还要伤脑筋去想到底要用哪一种作为自己的主要工具。有时候,太多选择也是颇让人头疼,这时就会希望有一种完美的统计软体:免费、处理无限大的资料量、涵盖所有的统计功能、可以执行批次指令档、也有视窗与对话方块功能,而且,容易学习与上手。
[1] http://www.statmethods.net/index.html
[2] http://en.wikipedia.org/wiki/Comparison_of_statistical_packages
以下为网友回复:
这些统计软体的多元化跟电脑软体市场的竞争有直接关系。但是设计统计软体的考量和需要,因为大过个人使用者的层次,才会使这市场变得如此复杂。
就电脑的发展史来看,在个人超级电脑还没有发展出来,储存空间还非常有限的五零甚至到六零年代,庞大的资料都是电脑的中央大系统,也就是IBM公司发展的Mainframe在作储存和输出控制。那时的资料库语言是Cobol,用来写数学计算的语言是Fortran。
Fortran 算是中阶语言,比最基本的Assembly language高一阶而已,对不专学电脑语言的研究者来说,要学programming很困难。因为这个友善一般使用者的需要,在Chicago University教书的几位社会科学研究者就跟电脑专家合作,发展出第一代的SPSS。值得注意的是这虽然是电脑”软体”,是可以读算和呈现结果的环境,却也是一种新的电脑语言– 是用Fortran作底写创出来新的电脑语法,也就是说系统必须先解读SPSS成为Fortran,再由Fortran解作Assembly language,然后执行真正的指令。所以SPSS 变成是最高阶的语言,同时也指由这个语言控制数算和输出结果的环境。这种模式成为后来发展所有统计软体语言的典范。
SPSS刚开始也是需要使用者自己写语言(syntax)。采用视窗的环境和滑鼠点选很后来的事。
SPSS 头几代刚设计出来就遇到这语言跟IBM系统相容不是很顺利的问题。这问题其实是IBM系统不断更新,Fortran 的发展跟不上,导致SPSS也受到限制。另一方面是因为不是专业的程式设计师最先开始使用SPSS,却不擅掌控如何从大系统读存资料。这两个问题,成为SPSS后来不受工商企业界广为采用的致命伤。一直要到个人电脑的速度和储存容量可以和大系统匹敌,才有所改善。
SAS 差不多是六零年代末期开始发展进入软体市场,却一直到七零年代初才比较多人使用。刚开始SAS也是由Fortran写成。但是能赶过SPSS进占工商企业,是因为电脑语言C的发明。C比Fortran 更容易使用,更灵活地能跟Assembly language对谈。也就是说C更容易和大系统相容,方便使用者从大系统上读写存资料。SAS公司的人比较有企业远见。一看到C的发展具备潜力,马上把后来的SAS 版本改由C、而不是Fortran来写。所以会C的专业程式设计师同时也很容易学会SAS。企业界不缺钱顾人学最新的东西,雇了最新的C programmers作系统管理,发现这人同时也略懂SAS系统(反之也是),至于统计学者就另外聘请,形成企业界里系统管理专家和统计学者合作,而由 SAS程式设计师担任连接两边界面的合作团队,促使公司大量采用SAS系统。SAS 就是这样在整体市场行销上拼过SPSS ,在八零年代几乎独占统计软体市场。
C 在八零年代初也被用来发展另外一种管理系统,叫做Unix ,成为IBM Mainframe系统的劲敌。而且在九零年代起开始有取代IBM Mainframe的趋势,成为新的系统管理平台。SAS 当初下对了一步棋,现在就骑在浪头上,远远超过SPSS。在有进行临床实验的药厂更是如此,比方美国食品药物检验局在检查药厂送交的临床实验报告时,就同意而且规定药厂要以SAS档案格式呈送资料(最近要打破SAS的独占,规定也能用超越软体档案格式限制的XML的格式标准呈送)。
SAS不纯粹只是市场行销上超越SPSS,就语言本身的灵活和广度来看,都大到适用于不同的企业。这语言的强处,就是因为不需要借助视窗,什么都能办到:比方能用SAS语言本身去读写各类商用资料库、输出全新的报表格式、和创造新的统计应用软体,如同用语言C一般。SAS programming本身变成是一种专业。极大部份只用SPSS的人的电脑程度实在不能比。不过对大部份在研究机构的学生和老师来说,要精通SAS的程式设计必须花不少时间学,实在困难。
STATA原本是由计量经济学家和电脑程式设计师一起发展出来,专用在经济指数预测。在发展这语言和软体的时候同时看到SPSS和SAS的优缺点。所以STATA 的语言环境看起来像是SPSS和SAS的混合 — 要用视窗或纯写程式的功能几乎一样 (视窗点选的动作可以记录成do file 用batch mode送交系统执行)。现代版的SPSS也发现光用视窗会牺牲执行速度和限制用途,容许使用者在每个主要视窗按”paste” 的按钮,就可以把语言syntax 记录下来成为类似do file的syntax file,也能交付batch mode执行。
稍微了解STATA多一点之后,会知道STATA在处理资料上有一点跟SPSS和SAS很不同。是STATA 的强处,比较挑剔的人却说是STATA的缺点。
SPSS 和SAS 在处理资料上是一笔记录(record or case)读进来到主要的work memory后,在每一个运算的功能(function)处理过,把这笔资料写出到另外的work memory,再读另一笔资料进来到主要的work memory。是线性按照记录原有存放的次序的处理流程。一笔进来一笔出去,下一个记录才能读进来。处理完写出去的记录不能再回过头来颠倒做再次的处理。这个流程在SPSS的语言程式里没有显明,但系统在台面下是这样处理。所以大部份SPSS 的使用者如果没有被教通,就根本不知道为什么有些指令是必须要先写才能跟着其他的指令,长久来就都搞不通怎样写好程式,最后只好傻傻地只靠视窗功能。
SAS 的语言里就把资料读进来和处理资料的数算功能(在SAS 里叫做procedure ,简写作proc)明显划分。读资料的语法部份叫做data step。也是每次只读一笔资料,做基本的资料改写或操弄,写出到另一个work memory。再读进另一笔。
但是STATA读资料的时候就突破这种一笔一笔的处理方式。读的时候是把所有的记录一次都读进到主要的work memory 里组织形成像Excel里的table,基本上是架构成一个距阵,让使用者可以指明要用哪些变数(variable),而且可以选择要哪些记录 record ,要跳着或是颠倒的顺序作处理。举个例子。比方在SPSS或SAS里,写程式的方式是要假想一笔资料读进来,能够处理的是同一笔记录上不同变数间值的加减乘除(水平方向)。STATA除了水平方向的运算外,更可以在一个动作下处理一个特定变数下不同记录的值之间的加减乘除(垂直方向)。所以更加灵活。
问题是因为是一次读进所有的资料在work memory里来架构距阵,work memory要够大才行。现在一般的个人电脑内设的RAM都足够处理学术界的研究资料。但是企业界在用的资料库,比方银行高达数百万的帐号或是健保资料,有时候就大到超过个人电脑上RAM一次读进所能够负荷的容量。所以不管学术界和教育界对STATA的灵活程度如何赞不绝口,都没有考虑到企业界的实际顾虑,对企业界还是只用 SAS的忠诚表示不解。
R处理资料的基本结构跟SPSS和SAS比较像,原本是由AT&T Bell lab在八零年代创造的电脑语言S演进而来,算是最新的发展。所以资料数目比较不是考量。但是处理的速度没有SAS快。虽然有很多统计学家写出最新的统计功能,在使用者学习手册上因为没有市场利益的刺激,却相对欠缺。但只要这两个问题逐渐得到解决,在未来的确可能打破其他统计软体要使用者付费和不断提升版本的困扰。但这也使得 R使用者要写出和其他软体程式对照的R教学手册,目前受到其他公司用版权百般刁难阻挡。
SPSS 公司看到SAS的优势,后来也赶紧改用C语言作底,而不再靠Fortran。但是使用者社群一分化固定下来,让大部份的专业程式设计师靠拢到SAS阵营去,就限制了SPSS软体后来的发展。
怎么说?
一个新的程式语言和软体要能发展成熟,起码都要大概十年的期间。原本开发新语言和写新软体的人没办法了解所有行业的需要。是靠使用者用了之后给予回馈和评价,才知道如何改进升格版本。如前一篇评论所言,SPSS的使用者一开始就只是那些学院里的社会科学研究者,使用统计的程度也许不差,但是缺乏对电脑语言广度的认知,对SPSS和管理系统的相容性也不擅操作。SPSS公司为了继续留住这群主要顾客,当个人电脑开始跃进时,是所有统计软体中最先接纳改用视窗环境,好方便这些设计程式功夫不高的一般使用者。这在当时看起来虽然是最进步的做法,长远看来却是划地自限,使专业的程式设计师更避开学SPSS。原因是如果视窗和滑鼠人人会用,那还用得着专业的程式设计师吗?专写程式的人靠什么吃饭?
所以SAS虽然比较晚接纳个人电脑的视窗环境,却比较有耐力,能够靠有好设计程式功力的使用者社群一起发展更具威力的更新版本,提供给各种不同的企业环境运用。
STATA就是看到SAS和SPSS龟兔赛跑的结果,虽然也提供视窗环境方便大众,但是不敢忽略发展STATA语言本身,希望能留住不同程度的使用者。浅白地说,写SPSS syntax比使用视窗功能略为麻烦;相反地,单写SAS语言比SAS视窗点选的功能强很多;STATA写语言跟使用视窗功能的效率差不多,但是学会直接写STATA语法能让使用者自己设计统计程序和加强处理数据的功能,所以专业的程式设计师学STATA 比一般使用者更有发挥才能赚饭吃的余地。这种做法也才使得原来是用SPSS或是SAS两边不同程度的人,都有改用STATA的好处。

