选择 R 语言做统计分析的理由

  • 崔康

2013 年 11 月 5 日

话题:语言 & 开发架构

R 语言是 S 语言的一种开源实现,一种用于数据分析和图形化的编程环境。资深分析师 Catherine 最近撰文结合自己的实践经验详细介绍了 R 语言的优点和缺点。

Catherine 指出,R 主要用于做统计工作。你可以把它看成是像 SAS Analytics 分析系统的竞争者之一,R 如此强大,诸如 StatSoft STATISTICA 或者 Minitab 与 R 相比,就不值一提了。

许多专业的政府部门、商业和制药行业的统计人员和方法论者把他们的事业都倾注在了 IBM 的 SPSS 或者是 SAS 上,但是他们并不用写一条 R 代码就能用。所以,从某种程度上来说,决定去学习 R 是一个事关企业文化和你如何去工作的问题。我在我的统计咨询实践中使用好几种工具,但是我所用的大部分都是 R。

关于 R 语言的优点,Catherine 列举了若干条:

  • R 是一个强大的脚本语言。我最近被邀请去分析一次概略研究的结果。这些研究者翻阅了 1600 篇研究论文,并把这些内容用几种标准来编码——事实上是大量的标准,并且这些标准还包括多个选项和分支。他们的数据曾经放到微软的 Excel 表格中,这表格中居然包括 8000 列,然后这些列大多是是空的。这些研究者们想要在不同的类别和标题下对总数进行压缩,R 是一种强大的脚本语言,它能够像 Perl 的正则表达式一样来处理文本。凌乱的数据需要编程语言这样的资源,尽管 SAS 和 SPSS 有处理那些超越下拉菜单任务的脚本语言,但是 R 是被用作一门编程语言来写的,因此,对于这一目的,R 是一种更好工具。
  • R 领导新的方式。许多新的统计学方面的产品在成为商业平台之前,最初是作为 R 的包而出现的。我最近得到关于病人回访的医学研究的数据。对于每一个病人,我们有医生曾经建议的治疗条目的数量,同时也有病人实际记住的条目数量。自然模型是β- 二项分布。自 20 世纪 50 年代以来,这一点已经被广泛熟知,但是把估计程序与感兴趣的协变量关联起来却是最近的事情。通常,像这样的数据都要用一般估计方程来处理,但 GEE 方法是渐进的,并且假设前提是样本足够大。我曾经希望 R 能够拥有处理广义线性模型与β- 二项式的能力。恰好最近的一个包估计了这个模型: Ben Bolker 所写的β- 二项式。SPSS 都没有完成这个功能。
  • 与文档整合在一起发布。R 能够很好的与 LaTex 文档发布系统整合在一起,这意味着来自于 R 的统计输出和图形可以嵌入到可出版级的文档中。这并不是适合每一个人,除非你想写一本关于数据分析的书,或者你是不喜欢把你的结果拷贝到一个字符处理文档中,最短和最优雅的途径是通过 R 和 LaTex 来实现。
  • 没有花费。作为一个小企业的老板,我很喜欢 R 是免费的这一特点。甚至对于一个大企业,要知道你可以带一个有临时基础的人来,然后快速的让他们坐到工作站旁来使用领先的分析软件是一件很美妙的事情。没必要担心预算问题。

Catherine 进一步指出,R 是在 S-Plus 开发的附加模型的基础上对 S 的一种实现。有时候,同样的人也参与进对 R 的开发中。R 是在 GNU 许可证下的一个开源项目,在此基础上,R 通过不断的添加大量的包而持续增长。R 把那些能被当做同一组安装,并且可以被 R 在会话期访问的数据集合、R 函数、文档和动态加载项用 C 或者 Fortran 打包到一起。R 的包添加新的功能到 R,并通过这些软件包,研究人员可以很容易地分享他们的同龄人之间的计算方法。某些软件包是范围有限的,其他代表统计学的整个领域,含有其他一些包含了前沿的发展。事实上,许多统计学方面的开发包在变成商业软件之前最开始都是以 R 的包的形式出现的。

对于 InfoSphere Streams 和 R 语言的关系,Catherine 表示,InfoSphere Streams 的是一种先进的计算平台,允许用户开发的应用程序,以快速的采集、分析和关联信息,因为它会接收到数以千计的实时数据源,处理非常高的数据传输率:高达每秒数以百万计的事件或消息。它包括一个 R- 项目工具包。

InfoSphere Streams 是一个计算平台,集成了对数以千计的数据源高流速的数据进行分析的开发环境。这些数据流的内容通常是非结构化或半结构化的。分析的目标是检查对那些基于实时事件的数据和直接决策的模式变化。SPL 是 InfoSphere Streams 的编程语言的简写,它通过一个反映了数据的动态本质和快速分析和响应的必要范式来组织数据。

我们从经典统计分析的电子表格和通常的平面文件还是有很长的路要走的,但 R 都能适应。至于 3.1 版,SPL 应用程序可以将数据传递到 R,从而使用 R 的丰富的包库。InfoSphere Streams 支持通过创建相似的 R 对象来接收包含着 SPL 元组(SPL 中基本的数据结构)中的信息来支持 R 分析。InfoSphere Streams 的数据可以传递到 R 作进一步的分析并把结果传回给 SPL。

当然,R 语言不是完美无缺的,Catherine 也列举了 R 语言的缺点:

  • R 不是一个数据仓库。在 R 输入数据的最简单的方法是输入在别处,然后将其导入到 R。R 已作出努力来添加电子表格的前端,但还没有做到完美。对电子表格功能的缺乏不仅影响数据输入并且这对在 R 可视化的查看数据也很难,而这些事情,你在 SPSS 和 Excel 中都可以完成。
  • R 使得普通的任务在医疗研究中变得艰难。例如,当列出无应答和丢失的数据的发生的时候,你处理数据的第一步是对所有变量汇总统计。这在 SPSS 只需要点击几次鼠标,但 R 有没有内建的函数来计算这个相当明显的信息,并以表格形式显示出来。你可以很轻松地写一些东西出来,但有时你只是想用鼠标操作即可。
  • R 的学习曲线是艰难的。一个新手可以打开一个菜单驱动的统计平台,并在几分钟内得到结果。并不是每个人都想从一个程序员变成一个分析师,当然,也许不是每个人必须这样。
  • R 是开源的。R 社区非常大,成熟,并且活跃度也很高,毫无疑问,R 是其中较为成功的开源项目。正如我所展示的那样,R 的实现花了 20 年以上的时间,并且 S 语言比 R 时间更长。它是一个论证过了的概念和产品。但是,任何开放源码的产品,它的可靠性依赖于透明度。我们相信代码,因为我们可以检查代码,,并且别人也可以检查代码进而报告错误。这与那些采取它在自己的基准,并验证其软件的公司项目是不同的。而对于那些较少被使用的 R 包,你没有理由相信它们做出了正确的结果。 
语言 & 开发架构