数据分析必须学习R语言的四个理由。
r是一种灵活的编程语言,旨在促进探索性数据分析、经典统计测试和高级图形。r拥有丰富且不断扩展的数据包库,处于统计学、数据分析和数据挖掘的前沿。r在不断发展的大数据领域已经被证明是一个有用的工具,并且已经被集成到几个商业软件包中,比如IBM SPSS?InfoSphere呢?,和Mathematica。
本文提供了统计学家凯瑟琳·达尔泽尔对r值的看法。
为什么选择r?
r可以进行统计。你可以认为它是SAS Analytics等分析系统的竞争对手,更不用说StatSoft STATISTICA或Minitab等更简单的软件包了。很多政府、企业、医药行业的专业统计学家、方法论者,把整个职业生涯都献给了IBM SPSS或者SAS,却从来没有写过一行R代码。所以在某种程度上,学习和使用R的决定与企业文化和你想如何工作有关。我在统计咨询实践中使用了各种工具,但我的大部分工作都是在R中完成的。下面的例子说明了我为什么使用R:
r是一种强大的脚本语言。我最近被要求分析一项系列研究的结果。研究人员检查了65,438+0,600篇研究论文,并根据多个条件对其内容进行了编码。实际上,这些条件是大量的具有多个选项和分叉的条件。他们的数据(曾经扁平化到一个微软?Excel?电子表格包含8000多列,其中大部分是空的。研究人员希望统计不同类别和标题下的总数。r是一种强大的脚本语言,可以访问类似Perl的正则表达式来处理文本。杂乱的数据需要一个编程语言资源,虽然SAS和SPSS提供了脚本语言来执行下拉菜单意想不到的任务,但是R是作为编程语言编写的,所以它是更适合这个目的的工具。
r走在了时代的前沿。统计学的许多新发展首先以R-package的形式出现,然后被引入商业平台。我最近从一项关于病人记忆的医学研究中获得了数据。对于每个患者,我们都有医生建议的治疗项目数和患者实际记住的项目数。自然模型是贝塔二项分布。这一点自20世纪50年代就已为人所知,但将这一模型与感兴趣的变量联系起来的估计过程只是最近才出现。像这样的数据通常由通用估计方程(GEE)来处理,但是GEE方法是渐进的,并且假设采样范围很宽。我想要一个带β-二项式R的广义线性模型。一个最新的R包估计这个模型:Ben Bolker写的betabinom。而SPSS没有。
集成文档发布。R完美地集成了LaTeX文档发布系统,这意味着来自R的统计输出和图形可以嵌入到发布的文档中。这并不适合所有人,但是如果你想携带关于数据分析的异步书籍,或者只是不想将结果复制到文字处理文档中,那么最短最优雅的路径就是通过R和LaTeX。
没有成本。作为一个小企业的老板,我喜欢r的免费专用性,即使对于更大的企业来说,知道你可以临时调动某人,并立即让他们坐在工作站上使用一流的分析软件,这很好。不要担心预算。
R是什么,有什么用?
作为一种编程语言,R类似于许多其他语言。任何写过代码的人都会在R中发现很多熟悉的东西,R的特殊性在于它所支持的统计哲学。
统计革命与探索性数据分析
140字符释义:R是S的开源实现,是数据分析和图形的编程环境。
计算机总是擅长计算——在你编写并调试一个程序来执行你想要的算法之后。但在20世纪60年代和70年代,计算机不擅长显示信息,尤其是图形。这些技术局限于统计理论结合的趋势意味着统计实践和统计人员培训侧重于模型构建和假设检验。一个假设的世界是,研究人员做出假设(通常是农业方面的),进行精心设计的实验(在农业站),填写模型,然后进行测试。基于电子表格、菜单驱动的程序(如SPSS反映了这种方法)。事实上,SPSS和SAS Analytics的第一个版本包含一些子程序,可以从(Fortran或其他)程序中调用这些子程序来填充和测试模型工具箱中的模型。
在这个标准化和渗透理论的框架中,约翰·图基(John Tukey)提出了探索性数据分析(EDA)的概念,这就像一颗鹅卵石击中了玻璃屋顶。如今,很难想象在分析数据集时不使用箱线图来检查偏斜度和异常值,或者不使用分位数图来检查线性模型残差的正态性。这些观点是图基提出的,现在任何统计学入门课程都会引入。但情况并非总是如此。
EDA与其说是一种理论,不如说是一种方法。这种方法离不开以下经验法则:
只要有可能,应该使用图形来标识感兴趣的功能。
分析是增量的。尝试以下模式;根据结果填充另一个模型。
使用图形检查模型假设。标签有一个异常值。
使用合理的方法来防止违反分布假设。
Tukey的方法引发了新一波的图形方法和稳健估计。它也激发了更适合探索性方法的新软件框架的开发。
s语言是由贝尔实验室的约翰·钱伯斯和他的同事开发的,并被用作统计分析平台,尤其是Tukey排序。第一个版本(供贝尔实验室内部使用)是在1976年开发的,但直到1988年才形成了与现在形式相似的版本。此时,贝尔实验室以外的用户也可以使用该语言。语言的每个方面都符合数据分析的“新模型”:
s是一种在编程环境中运行的解释性语言。S的语法和C很像,只是省略了难的部分。例如,s负责内存管理和变量声明,这样用户就不必编写或调试这些方面。较低的编程开销允许用户在同一数据集上快速执行大量分析。
从一开始,S就考虑了高级图形的创建,你可以在任何打开的图形窗口中添加功能。您可以轻松地高亮显示感兴趣的点,查询它们的值,使散点图更加平滑,等等。
面向对象是在1992中加入S的。在编程语言中,对象构造数据和函数来满足用户的直觉。人类的思维永远是面向对象的,尤其是统计推理。统计学家处理频率表、时间序列、矩阵、各种数据类型的电子表格、模型等等。在每种情况下,原始数据都有属性和期望值:例如,时间序列包含观察值和时间点。此外,对于每种数据类型,应获得标准的统计数据和计划。对于时间序列,我可能会画一个时间序列计划和一个相关的图表;对于拟合模型,我可能会绘制拟合值和残差。支持为所有这些概念创建对象,您可以根据需要创建更多的对象类。对象使得概念化问题和实现它的代码变得非常简单。
有态度的语言:S,S-Plus和假设检验
原来的S语言对Tukey的EDA非常重视,已经到了只能在S中执行EDA而不能执行其他操作的地步。这是一种有态度的语言。例如,虽然S带来了一些有用的内部函数,但它缺少一些您希望统计软件拥有的最明显的功能。没有执行双重抽样检验或任何真正假设检验的功能。但是Tukey认为假设检验有时候是恰到好处的。
1988,西雅图的统计科学被S授权,语言的一个增强版本(叫做S-Plus)被移植到DOS和后来的Windows?中等。在真正意识到客户想要什么之后,统计科学为S-Plus添加了经典的统计功能。添加执行方差分析(ANOVA)、测试和其他模型的能力。对于S的面向对象特性,任何这样的拟合模型的结果本身就是一个S对象。适当的函数调用将提供假设检验的拟合值、残差和p值。模型对象甚至可以包含分析的中间计算步骤,例如设计矩阵的QR分解(其中Q是对角线,R是右上角)。
有一个R包可以完成这个任务!还有一个开源社区。
大约在S-Plus发布的同时,新西兰奥克兰大学的Ross Ihaka和Robert Gentleman决定尝试编写一个解释器。他们选择S语言作为他们的模型。这个项目逐渐成形并获得支持。他们把它命名为r。
r是S的实现,包含了更多S-Plus开发的模型。有时候,同样的人在扮演角色。r是GNU许可的开源项目。在这个基础上,R继续发展,主要靠加包。R包是数据集、R函数、文档和C或Fortran动态插件的集合,它们可以一起安装并从R会话中访问。r包为r增加了新的功能,通过这些包,研究人员可以在同行中轻松享受计算方法。有些软件包范围有限,有些则代表整个统计领域,还有一些包含最新的技术发展。事实上,统计学的很多发展最初都是以R包的形式出现的,后来才被应用到商业软件中。
在撰写本文时,R下载网站CRAN上有4701个R包。其中,仅在那一天就增加了六个r。一切都有对应的R包,至少看起来是这样。
当我使用R时会发生什么?
备注:本文不是R课程。下面的例子只是试图给你一个R会话的概念。
r二进制可以用于Windows,Mac OS X和多个Linux?分销。源代码也可以由人自己编译。
在Windows上?,安装程序将r添加到开始菜单。要在Linux中启动R,请打开一个终端窗口并在提示符下键入R。您应该会看到类似于图1的屏幕。
图1。r工作空间
在提示符下键入一个命令,r就会响应。
此时,在真实的环境中,您可以将数据从外部数据文件读入R对象。r可以从各种格式的文件中读取数据,但是对于这个例子,我使用的是MASS包中的michelson数据。这个包附带了带有维纳布尔斯和里普利的S-Plus的标志性文本现代应用统计学(参见参考资料)。迈克尔逊包含了流行的迈克尔逊和莫利实验测量光速的结果。
清单1中提供的命令可以加载MASS包,并获取和查看迈克尔逊数据。图2显示了这些命令和来自r的响应。每一行都包含一个r函数,它的参数用方括号([])括起来。
清单1。开始休息时段
2+2 # R可以是计算器。r的正确答案是4。
library("MASS") #将函数和数据集从
#包质量,伴随着现代应用统计学在S
data(michelson) #将michelson数据集复制到工作区。
ls() #列出工作区的内容。迈克尔逊数据在那里。
head(michelson) #显示该数据集的前几行。
#列速度包含迈克尔逊和莫利的估计
#光速减去299,000,单位为千米/秒。
#迈克尔逊和莫利进行了五次实验,每次20次。
#数据集包含实验和运行的指标变量。
help(michelson) #调用帮助屏幕,描述数据集。
图二。会话发起和R的响应
现在让我们看看数据(见清单2)。输出如图3所示。
清单2中的方框图。稀有
#基本箱线图
with(michelson,boxplot(Speed ~ Expt))
#我可以添加颜色和标签。我还可以将结果保存到对象中。
迈克尔逊. bp = with(迈克尔逊,boxplot(Speed ~ Expt,xlab="Experiment ",las=1,
ylab= "光速-299,000米/秒",
main= "迈克尔逊-莫利实验",
col="slateblue1 ")
#在这个尺度上,目前对光速的估计是734.5
#添加一条水平线以突出显示该值。
abline(h=734.5,lwd=2,col = " purple ")#添加现代光速
迈克尔逊和莫利似乎系统地高估了光速。这些实验似乎有些不一致。
图3。画一个方框图。
在我对分析感到满意之后,我可以将所有命令保存到一个R函数中。请参见清单3。
清单3中的一个简单函数。稀有
MyExample = function(){
图书馆(大众)
数据(迈克尔逊)
迈克尔逊. bw = with(迈克尔逊,boxplot(Speed ~ Expt,xlab="Experiment ",las=1,
ylab= "光速-299000米/秒",main= "迈克尔逊-莫雷实验",
col="slateblue1 ")
abline(h=734.5,lwd=2,col="purple ")
}
这个简单的例子演示了R的几个重要功能:
保存结果—boxplot()函数返回一些有用的统计数据和图表。可以通过像michelson.bp = …这样的否定语句将这些结果保存到R对象中,在需要的时候提取出来。任何赋值语句的结果都可以在R session的整个过程中获得,并且可以成为进一步分析的对象。boxplot函数返回统计数据矩阵(中位数、四分位数等)。)用于绘制箱线图、每个箱线图中的项目数以及异常值(在图3的图表中显示为空心圆)。请参考图4。
图4。箱线图函数的统计数据
公式语言——R(和S)有一种简洁的语言来表达统计模型。参数中的代码Speed ~ Expt告诉函数在每个Expt(实验数)级别绘制速度的箱线图。如果要进行方差分析来检验每个实验中速度是否存在显著差异,可以使用同一个公式:lm(Speed ~ Expt)。公式语言可以表达多种统计模型,包括交叉和嵌套效应,以及固定和随机因素。
用户定义的r函数——这是一种编程语言。
r已经进入21世纪。
Tukey的探索性数据分析方法已经成为一门常规课程。我们在教授这种方法,统计学家也在使用它。r支持这种方法,这解释了为什么它仍然如此受欢迎。面向对象还有助于R保持最新,因为新的数据源需要新的数据结构来执行分析。信息圈?Streams现在支持与约翰·钱伯斯设想的不同的数据R分析。
r和InfoSphere流
InfoSphere Streams是一个计算平台和集成开发环境,用于分析从数千个来源获得的高速数据。这些数据流的内容通常是非结构化或半结构化的。分析的目的是检测数据中不断变化的模式,并根据快速变化的事件指导决策制定。SPL(用于InfoSphere Streams的编程语言)通过一个例子来组织数据,这个例子反映了数据的动态特性以及对快速分析和响应的需求。
我们远离了用于经典统计分析的电子表格和常规平面文件,但R可以很好地处理它。从版本3.1开始,SPL应用程序可以将数据传输到R,从而利用R庞大的包库。InfoSphere Streams通过创建适当的R对象来接收包含在SPL元组(SPL的基本数据结构)中的信息,从而支持R。因此,可以将InfoSphere Streams数据传递给R进行进一步分析,并将结果发送回SPL。
r需要主流硬件吗?
我在运行Crunchbang Linux的宏碁上网本上运行了这个例子。r不需要重型机器来执行中小型分析。20年来,人们一直认为R速度慢是因为它是一种解释性语言,它所能分析的数据大小受到计算机内存的限制。这是真的,但它通常与现代机器无关,除非应用程序非常大(大数据)。
r的缺点
平心而论,有些事R做不好或者根本不会做。不是每个用户都适合使用r:
r不是数据仓库。在R中输入数据最简单的方法是在其他地方输入数据,然后导入到R中。人们试图为R添加一个电子表格前端,但他们还没有流行起来。缺少电子表格功能,不仅会影响数据输入,还会使R中的数据很难像在SPSS或Excel中那样直观的查看。
r让普通的任务变得困难。比如医学研究,你对数据做的第一件事就是计算所有变量的一般统计量,列出没有反应的地方和缺失的数据。这在SPSS中只需要三次点击就可以完成,但是R没有内置函数来计算这些非常明显的信息,并以表格的形式显示出来。你可以非常轻松地编写一些代码,但有时你只想指向要计算的信息,然后单击鼠标。
R的学习曲线非同一般。新手可以打开一个菜单驱动的统计平台,几分钟就能得到结果。不是每个人都想成为程序员,然后成为分析师,也许不是每个人都需要这样做。
r是开源的。R社区庞大、成熟、活跃,R无疑是一个比较成功的开源项目。如前所述,R已经实现了20多年,S语言存在的时间更长。这是一个久经考验的概念,也是一个久经考验的产品。但对于任何开源产品来说,可靠性都离不开透明性。我们信任它的代码,因为我们可以自己检查它,其他人可以检查它并报告错误。这与企业项目不同,企业项目自己执行基准测试并验证他们的软件。对于不经常使用的R包,您没有理由假设它们实际上会产生正确的结果。
结束语
我需要学习R吗?也许不是;需要是一个带有强烈感情的词。但是R是有价值的数据分析工具吗?当然是了。这种语言旨在反映统计学家的思维和工作方式。r巩固好习惯,合理分析。对我来说,它是一个适合我工作的工具。