R和SPSS的区别

36

我将很快分析大量与网络流量相关的数据,并对其进行预处理以便进行分析。我发现R和SPSS是最受欢迎的统计分析工具之一。我还将生成大量图形和图表。因此,我想知道这两个软件之间的基本差异。

我不是在问哪个更好,而只是想知道它们的工作流程方面的差异(除了SPSS有GUI之外)。无论哪种情况下,我都会主要使用脚本进行工作,所以我想了解其他的区别。

12个回答

35

以下是我以前在R-help邮件列表中发布的内容,但我认为它很好地概述了R和SPSS之间的一般区别:

 

谈到计算机软件的用户友好性时,我喜欢使用汽车与公交车的比喻:

 

公交车很容易使用,您只需要知道要搭哪辆车,在哪个站上车,在哪个站下车(还需要支付车费)。另一方面,汽车需要更多的工作,您需要有某种类型的地图或路线(即使地图在您的脑海中),您需要不时加油,您需要了解道路规则(需要一种驾照类型)。汽车的巨大优势是它可以带您去公交车无法到达的许多地方,并且对于某些需要在公交车之间转移的旅行来说速度更快。

 

使用这个比喻,像SPSS这样的程序就像公交车,对于标准事物很容易使用,但如果您想做一些未经预编程的事情,则会非常令人沮丧。

 

R是一款四轮驱动SUV(尽管环保),后面装有自行车,顶部装有皮艇,乘客座位上放着好的步行和跑步鞋,后部装有登山和洞穴探险装备。

 

如果您花时间学习如何使用设备,R可以带您去任何想去的地方,但这需要比学习SPSS公交车站更长的时间。

虽然有适用于R的图形用户界面(GUI),但它也限制了易于使用的功能。 SPSS确实有脚本编写功能,使其不再仅仅是一辆公交车,但SPSS的一般哲学导向人们使用GUI而不是脚本。


1
这是我读过的最棒的类比。从现在开始,我将在许多不同的编程环境中使用它。谢谢你。 - Jefferey Cave

34
我在一家公司工作,我们使用SPSS进行大部分数据分析,出于各种原因,我开始尝试更多地使用R进行自己的分析。我遇到的最大差异之一包括:
  1. 表格输出 - SPSS具有基本表格、通用表格、自定义表格等,所有这些都会输出到那个漂亮的数据查看器或其他他们称之为的东西中。这些可以相对容易地传输到Word文档或Excel表格中进行进一步分析/展示。在R中相当的功能需要学习LaTex或使用odfWeave或Lyx之类的工具。
  2. 数据标记--> SPSS对变量标签和值标签处理得很好。我还没有找到R能够完成同样任务的强大解决方案。
  3. 你提到你将编写大部分脚本,我个人发现SPSS的脚本语法非常可怕,以至于我尽可能地停止使用SPSS。R语法似乎更加合乎逻辑,并遵循编程标准,而且有一个非常活跃的社区可供依赖,如果你遇到麻烦(例如Stack Overflow)。我还没有找到一个好的SPSS社区来解答问题。
其他人指出了两个程序在成本和功能方面的一些重大差异。如果你需要与其他人协作,他们对SPSS或R的熟悉程度应该是一个因素,因为你不希望成为你的团队中唯一能够使用或编辑你编写的脚本的人。
如果你要学习R,Stats Exchange网站上的这篇文章有很多关于学习R的优秀资源:https://stats.stackexchange.com/questions/138/resources-for-learning-r

1
  1. 对于小表格,我通常直接将R的屏幕输出复制粘贴到Excel中,然后调用“文本分列”,或者你可以在表格上使用write.csv(或csv2)。 (或者也许你是指某种自动报告?)。
  2. Hmisc包具有变量标签,但值标签适用于因子。如果您要导入SPSS(或Stata)数据集,则可以在foreign包中很好地完成此操作,生成的R数据会保留原始标签信息。
- eyjo
2
是的,我们公司的一些团队安排了定期运行R脚本,从SQL数据库中提取数据,进行处理,生成Sweave PDF文件,并将结果发送给相关人员。在某些架构上,R和某些数据库存在一些问题,但SPSS单独无法达到这种自动化程度! - Harlan
2
@Chase:我不明白为什么这不能只使用R来完成。我为一些公司开发了一些定制工具,完全可以做到同样的事情:从SPSS获取数据或自动从MySQL获取数据,并将标签/变量名(来自另一个MySQL表或在线HTML调查正文)应用于列,生成所需格式的表格并将其导出为odt文件,可以在任何MsWord(2007+)或OOWriter中打开。输出可以轻松进行主题设置(标题、颜色、图片、字体、表格边距等)。这可能是一项很大的工作(尤其是带有图形用户界面),但从长远来看可能是值得的。 - daroczig
1
@Chase:odfWeave包有非常完善的文档,可以在包的源代码(odfWeave/inst/examples)中查找formatting.odt及其输出。此外:相比Sweave,odfWeave可能是更好的选择,因为客户通常希望获得可编辑的报告版本。如果你在概述/实现中遇到问题,请告诉我。 - daroczig
值得一提的是,现在已经过去了4年,使用Rstudio中的一个按钮即可轻松将内容导出到MS Word。具体请参考http://blog.rstudio.org/2014/06/18/r-markdown-v2/和http://rmarkdown.rstudio.com/。 - Rasmus Larsen
显示剩余3条评论

23

SPSS的初始工作流程需要付出昂贵的代价,而R是免费提供的。

R只有一种“脚本”语言,但不要认为它就是那样,实际上R是一种编程语言,具有出色的数据操作、统计和图形功能。SPSS具有“语法”、“脚本”,并且还可以使用Python进行脚本编写。

另一个重要因素是,SPSS将其数据压缩成电子表格结构。处理其他数据结构可能非常困难,但R天生适应这些处理。我不知道如何开始处理网络图形类型的数据,但是R中有一个包可以做到。

R还可以通过使用Sweave将工作流程与报告集成 - 您可以编写嵌入了R代码块的文档以生成绘图或表格,将文件运行经过系统后,报告将以PDF形式呈现。当你想要做每周报告或完成一项工作后,老板给你更新的数据集时,使用Sweave就很好。重新运行、检查,然后完成。

但是最终选择由您决定...


2
有一个名为PSPP的免费开源SPSS风格软件包...当然,我想它也会受到你所有其他评论的影响。 - naught101
2
PSPP的功能相当基本。 - ABCD

8
如果你是一位优秀的程序员,学习R语言是值得的。在数据操作和统计建模方面,与SPSS相比,你可以做更多的事情,并且你的图表可能会更好。另一方面,如果你之前从未真正学过编程,或者认为花费几个月时间成为程序员有些令人生畏,那么你可能会从SPSS中获得更多价值。不用深入研究R语言作为一种完整的编程语言所能实现的水平,可能无法证明努力的价值。
还有一个选择-合作。你是否认识一位熟悉R语言的人,可以与你共同完成项目(无论是学术界还是工业界)?

1
我不知道那个,我没有任何编程经验就从SPSS转到了R,虽然花了一些时间,但现在我的生产力提高了几个数量级。仅仅Sweave就为我节省了至少两个月的论文格式化时间。 - richiemorrisroe

6

4

我在一家公司中与数据科学家一起工作,可以这样说:

  • 如果你有不同类型的大型团队(不只是数据科学家),SPSS是有用的,因为它相对容易理解。例如,如果用户要运行模型来获得输出结果(销售预测等),SPSS是明确而易于使用的。

话虽如此,我认为R在几乎所有其他方面都更好:

  • R更快(尽管有时还有争议)
  • 正如之前所述,SPSS的语法非常糟糕(我再强调一次)。另一方面,学习R可能会很痛苦,但网络上有大量资源,最终会因为您可以完成不同的任务而得到更好的回报。
  • 和其他人一样,用R是不受限制的,有大量的包、资源以及更重要的是:做自己想做的事。在我们的组织中,我们有一些非常高级的函数能够完成很多工作。难点在于创建它们一次,但随后它们可以执行SPSS无法完成的复杂任务,特别是在循环方面。

人们经常忽视的是,R还有许多协作功能(RStudio中的github集成和使用devtools进行简单的包构建)。

实际上,如果您的组织中的每个人都知道R,那么您只需要在github上维护一个基本包就可以共享所有内容。当然这不是常态,这就是为什么我认为尽管SPSS是个更差的产品,但依然有市场需求。


3

我没有数据来证明,但根据我的经验,我可以告诉你一件事情:

SPSS比R慢得多。(当然,这里的“慢得多”是非常之多)

这种差距的大小可能与C++和R之间的差距一样大。

例如,在R中,我从来没有等待超过几秒钟。而使用SPSS和类似的数据,则需要等待超过10分钟的计算时间。

另外说一句不相关的事情:在我看来,在关于R速度的最近讨论中,人们有点忽略了这一点(即与SPSS的比较)。此外,我很惊讶这个讨论曾经出现过一段时间,然后就悄无声息地消失了。


你有这方面的数据吗?我很想比较一下,因为我发现在相同的处理过程中,SPSS比R更快。 - richiemorrisroe
我发现在标准程序方面,SPSS比R快很多(非常多)。例如,在R和SPSS中尝试混合效应建模。 - KarthikS

2
上面有一些很好的回答,但我会尝试提供我的意见。我们部门完全依赖SPSS进行工作,但在最近几个月中,我一直在努力学习R;部分原因是出于上述原因(速度、庞大的数据结构、可用的包等)。
话虽如此,以下是我学习过程中掌握的一些要点:
1. 除非您有一些编程经验,否则我认为在CTABLES中创建摘要表会破坏R中任何可用选项。迄今为止,我不知道有哪个软件包可以复制使用自定义表格所能创建的内容。
2. 在脚本化方面,SPSS似乎比较慢,而且SPSS语法很糟糕。话虽如此,我发现在SPSS中脚本总是可以通过谨慎使用EXECUTE命令来改进。
3. SPSS和R可以相互接口,尽管看起来是单向的(仅在SPSS内部使用R时,而不是反过来)。话虽如此,我发现这对我没有太大用处,除非我想使用ggplot2或其他高级数据管理技术。(我讨厌SPSS宏)。
4. 我一直觉得在SPSS中创建的“报告”工作远远不如其他解决方案。如上所述,如果您可以利用LaTex和Sweave,您将对您的高效工作流程非常满意。
5. 我通过在SPSS中利用OMS进行了一些高级分析。几乎所有内容都可以路由到新数据集,但我发现大多数SPSS用户不使用此功能。此外,在查看R中的示例时,使用OMS感觉比较“容易”。
总之,当我无法快速在R中找到解决方案时,我会使用SPSS,但我真诚地打算在不久的将来完全放弃SPSS并使用R。

看起来我们学习 R 的原因很多相似之处,我很想听听你们关于 SPSS --> R 转换的想法。我还注意到你们在波士顿附近,我离汉诺威只有几个小时的路程。你们是否参加过新英格兰 R 用户组的活动?好像他们在波士顿开会… - Chase
我一直在工作中感到疲惫不堪,但一直渴望前往。我刚开始接触R,并试图确定我和团队可以利用这个工具的方法。我的行业广泛使用SPSS,但随着我对不同工具/方法的了解增加,我看到有必要探索其他机会,即使只是为了有效地处理临时数据请求。欢迎联系我,了解我的转型想法和经验。 - Btibert3

2

SPSS提供GUI界面,方便地集成现有的R程序或开发新程序。更多信息,请参见IBM Developer Works上的SPSS社区


1

@Henrik,我在SPSS上完成了你提到的相同任务(C++和R),结果发现SPSS在这方面比R更快。在我的情况下,SPSS大约快了7倍。我对此感到惊讶。

这是我在SPSS中使用的代码。

data list free
 /x (f8.3).
begin data
1
end data.

comp n = 1e6.

comp t1 = $time.

loop #rep = 1 to 10.
comp x = 1.
loop #i=1 to n.
comp x = 1/(1+x).
end loop.
end loop.

comp t2 = $time.

comp elipsed = t2 - t1.

form elipsed (f8.2).

exe.

2
如果你想进行比较,那么你应该比较有意义的事情。"基准测试"并不是解决问题的好方法。在R中,for循环可以避免使用,并且也应该避免使用。对于大多数任务,我的经验与Henriks类似。此外,从统计学的角度来看,SAS和R都表现更好。你曾经尝试在SPSS中进行单侧T检验吗? - Joris Meys
1
@Joris,我完全同意你的观点。我只是好奇想在SPSS上尝试相同的测试。 - djhurio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接