统计学专业应该使用什么样的统计软件(写给在统计学院学习的学弟学妹之四)

过去两三年为院刊写了一些稿件,其中一部分是统计技术层面的,一部分是方法论和原则层面的,姑且作为对低年级统计学子们的一些学习建议,目的在于让大家学会擦亮自己的眼睛,辨明统计学的是与非。文章观点仅为一家之言,而且大多数情况下这些观点相对于流行的、教科书式的观点可能有显著差异,因此请各位小心阅读。

这次要求我写一篇关于统计软件的介绍,我想我也没这个本事去介绍所有的软件,因此私自把主题改成了“统计学专业应该使用什么样的统计软件”,窃以为这样写更有意义,不然这篇文章就变成了死板的统计软件使用手册。

关于统计软件,随着时间的推移,我最终以R语言为中心,基本废弃了其它工具的学习,换句话说,其它统计工具对我来说作用有限,不符合本人的统计分析思想和使用习惯。长话短说,本文的摘要为三个字:用R吧

数据分析的需求

毫无疑问,选择都是根据需求而定的。换言之,世上没有万能的好软件。C语言、Fortran语言等低层语言在计算上效率非常高,而且人人都重视计算,但并非所有人都直接选择这些低层语言作为计算工具,原因就是计算速度快不是唯一的需求;SPSS号称统计功能齐全,它最近引进了Python语言,原因是什么?我个人认为模块化的统计分析过程已经不足以满足现代数据分析的需要——没有哪个问题是点鼠标计算一个回归模型就能解决的。我还见过有的公司花了几百万人民币买了SAS软件,其作用只是用来导入导出Excel数据,这就是没有明确需求而盲目选择的典型。

统计专业对软件的需求是什么?这要从我们直接从事的工作说起。统计的工作是什么?仍然是那个定义:收集、整理、分析和表述数据。统计软件在收集数据中一般用处不大(只有试验设计可能需要计算机生成试验表),而后三部分则处处需要软件的帮助。

整理数据要求软件具有良好的处理原始数据的能力。现实生活中的数据与教科书中的行列二维表格区别往往很大,因此我们需要通过整理把那些看似杂乱的数据变成统计中能使用的数据形式。我认为这种能力反映在两方面:(1)字符处理:例如原始数据为简单的文本格式,我们需要从中提取数据,则需要根据特定的规则读写文本数据,这往往涉及到一边计算一边取数据而不是一口气全读进来,更复杂的情况下还需要正则表达式的帮忙,举例来说,有时候数据分散放在多个文件中,我们需要将含有特定文件名的文件找出来,然后将其中符合条件的行读取出来,最终合并为所需的数据,或再距离来说,我们希望了解某个关键词在Google中随着日期推移,搜索结果数目的变化,这样我们需要动态查询Google网页,每次都把特定位置上的那个数字提出来;这些情况下,数据并非理想中的一张表格形式,需要我们预处理才能使用;(2)数据库的整理:随着数据存储技术的进步,数据往往都被存放在数据库中,统计人员在分析之前需要和数据库交互查询得到自己所需要的变量或观测,这些过程中,SQL是必不可少的,因此对SQL的支持是统计数据整理的基本要求。有人可能会产生疑问,为什么不把这样的工作交给计算机专业的人去做?殊不知统计分析乃是精工细活,数据整理并不仅仅是一个技术问题,更多的是对实际问题和统计模型的理解:我们需要解决什么实际问题?我们需要哪些变量?这些变量从哪里来?统计模型是什么?模型的变量是什么性质(离散、连续)?……在正式分析之前,我们对数据应该还有诸多类似的问题,不然仅仅依靠计算机技术,也许会计算出分类变量的均值(如某班级平均性别为1.35)或连续变量的频数等不合理的数据结果。当然,不可否认的是,纯粹的计算机技术对统计数据整理也是很有帮助的,这时,我们可能需要找计算机专业人士合作。

分析数据应该是统计软件的核心功能,显而易见,这要求统计软件的模型方法比较齐全,表面看来,这只是一个数量的问题,然而,它背后还隐藏着两个问题:(1)程序的可靠性或正确性:大多数商业软件都不是开源软件,我们并不知道其背后统计方法在计算机程序上的可靠性,从这一点上来讲,我们只能根据输出结果去判断程序是否可靠,而这种测试方法是非常低效的,因为这是“测标不测本”的做法,我们检验出来的问题说明软件确实在某方面有错误,但还有很多方面我们无法检验,这就如同统计假设检验的道理一样——零假设(软件没问题)可以被拒绝,但不拒绝不能说明零假设就可以被接受;举例来说,Excel在统计计算上漏洞百出,被诟病已久(参见此文),然而除了那些被发现的问题,也许还有更多问题,我们(暂时)无法发现;(2)模型方法的变化与更新:我们都知道现在统计方法和模型的更新速度非常快,统计学科的发展日新月异,因此要求统计软件的发展速度能跟上学科的发展,不然统计方法的实施就会大受阻碍。除了这两个问题之外,统计分析还有个特点,那就是它的结果对象往往并不“整齐”,不会是行列二维表格,例如典型的回归分析中得到的结果可能有回归系数及其P值(矩阵形式)、R平方(单个数值)、残差(向量)、AIC(单个数值)等等,这也对统计软件提出了要求:我们需要能够灵活处理统计分析结果的软件,而不是生成无穷无尽的大篇幅报表,报表只是统计分析结果的汇总形式之一,并不一定满足用户的需要,例如有时候我们需要计算多个回归模型,而我们只关心拟合效果如何,因此对于每个回归结果,我们只需要提出R平方或者调整后的R平方之类的统计量并保存起来即可,而不需要输出多篇报表,然后人工去寻找最大的R平方值。

表述数据也是统计工作的重要组成部分,我认为这部分和统计分析部分有密切的关系,因为表述往往也含有分析的意味。表面看来这只是一个美学问题,而统计分析结果的表述却不光是美学这么简单。一方面,我们想将结果安排得美观或直观,这需要我们挑选关键的统计量来完成表达,而去掉那些无关紧要的结果,这也要求统计分析结果中的对象可以被任意提取;另一方面,统计图形也是数据表述的核心组成部分,因此要求统计软件有较强的统计图形展示能力。

R语言

RGui:Windows下R的图形界面
RGui:Windows下R的图形界面

R是一门用于统计计算和作图的语言(http://www.r-project.org),受S语言影响发展而来。R语言最初由新西兰奥克兰大学统计系的Robert Gentleman和Ross Ihaka合作编写。自1997年开始,R语言开始由一个核心团队开发,团队成员来自世界各地的大学和研究机构。迄今为止,R源代码已经经历了近70次主要更新,功能也在不断完善、增强中,主要统计功能包括线性模型/广义线性模型、非线性回归模型、时间序列分析、经典的参数/非参数检验、聚类和光滑方法等。R语言具有免费、开源及统计模块齐全的特征,已被国外大量学术和科研机构采用,其应用范围涵盖了数据挖掘、机器学习、计量经济学、实证金融学、统计遗传学、自然语言处理、心理计量学和空间统计学诸多领域。

谈R语言不能不提S语言,因为R语言的发展主要是受S语言和Scheme语言的影响,尤其是在统计分析部分,R和S非常相似。S语言在70年代由贝尔实验室统计部门开发出来,它的设计者们从一开始就做出了三个决定:

  1. 设计S语言的目的是为了提供一个完整的数据分析环境
  2. S语言应该包括交互式图形
  3. S语言应该有详细的在线文档

从这三点我们可以看出,S的直接目的在于数据分析,这是由于此前统计部门的工作者在实际工作中感觉到了当时的软件在数据分析上的不便,因此想开发一套针对数据分析的环境;统计图形的意义在于用户可以随时调用图形来交互式分析数据,这是探索性数据分析的重要部分,我们也都知道探索性数据分析在统计分析中的地位,因此图形作为S语言的开发重点有长远的战略意义;至于文档,则是统计软件与模型方法的重要连接,它意味着使用统计软件必须清楚文档,而读懂文档的前提是对统计方法有一定的了解,这就要求统计软件使用者具备一定的专业素质,从而避免“垃圾进垃圾出”的情况。

深感Fortran语言使用繁琐的S语言设计者们在一个大的Fortran库的基础上设计出了易用的S语言,它省去了每次都编写低层程序的麻烦,而只需要在高层语言中调用低层语言计算。这对那些常规的统计分析过程来说大大减轻了编程的工作,甚至可以说,常规的统计分析从此不需要“编程”了。S语言于1998年获得了ACM(美国计算机学会)的软件系统奖,获奖的原因是:

  • S系统永久性改变了人们分析、图示和处理数据的方式
  • S是一个精致、广为人们接受和不朽的完整软件系统

注意S语言是所有统计软件中唯一获此殊荣的软件系统。

S语言后来逐渐发展成为了商业软件S-Plus,但最初S语言的源代码都是被公布在网络上,因此R的几位作者可以参考S语言的源代码开发R语言,后来R语言也成为了自由软件的成员,获得了越来越多的支持者,大家开始为它找错误和漏洞、编写代码、撰写文档并对用户提供帮助。这所有的工作都是无偿的。

R语言除了在统计计算和统计作图上的方便之外,其面向对象的编程方式为统计分析带来了本质性的革命。在R里面,几乎所有的东西都是对象。每个对象都有自己的属性,我们可以自由操纵这些对象及其属性,包括提取、修改子对象,以及保存对象等。既然统计模型能和对象对应起来,那么只要一个新的对象在数学理论上存在或可计算,那么就可以很快用R写出来,而且用R写程序非常简便,一般来说它的代码几乎可以和数学公式完全对应,例如一个变量的m阶样本中心矩:

数学上为$\sum_i (x_i-\bar{x})^m / n$,R里面为sum((x - mean(x))^m) / length(x)

再如回归系数向量(注意实际上R不是直接用下面这种矩阵求逆的方式计算的):

数学上为$(X’X)^{-1}X’Y$,R里面可以写作solve(t(x) %*% x) %*% t(x) %*% y

可以看出,R编程具有数学上的优越性,它内在的隐循环让我们节省了大量写繁琐代码的时间和精力,以上的例子若用低层代码编写必不可少涉及到大段的显式循环,而R将这些过程打包交给低层代码去计算,从而简化了编程的工作。实际上即便是这种“编程”在R里面也不多见,诸如回归等模型都有特定的函数lm()去计算,用不着我们自己写程序。从这种意义上来说,R没有图形界面完全不重要,因为在其它带图形界面的软件中点菜单本质上就是在设定函数的参数,对R来说只是敲键盘的事情。而R里面有大量能做的工作通过菜单操作是不可能做到的。这样的例子数不胜数。

(插播小广告:写这篇文章听着歌,刚好听到五月天的一首歌,让我想类比一句话:R只因统计而生!广告完毕。)

R与统计结合之紧密,是需要时间去体会的,这种味道,我在其它软件中没有感觉到过。这里不再多举例,仅留几个问题供大家思考、玩味:

  1. 为什么R很多函数对缺失值的处理方式是不要删掉缺失值(na.rm = FALSE),从而使得计算结果为NA?
  2. 为什么连简单的计算均值的函数mean()还有trim参数?均值不就是把所有数字加起来除以样本量么?
  3. 为什么R、Excel、SPSS、SAS等软件计算出来的分位数可能不一样?样本分位数的计算有多少种方法?参见quantile()函数。
  4. 为什么简单的箱线图还有notch参数?
  5. 为什么直方图hist()不能像SPSS那样自带选项让用户添加一条正态分布的密度曲线?

Stata软件

Stata统计软件由美国计算机资源中心(Computer Resource Center)1985年研制。特点是采用命令操作,也可以菜单操作,程序容量较小,统计分析方法较齐全,计算结果的输出形式简洁,绘出的图形精美。不足之处是数据的兼容性差,占内存空间较大,数据管理功能需要加强。网址:http://www.stata.com。

Stata是各种商业统计软件中我最喜欢的一款(先声明我没有收取广告费),当然不管什么统计软件在我眼中都离R差远了,但是Stata确实做得还不错,虽然它的名声远不如SAS和SPSS,但其统计模块非常齐全,打开看看菜单就知道了。尤其是计量经济学和医学统计的人,如果惧怕写代码,不妨试试Stata。它分析小型数据应该是非常顺手,但能读取的数据种类有限,据我所知基本上仅仅是纯文本数据和Stata本身的数据(*.dta),而且计算受内存大小和程序版本种类限制,所以无法处理特大型的数据。

在用Stata菜单操作的时候它同时会在屏幕上输出与菜单对应的程序代码,因此若不熟悉Stata编程,可以通过这样的过程逐步学习,而且有些操作用菜单不方便实现,此时就可以结合不同的程序命令来完成。(例如指定模型中的分类变量要用xi:命令,但它在模型的菜单中无法直接指定,所以可以直接把xi:加到模型命令的前面)

另外需要提及的是,Stata自身有一本刊物Stata Journal,里面的内容比较学术,都是结合Stata命令讲一些统计方法如何实现,不过这本刊物要收费,这点对于学生来说是个比较大的障碍。所以话说回来,要看这类文章还是看R News吧,它不但不收费,而且文章质量也都比较高,明年就要更名为The R Journal了。

SAS软件

SAS是英文Statistical Analysis System的缩写,即统计分析系统,最初由美国北卡罗来纳州立大学两名研究生开始研制,1976年创立SAS公司,2003年全球员工总数近万人,统计软件采用按年租用制。SAS系统具有十分完备的数据访问、数据管理、数据分析功能。SAS系统是一个模块组合式结构的软件系统,共有三十多个功能模块。网址:http://www.sas.com。

我在COS论坛(http://cos.name/bbs)上对SAS的介绍是“庞大的统计分析系统”,并没有强调它在统计分析方面的所谓优势。论坛上有几位朋友认为SAS编写代码的方式已经非常“恐龙级”了,对此我基本认同,不过鉴于我对SAS了解并不深入,所以不敢大放厥词。总之,“大”未必好,甚至以小人之心去揣测一下,也许“大”意味着代码臃肿。总之我们也看不到源代码,不知道它的统计分析代码怎么能写到七张光盘那么大。R的Windows安装文件30M,源文件16M左右。

别的不多说了,据我了解,我周围上下的同学在SAS上面花时间最多的是学习怎么把这个大家伙装进自己的电脑,然后道听途说一个proc名称,就开始把数据导进来写上几个变量名,然后提交run,直到有一天终于有了长达30页的报表了,就高兴了。大家不妨对照看看自己是不是这么做的。

SPSS软件

SPSS是Statistical Package for Social Science的缩写(后来改成什么服务Service了),即社会科学统计程序包,20世纪60年代末由美国斯坦福大学的三位研究生研制,1975年在芝加哥组建SPSS总部。SPSS系统特点是操作比较方便,统计方法比较齐全,绘制图形、表格较有方便,输出结果比较直观。网址:http://www.spss.com。

算了,SPSS没什么好写的,自己打开看就是了。懂统计的不用学,不懂统计的学了也白学。反正要是不懂统计你总懂点右上角那个OK按钮吧。SPSS是傻瓜软件,所以有时候开玩笑戏称之为Stupid Package for Social Science。

匆匆行文,思想杂乱,请读者小心阅读。最后,以自编的一段大腕儿结束吧(关键的文字都在本文的第一部分):

“一定要找最庞大的软件,聘哈佛的统计教授,什么SAS啊SPSS啊,能买的全都给我买了,买就买最烧钱的软件,用最复杂的统计模型,比Breiman的随机森林还难,生成报表比红楼梦还长,什么互熵呀,BIC呀,随机效应呀,能挂的全TM给他挂上。计算时间最少也得一个星期,你要三天就算出来,你都不好意思跟人打招呼。软件就要买实用功能少的,1%截尾均值没法算,带凹槽的箱线图没法画,特冠冕堂皇的那种,到了分析的时候,甭管有用没用,它都得输出这么几句:‘All requested variables entered. Testing Global Null Hypothesis: BETA = 0’,一口地道的统计术语,倍儿有面子,你说买这样的软件得花多少钱啊?我觉得怎么也得一万吧。一万?那是软件小于600M的,其它至少十万,你还别嫌贵,弄不好人家还回收你的使用权,就一个字:黑!你得揣摩软件生产商的心理,能用这种软件写报告糊弄领导和期刊编辑的,根本就不在乎再多花几万块钱,什么叫统计分析你知道吗?真正的统计分析就是不怕得不出有用的结论,得不出倒显得报告深奥!所以我们选软件的口号就是‘不求最好,但求最贵!’”

作者注:下面3号评论提到的文档可以作为大家选择软件的参考,感兴趣的读者不妨一读。谢谢江堂。

关于谢益辉

RStudio码了个工,Iowa State University统计系博了个士。统计之都网站创办者;研究兴趣为统计图形及数据可视化,对统计模型方法的发展感兴趣但不喜欢纯粹抽象的数学理论,以直观、实用为学习标准;偏好以R语言为工具;Email:[email protected];个人主页:http://yihui.name

统计学专业应该使用什么样的统计软件(写给在统计学院学习的学弟学妹之四)》有42个想法

  1. R做学术研究,学习都不错,不过其他商业软件也得会用吧,毕竟R在企业中的普及程度还比不过SPSS和SAS,找份实习都得会SPSS。

  2. 一个SAS使用者的回应

    软件大比拼,UCLA ATS Statistical Consulting Group有篇很好的报告Strategically using General Purpose Statistics Packages: A Look at Stata, SAS and SPSS,最后有个推荐,说Stata和SAS搭配来用,可以扬长避短,发挥最大的功用。在统计分析方面,如果拿R跟SAS比较,我想最后也会得出类似大团圆的结论。以下三条,引号里面的,都来自益辉原文,下面则是我的一些相应的回应。接下来,我会单独提些话题,比较一下SAS和R。

    1. “程序的可靠性或正确性:大多数商业软件都不是开源软件,我们并不知道其背后统计方法在计算机程序上的可靠性,从这一点上来讲,我们只能根据输出结果去判断程序是否可靠”

    益辉的意思是不是,开源软件,因为可以查看源代码,就可以判断其统计方法的可靠性?如果是这样,我做些回应吧。成熟的统计软件包,如SAS,它的计算方法,经受了SAS研发人员的多重检验和测试,而且还要接受外部的测评,美国FDA在新药检查时,只认准SAS的计算结果,其方法的稳健应该没多少问题。我们对其他商业软件包的看法,也应该类似。

    开源软件像R,在这方面其实应该受到质疑。对一个统计方法,可能有很多R使用者查看代码,考究其稳健性。但软件测试不是单凭读代码就可以完成的,也不是随便拿一个小数据跑跑就可以的。这方面,我想广大R使用者应该谦虚些。

    益辉用Excel做例子。但Excel无意成为统计软件包,它只是一个有简单统计功能的电子表格。

    2.“模型方法的变化与更新”

    这个R当然做得更好。但熟悉SAS的用户也清楚,SAS也在随时提供experimental SAS software,这次新发布的SAS9.2就融入了以前的一些实验算法,包括mcmc、bayes之类。

    很多朋友觉得SAS在算法更新方面一无是处,我的两个回答是,一就是上面提到的SAS在这方面也做了不少工作,二就是从应用的角度来说,SAS是一个商业软件包,它引进新算法是要考虑工业界的需求的。

    3.“总之我们也看不到源代码,不知道它的统计分析代码怎么能写到七张光盘那么大。R的Windows安装文件30M,源文件16M左右。”

    SAS的统计分析代码没有七张光盘那么大。SAS是一个商业分析的套件,包括银行、零售等各个行业的解决方案,它的代码级当然是R不能想象的。SAS/STAT模块execute在SAS root下的文件大概是30几兆。

    你可以proc setinit;run;一下,查看机器装了多少SAS产品,大多是一般人一辈子也用不到的。在安装时大伙可以只勾选几个常用的模块。

    又,很久很久以前,SAS是英文Statistical Analysis System的缩写,现在SAS只是一个品牌。

    我再单列3个话题,关于R跟SAS,

    4. 统计做图

    这个是R比较自豪的地方。SAS9.1.3中的实验版本,现在SAS9.2正式发布的SAS ODS statistical graphics,一样能做出publication-quality graphics。

    5.矩阵运算

    R是一门矩阵语言,SAS提供相应的矩阵运算模块,SAS/IML(Interactive Matrix Language),跟Matlab类似。

    6.数据访问

    R支持很多数据格式,SAS提供更多,包括各种数据库和ERP系统。这个不能多说,否则有以大欺小之嫌。同样不能多说的是并行计算等。

    1. 我非常同意此观点。R虽然免费,在教育界刮起了一阵旋风,但是里面的算法和代码的严谨性是不可考量,总不能在用之前,先要测试一下,函数是否正确。
      我用过brison的包,里面的算法完全不正确(我个人认为,我不得不用C语言重新写),这只是一个例子。我相信里面肯定还有很多包是值得怀疑的。做数据分析,最重要的就是严谨,如果整个处理流程都做得严谨了,反正偏偏在R处理时,用了某个(些)错误的包,那将意味着所有的努力都白费了。
      R可以作为学习之用,但尽量不要用在工作中,SPSS,SAS,STAT都是值得信赖的,他们是商业软件,也必须对所有函数的准确性作出保证。事实上,他们也已经做过无数的测试了,也有很多很多世界级的公司在用,准确性上是可以保证的。

  3. To 2号:先统计,后软件。我认为SPSS的问题在于它把不适合傻瓜化的东西给傻瓜化了,分析数据好比医生给病人看病,是需要专业知识的,而不是拿着手术刀咔嚓咔嚓几刀下去就能完事的。

    To 3号:谢谢江堂兄推荐的这篇报告,一会儿我把它补充到正文中去。作者认为R的学习门槛太高,我想原因可能在于他用其它软件的时间太长了,很多编程语言的学习都有这种障碍,一门语言用久了就觉得很难学习其它语言。我文章开头也说了,仅一家之言,我个人天天用R,因此观点难免偏向R,当局者迷,旁观者清,也恳请其他人多多批评指导 🙂

    1、我不是计算机专业出身,对软件测评不甚了解(经常听说什么unit test,不知道是啥玩儿),我的意思是,统计软件没有必要封闭源代码,统计模型方法都是统计学家或数学家(或其它行业的人)发明出来的,大家都公开了计算方法,而不是藏在家里只告诉读者计算结果,那么软件为什么要把计算过程写成程序藏起来呢?我对此表示不理解。

    Excel无意做统计,但现实是很多人都在拿它做,例如我们学院的好几位老师都以“本书例子可以用Excel计算”为推销的卖点(如贾老师力压群雄的《统计学》一书,几乎全都是Excel实现)。

    关于“广大R使用者应该谦虚些”,可能本文文风过于aggressive,我在写的时候就想此文一出,恐怕又要开始打仗了……不过我要澄清一下我的想法,关于软件问题,我首先是写统计学有什么需求,然后才写各个软件,目的在于分析软件是否切合需求,黑猫白猫没关系,关键是抓老鼠。对于统计学专业的人来说,“点OK按钮”输出一篇报表的方式对于解决实际问题来说只是一小步,更多时候我们需要多方面探索,如前面你提到的文档中所说,点菜单输出报表的缺点在于重复性差,其实固定的程序也有同样的缺点,都是不能定制、不易重复。如果统计分析的模式只有一种,那么R就没有必要存在了,关键是统计分析包含了大量的交互和非模式化的计算,这一点要求统计软件要有充分的自由——这一切都是在本文的限定语“‘统计学专业’应该用什么软件”之下所说的,其它专业当然也没有必要(更多情况下是缺少专业知识)把分析过程搞得这么灵活。

    2、没错,从学术研究的角度来说,SAS更新太慢,因为一方面开发人员有限,商业软件的运营不能那么随意,另一方面它也不能说”…and comes with ABSOLUTELY NO WARRANTY…”之类的话。话说回来,R里面也是鱼龙混杂,尤其那些附加包,用户得自己小心,没准某种模型方法的程序就是你的邻居家小P孩编了发布在CRAN上的。

    3、谢谢,又学到了新知识,以前总以为SAS就是个庞然大物。我想知道用户可不可以只买那30几兆程序?或者在那30几兆程序能完成什么工作?

    4、ASCII图时代终于要彻底终结了。

    5、可否帮我查一下文中提到的样本矩和回归系数如何用IML表达?这样以后讲这方面的运算就不会心里太没底了。

    6、数据库的问题在R里面主要依赖于数据库软件是否提供访问标准(数据源、驱动等),现在很多数据库都支持ODBC,这样的话读写数据也就比较容易了。并行计算似乎是R的一大难题,偶尔见R-help里面长篇大论在讨论,不过我不太懂这个,个人也没遇到过需要并行计算的案例,所以没关注这个话题。R的数据都放在内存中,因此计算快,但数据容量受硬件限制,这也是它的一大缺点,不过同样我个人经历有限,没遇到过数据大得没法处理的案例,数据挖掘领域可能遍地都是这样的数据吧。

  4. 谢老师的文章写得很好,我也是从spss开始学起统计学的,当时觉得能用软件实现回归等统计分析是多么伟大的一件事情(当时网络还不发达,破解软件就更少了,只会用学校的spss10.0),但是后来发现我想要的很难在spss里实现,又机缘巧合开始认识了R,立马产生了兴趣,因为R里几乎可以自由实现自己所有的统计想法,以及基本的统计计算,这对学生来说是十分可贵的,学生既可以用lm()来做回归,也可用矩阵运算来验证,等等。这样学会的就不仅仅是统计的方法,而真正是统计思想,能促进统计学发展和应用的源动力,所以我也推荐统计专业的学生可以学习R软件,其实是不难的。

  5. 首先声明,不会为了打口水仗,有些是个人感受。
    To No.3

    1、并不是 R 就没有经过测试。R 的 core team 就有这个职能。而且 R 在全球使用范围很广,
    [email protected],这点可以参考http://bugs.r-project.org/cgi-bin/R。

    还有随便找个小数据跑跑,我不太认同。我常常和数据库打交道,分析工具就是 R,
    一般的数据处理最小数量也要达到百万级的,很少见到 R 崩溃的情形。

    关于Excel 的使用,因为和谢是一个院出来的,所以感受一样。有些老师极为倾向使用 Excel,如果更难些的,用 VBA。

    2、关于模型的变化与更新。根本就不用讨论。SAS的数据分析只是其中一个职责,重要不重要而已,卖的是解决方案
    (当然什么解决方案纯粹就是忽悠人的,不由得让我想起有人总结统计学家和数据挖掘专家之间的区别其中一条就是:
    统计学家研究出一种算法,会写篇文章公开发表;而数据挖掘专家有一种算法出来,不管好坏,马上开家IT公司),
    基本上每个解决方案都是一个行业应用,不可能快。

    而R是免费的,更倾向于一种纯粹的数据分析工具。从这个角度来讲,没有比它更好的(板砖ing)。

    3、关于代码,因为没有深入学过计算机,所以也没啥说的。

    不过好像 SAS 的人员大部分是销售吧,好像研发人员不是很多(有一次跟SAS销售聊天得知的,不知是真是假)。

    4、关于作图。好看不好看是对外行人说的。而它的实际意义,是不是能够反映数据本质,这才是我们需要关心的,所以就不用比较了吧。

    5、矩阵运算没用过,想的是 R 肯定不如 Matlab,但 SAS,有机会看看 ^_^

    6、从数据分析角度看,R 对数据库支持很好。如果要比较什么 Enterprise,那就是另外一个题目了。

    R 支持并行计算,我似乎看过一篇关于 rpvm 包的应用。

    知识储备有限,多多板砖^_^

  6. 老谢,我们要打口水仗啦,下次见面请你吃饭。一下各列,与4楼一一对应:

    1、

    不公布源码,是普遍的商业行为,跟生计有关。模型由统计学家发明,实现方法却各有不同,封装起来,商业软件才好卖钱,厂商才有动力继续提供高质量的产品和支持服务。开源运动自有其乐趣,厂商也有自己的考虑,我们幸运地处在这个多元的时代。

    Excel无意做统计,但现实是很多人都在拿它做,例如我们学院的好几位老师都以“本书例子可以用Excel计算”为推销的卖点(如贾老师力压群雄的《统计学》一书,几乎全都是Excel实现)。

    Excel无意做统计,所以不能指摘它太多。有很多人喜欢用它做统计,却也无妨,个人偏好而已。

    请“广大R使用者应该谦虚些”,不是批评这里的文风aggressive(我喜欢这样有生气的风格),我是说,在评判软件质量时,开源软件有一批忠实的用户找bug,商业软件也有专业的工程师做相应的测试,他们的软件是要卖钱的,客户买来是要用做商业决策的,利益攸关,不敢马虎。这里我不说商业软件比开源软件可靠,但至少一样严肃。普通用户只能像你说的,“只能根据输出结果去判断程序是否可靠“,但你说”这种测试方法是非常低效的”却有不妥,——这话没错,但普通用户没有必要评判像SAS、SPSS这样的商业软件的可靠性,很多严肃的研发人员已经做过了,这些软件也在很多企业用过数十年了。

    当然,对统计专业的学生,可能需要了解更多。但我想,大多统计专业的学生,也没有能力评判一个软件的可靠性。我们用R,因为很多高水平的人在用,我们相信他们,我们也用。同样,我们用SAS,因为很多高水平的人在用,我们相信他们,我们也用。我想,社区的这些信任还是没问题的。

    我注意这个前提,老谢,这篇文字是写给“统计学专业“的师弟师妹,我说这么多,只是觉得里面可能传达了一些有争议的东西。对统计学专业的需求,我的确不能说太多,先打住。

    2、comes with ABSOLUTELY NO WARRANTY,这个话商业软件提供商不能随便说吧?还怎么卖钱?这个更像是开源软件read me里面的话。

    3、商业世界里,没人敢装那么多模块,都是要花钱的。SAS/STAT要跑,需要SAS Base和SAS/Graph两个模块,加起来几百兆吧。

    4、略。

    5、跟Matlab类似,SAS/IML也是号称电子数学稿纸的矩阵语言。比如,回归系数可以这么写:
    b=inv(x`*x)*x`*y;

    样本距, 有个内在的循环,R写着是漂亮,这个我再看看。

  7. 俺刚看完大家的讨论,不过现在要出门一趟,来不及吼两嗓子了,回头我应该请你吃饭才是啊,先谢谢你们的讨论 🙂

  8. 虽然都不会用。商业软件更适合商用吧。毕竟公司更喜欢和公司打交道。free的东西好处只限于懂行的人人之间的私下交流传播。外行喜欢解决方案之类的玩意。如果在公司中推荐free软件无形中就要负起额外的责任,给自己揽了维护,教育用户之类的许多的麻烦。职业动物考虑问题的立场和学校里的动物不太一样。

  9. To 7楼老刘,

    1、测试这个话题,是提到商业软件和开源软件的可靠性,我说像SAS之类的商业软件,有专业的测试。我相信Core R也是稳健的,但这种开源软件的测试(读代码也是一种测试),人力、物力之类的投入,一定有限。所以老谢质疑商业软件的可靠性,我大大的有意见。

    2、SAS凭借其行业解决方案,07年的收入在20亿美刀,它的客户是跟我们一样聪明的金融机构、政府、零售企业等等,用”忽悠“这个词我想是在开玩笑吧?

    SAS所有的解决方案,基础都是其核心模块Base SAS和SAS/STAT等,分析模型当然非常重要。这种分析型的商务智能解决方案,是SAS跟其他报表做得超炫的BI厂商如BO等的最大区别。

    又,什么是”纯粹的数据分析工具“?为什么免费的就”更倾向于一种纯粹的数据分析工具“?

    3、SAS是软件企业,研发人员比你想象的多。跟SAS销售聊天,大概接触的是SAS China的吧?SAS在中国的研发人员,是其销售的两倍。

    4、关于作图,”实际意义,是不是能够反映数据本质“,呵呵,老谢老说两句。

  10. 额滴神呀,这一个个回复如此之长,以至于一边写要一边拉上去再看看原文 🙄

    先To 10楼:免费软件可以节省一(大)笔成本,商业软件同样也是要花钱培训才能使用。另外,免费软件也容易扩展为所谓的解决方案。

    再To 8楼:

    1、理解卖钱,理解测试。不过还有一点不太理解,商业软件一方面讲要卖服务和解决方案(如10楼所说),一方面又封闭源代码,看样子源代码也是卖的重点啊,若有底气卖统计或数据分析服务,源代码的重要性应该很低才对啊。算了,这个问题不谈了,我也没卖过软件,不知其中奥妙。

    你说的信任我赞同,开源软件同样需要信任,虽然我对统计软件有怀疑倾向,但我也没能力亲自查看所有的源代码。只是在看不见源代码的情况下心里总是隐隐作怪。

    2、开源软件一般都会强调这句话,但它们的质量其实是很高的。商业软件当然不能讲这话,而且应该反过来讲,不过不知道是否能说comes with ABSOLUTELY WARRANTY(应该是不行,世上没哪种软件敢号称绝对保障,连TeX都能被人找出一两个Bug)。

    3、略。

    4、略。

    5、谢谢。

    关于11楼对7楼老刘的意见:

    1、R面向全人类(猩猩要是会读代码那连猩猩也可以算进来)开放,测试集比较大,具体有多少人去报告Bug我没有细看,只记得本小子有一次自个儿在那儿瞎得瑟给R-Bugs发了一封报告,结果被某Core讽刺了一番,说那不叫Bug,心中那个拔凉拔凉的……如果说“群众的眼睛是雪亮的”的话,那么R的Bug测试基本还是挺靠谱的。

    2、唉,统计分析的客户……俺觉得貌似有相当一部分都不是太聪明(统计意义上的聪明),俺真的遇见过某基金公司买了SAS来导Excel数据的……

    关于R倾向于数据分析,我想来源于S的设计思想,当时流行的统计软件都喜欢一口气输出一大堆报表,贝尔实验室那帮S的作者们觉得太浪费,结合John Tukey大人的“探索性数据分析”思想,S的作者们就以(交互式)数据分析为目的设计了S语言,后来R看重数据分析、计算和图形,和S的初衷是一脉相承的。

    关于解决方案,由于R可以灵活定制,我想根据客户需求应该是不难实现他们想要的方案的。我用R给一些“客户”做过类似的事情(统计局、海关等)。

    3、不清楚。

    4、要我说的话,我只知道SPSS有个图形届的大牛在,但是SPSS的图形一向是丑得惊人,不知道怎么回事;SAS图形我只记得那种ASCII形式的图形了(还顽强活到了今天)。作图本来的目的确实不在于好不好看,而在于表达数据信息(或“本质”)。R的好处在于统计计算和图形能很方便地结合起来,这样可以跳出固定图形模块本身的限制,灵活定制图形,例如前面刚刚写过的用局部加权回归散点平滑法观察二维变量之间的关系,计算与图示浑然一体,想加线就加线,想加点就加点,图形元素的属性可以灵活表达数据信息(例如线条颜色深浅表示LOWESS取数据的区域宽度)。

    我对SAS Graph不熟,不知道扩展性如何。R把图形函数分为低层函数和高层函数,前者用来往现有图形上添加元素,后者生成新的图形,二者往往结合使用,非常方便。

  11. 神啊!刚从学校出来3年就变老刘了,赶明儿赶紧去买瓶大宝,要对自己好一点 -_-
    喜欢用R白话点说,有几点原因:
    1、SPSS、SAS太贵,买不起
    2、用 R 的过程中,确实明白了统计是个什么东西。这是学SPSS时没感觉的。
    3、至少我的范围内,商业软件有的功能它都有
    4、作图忒漂亮,也方便(流程图我都用它了)
    5、其他欢迎补充

  12. 这个2有感觉,R学不会的原因相当大一部分在于统计没搞明白,R把赤裸裸的统计原理以函数参数的形式摆在了眼前,用的人就很郁闷,NND这权重weights是啥意思,这计算方法qr是啥意思,这对照组设定contrasts是啥意思,顿时觉得自己啥都不懂……心想还是SPSS好,啥都不懂的时候仍然可以开心地点OK按钮 :mrgreen:

  13. 我个人的感觉是:
    如果你要找好工作,那应该学好SAS;
    如果你要读统计PHD,那应该用好R;
    有了R+SAS+EXCEL打遍天下都可以

  14. 所以对于本科生来说,要看今后的方向如何来决定学什么统计语言。

  15. 用R的话,个人感觉就像是进行自我蹂躏,刚开始总是有些痛苦的,到后面就有快感了。

  16. It is obviously biased when speak to the deficiency of Stata. “占内存空间较大”, it may be true when compared to SAS, it is definitely not when compared to R.

    1. 但是我常常遇到内存不够的情况啊,后来干脆把最大内存限制设置为电脑内存,可有时候还会出现计算过程中丢失变量的情况,也就是算着算着数据中某个变量就没了,匪夷所思……

      1. “算着算着数据中某个变量就没了,匪夷所思”
        这个情况我也遇到过,原因很简单,你用的是盗版吧。在我的学校正版Stata机器上从来没有丢过变量的情况;而在我自己家里的装的盗版Stata上就有这样的问题。这一点你也可以上网搜索求证。

        作为Stata的用户我也的说两句:
        1. 说Stata支持的文件种类不多是不对的。Stata本身可以倒入很多数据类型,貌似包括SAS文件。而且Stat/Transfer这个软件(另外卖的)可以装换很多文件格式。况且与其它软件合作我认为这也不是什么大问题,如SPSS就可以将文件直接存为Stata格式很方便的。

        2. 关于处理大文件,Stata(高级版本)所能处理的文件大小理论上是没有限制的,也就是说仅取取决于计算机物理内存大小。现在民用级的计算机内存都动辄几G了(听说还有人用两位数的内存)应该不是问题吧。

        3. Stata Journal是收费的。但经常你可以顺藤摸瓜,找原文作者的网站(如大学的profile里面)往往可以找到免费的working paper。。。

        还有,Stata的一个重要特点/优点是有大量的user written program,这点应该和R类似。比如它的GLLAMM程序似乎可以媲美MLwiN。还有它的documentation,各种出版物(Stata Bookstore)都是非常不错的。

        还有这里面列出的都是general purpose软件,当然也有很多不错的“专业”的软件,如WinBUGS(Bayes),上面提的MLwiN(Multilevel model),Biogeme(discrete choice model)。。。

  17. 居然从上到下都看完了。我来补充几句,或者是我自己的理解吧,不对之处再在所难免,恳请指正(我的GPL)。

    1) 关于中文“免费软件”这个翻译,这是一个诟病了。想必大家都知道英文原来叫做“Free software“.他的解释是“不受限制地自由使用、复制、研究、修改和分发的软件”,我觉得一个比较妥当的翻译应该是“自由软件”,大多数“Free software”是免费使用的,R是一个例子。所以说用中文”免费”这个词来讨论R和SAS是没有意义的。

    2)关于稳健性而言(我采用前面胡江堂的说法)。质疑所有的开源软件缺乏稳健性是欠妥当的,我们也不用举很多老掉牙的例子。以R为例,但是“R is free software and comes with ABSOLUTELY NO WARRANTY.”这句话是必须的,应为他是GPL协议的一部分。举一个不是很恰当的例子,两个很健康的人,比如同卵双胞胎,他们一个人买了健康保险,记做A,一个人没有,而被贴了一个标签“本人随时暴露在生病风险中”,记做B。我们不能由此怀疑B的健康状况。

    3)说到稳健性细节,我们拿同样的代码结构做同样的事情,R出错了,但是Matlab没有,SAS也没有,我就遇到好多这样的事情,于是我们说R缺乏稳健性。对R来说这是不公平的。怎么解释这一个现象呢,很简单,Matlab和SAS的工程师作了很多Error Catch的工作。虽然我不是计算机出身,但还是知道检查一个脚本语言的稳健性应该是检查内存溢出之类的。我们前面说的不过是编译环境的容错能力,不过我们不得不承认,R的gui界面比较简陋。这是绝大多数自由软件的通病。这对初学者而言确实比较重要。一个有趣的例子,有几十年统计编程普林斯顿的Chris Sims教授以前是Matlab的忠实用户,有一天他给MathWork写信,能不能将他现在Academic license用于其他用途,人家没理他,老头子生气了,就转向了R,而且写了很多很好很高效的函数。举这个例子无非是想说我们担心R的稳定性是杞人忧天,与其如此,还不如多花点时间钻研一下数据结构。

    4)对于大数据处理能力,这个完全是硬件决定的。和R没有任何关系,就像SAS9.2声称的一样。我可以举一个例子,在Berkeley的Yu, Bin教授讲,他们作气象的预报,气象卫星数据是以T为单位的,而且以几何级数增长,他们的主要工具是R。我们仔细看R手册会发现,对于Window操作系统,现在的R有一定的内存限制,这个是由两个原因决定的,部分R函数是用32位的Fortran写的。还有在CRAN的Windows二进制R包的编译器是用MinGW编译的,而64位的MinGW还不够完善。如果你能够自己编译源码,这些问题完全是可以避免的。

    4)并行计算。任何一个脚本语言都有并行计算的能力。R作并行计算的需要一个消息传递机制,现在流行的有MPI。但是MPI不是R的一部分,要做到并行计算,就需要将这两个结合起来。Matlab有自己的Parallel Computing Toolbox。R也有SNOW。我们所做的就是将这两件东西组合起来。2009年,著名的萨博汽车(SAAB)要倒闭了,因为通用汽车要倒闭了。于是,愚人节那天有一家报纸娱乐大家说,如果有一天宜家(IKEA)把萨博收购了,一定会很好玩。而且好多人的回应是 “A lot of fun!”

    4)怎么选择?坦率的讲,如果我是老师,我给本科生推荐,我依然推荐SAS, Matlab。原因很简单,他们要去找工作,这也是很多高校这么做的。但是对于一个研究者而言,我推荐R。没有金刚钻,不揽瓷器活。其实对价格而言,大家好像对商业软件的漫天要价已经习以为常了,毕竟科研就是一个很砸钱的活。而且我觉得我们现在宣传R以免费作为侧重点来宣传不是长远之计。

    5)最后,举个例子我来说一下我为什么喜欢R。去年秋天,Matlab的首席工程师来欧洲,我去参加他们一个5-6人的小型研讨会,他问我:你对Matlab有什么不满意的,我就抱怨说你们那个帮助太差劲了,我要看个简单回归函数的用法,好家伙,你先给我来3-4页的Introduction. 你是一个卖软件的,教我怎么用统计方法,这不是。。。于是他们在2008b版本改进了帮助,添加了一个缩略版的帮助。可是依然不是我想要的function-prameter-usage-example类型。顺便说一句,MathWork是一个小公司,全球包括销售不到300人,你知道R有多少contributors吗?还有一件商业软件让我很伤心的事情。最近在做模拟,我的程序都是用Matlab2008b调试的。Cluster的Matlab是2006b。于是出现了严重的函数不兼容问题。其实这个早不是商业软件的秘密了。于是系里只好再花钱更新软件。Matlab SAS,你们有福了。(我是不是像个愤青?)

    6)还有纠正一句胡江堂的话,“你可以proc setinit;run;一下,查看机器装了多少SAS产品,大多是一般人一辈子也用不到的。在安装时大伙可以只勾选几个常用的模块。”这句话是有问题的。不是我想选几个模块就安装几个模块,而是我买了几个模块才能安装几个模块。

  18. 如果R和SAS同样为免费软件的话,您会用哪个呢?
    从非统计专业科班出身来讲,在R与SAS的选择上还是会SAS的。不过人各有志,软件各有专攻,只要能满足工作、学习要求就行。

    1. 这种问题挺难回答的,矛盾就在于,非专业的人究竟需要具备多少专业的知识?如果不注重专业知识,那么操起鼠标点按钮,最后皆大欢喜,管它出来的是什么东西;但又不可能要求非专业人士完全具备专业的知识,毕竟各人精力都有限。我认为R营造了这样一种“气氛”,就是逼迫你去思考,这些方法背后的理论究竟是什么,结果究竟是什么意思,即它提供了“function-prameter-usage-example”类型的文档,尽管从统计理论方面来说,它并不完善,但这已经不关R的事,既然你要用它,你就得先打好统计的基础。

  19. “这句话是有问题的。不是我想选几个模块就安装几个模块,而是我买了几个模块才能安装几个模块。”
    引用楼上的话,哈哈,那可能是用的D版。

  20. 云里雾里看完了,大家都是科班的,我一以门外汉,不过现在要用统计做毕业论文,老师介绍用spss。都说spss好用,我咋就没觉得那……..

  21. 请问 谢益辉:
    R中如何轻松实现并行?有没有现有的工具软件包,很多时候的计算需要计算的量很大,一个机器并且一个CPU很费时费事

    想实现1:单机多CPU并行
    2:多机多CPU并行

    请问有没有什么好办法?

    1. 对于近期的职业规划来说,我个人仍然倾向于以SAS为吃饭的工具,长期来看,是SAS还是R根本不重要,统计才是本质问题。你发的这篇文章中,作者排斥用代码的方式工作,用了一个最简单的“散点图+相关系数”就把R打发了(文中R代码不可运行,而且有冗余,不知从哪儿拷来的),然后说R是一个“华丽丽的失败”(R is an epic fail)。关于这一点,显然过于不公平,我无心争论。

      再说作者认为NB的两件事:

      一、数据可视化。我本人很高兴看到这一点,因为这正是我的研究方向之一。不过我不知道作者是否真的看过R的可视化的一系列包: http://cran.r-project.org/web/views/Graphics.html (比如rggobi)我的老板说我们这里有最好的数据可视化研究团队,而我们团队里所有人都在用开源软件,以R为主,没有人用SPSS、SAS或JMP。

      二、非结构化数据。不知道作者是否可以给一个R无法或很难处理的非结构化数据,我不知道什么数据能乱到用R的文本处理函数(加上正则表达式)无法处理的地步,除非是一点逻辑都没有;如果真没有逻辑,那么任何软件都无法处理。

      #######################################

      不可否认,用代码的方式工作确实起步难,会让很多初学者吓得不敢进门,但我的经验是,这是学统计必需的代价。我见过太多太多只会点鼠标但对鼠标背后的东西一窍不通的人,从某种程度上来说,R是在有意为难用户,它逼你去想:奶奶的,这lm()的weights参数到底是什么意思?这profile()的原理到底是什么?我便是在这样恶劣的环境中成长起来的。个人观点,小马过河,读者慎阅。

      1. 谢老板,作者应该是统计方面的行家了,自有自己的一套看法,不必苟同。在没有对所有软件做系统分析之前,都不好下结论哪个更好,这其实也是统计问题。你以你们团队在做的事为出发点,是否也有统计之误在里面?统计之人其实也会被统计愚弄,这也是一个讽刺。SAS的魅力就在代码上,JMP的可视化也是很震撼的,有时间可以看看,也可能对你的研究工作有启发。

      2. 是啊,人人都有一口井,观着自己的天,所以每个人的意见可能都是偏见,只不过自由软件用户可能会更偏一些。我反复提小马过河,深浅自知,有些东西对自己是良药,对别人是毒药。

        如果我现在来重写这篇文章,JMP可能会放到Stata之前,它确实做得不错,但我想在R中应该都有相应的替代品。如果质量类似,为何不选择价格为0的产品呢?

  22. 呵呵
    被转载也不错。
    是一种认可
    同时也是一种宣传(建议大家标明表明出处)。
    下午在另一个网站看到了这篇文章(正在了解统计软件间的异同,很感谢谢老师的文章给我对统计软件的概况留下了一个较全面的认识)。。。
    由于转载,其间的数学公式给漏了
    百度了一方,就来到了这里。
    进来不禁又看了几篇,直到看到这是个公益网站
    四年,实在不易。希望越来越多的统计学人士加入进来
    壮大这个网站,让更多的人通过相互交流,共同进步。
    谢谢

  23. 呵呵 评论也很精彩
    有很多让人深思的地方。
    一年多间,软件都有了不同的发展
    内容是否考虑过 与时俱进 呢?
    唯一的 小建议 呵呵:)

  24. 如果早看见这篇文字,早就开始学R了!没有学过R的同学们赶紧了

发表评论

电子邮件地址不会被公开。 必填项已用*标注