社会科学研究中的Stata、R、Mplus与Python:统计软件的选择

英文原文:Stata, R, Mplus, and Python for Social Science Research: Choosing the Software(2026年10月28日发布)

学生们经常向我请教应当学习哪款统计软件,问题通常聚焦于Stata与R的抉择,最近则延伸为Python是否使其他软件不再必要。我个人的答案是:这四种工具我都使用,具体打开哪一款取决于所采用的研究方法。这与这些软件的历史发展脉络密切相关:特定方法的最前沿算法实现往往最先出现在特定软件中,这取决于最初开发该方法的学者群体。如果您刚接触量化研究方法,本网站上的社会工作研究量化方法初学者指南介绍了在选择软件之前应当掌握的先备知识。

按学科领域划分的工具生态

在基于语法的代码型软件中,用户实际能够运行的大部分功能都来自其使用者编写的扩展包。这在Stata中相对较弱(StataCorp官方编写并维护了绝大多数核心估计器),但在R和Python中则尤为明显(几乎每一种前沿方法都以学者贡献的开源包形式发布)。因此,一款软件中可用的功能包深刻依赖于哪一类研究群体在使用它,而选择软件的一个实用思路正是了解其背后的核心用户群。某些统计方法在多种软件中均有实现,而另一些方法则仅存在于单一软件之中。

Stata似乎是经济学家的主流工具,尤其在计量经济学与准实验设计领域。据一项针对相关档案的实证分析,在2005年至2019年间American Economic Association旗下期刊的复现代码文件中,约三分之二为Stata代码,而R代码仅占约3%。许多近年来提出的双重差分(DID)新估计器都是由提出该方法的计量经济学家直接以Stata命令形式发布的,例如Fernando Rios-Avila与Pedro Sant’Anna、Brantly Callaway合作开发的csdid,以及Clément de Chaisemartin、Xavier D’Haultfœuille及其同事开发的did_multiplegt_dyn。

R主要受数据科学家、量化心理学家及心理计量学者青睐。由Patrick Mair、Yves Rosseel(lavaan的作者)和Kathrin Gruber维护的CRAN Psychometrics task view汇集了240多个涵盖项目反应理论、因子分析、结构方程模型及相关模型的软件包。R在计量经济学方面同样实力雄厚;其Econometrics task view列出了Stata用户所安装的大多数同类双重差分估计器。

Mplus由Muthén & Muthén专为潜变量建模开发,其使用者主要是心理计量学者及专攻结构方程模型的研究人员。混合模型、贝叶斯结构方程模型以及动态结构方程模型均位列其功能清单之中。由Asparouhov and Muthén提出的三步法——用于在不改变潜类别划分的前提下将潜类别与预测变量及远端结果建立联系——已作为内置选项深度集成于Mplus中。

Python在很大程度上是程序员的通用语言。机器学习、深度学习及语言模型的研究主要在Python或R中进行,而其中的核心库(例如scikit-learn以及Hugging Face的transformers)均为原生Python库。

统计软件主要用户群体核心优势典型示例
经济学家与计量经济学者准实验设计、调查数据、差异分解csdid, did_multiplegt_dyn, oaxaca, fairlie, firthlogit, svy, margins
数据科学家与心理计量学者心理计量学、网络分析、元分析、空间数据lavaan, semTools, mirt, ergm, qgraph, bootnet, metafor, brms, sf
心理计量学者与结构方程模型方法学家潜变量模型与混合模型Three-step and BCH, Bayesian SEM, dynamic SEM, TYPE=COMPLEX
程序员与机器学习研究人员深度学习、自然语言处理(NLP)、大语言模型(LLM)、API调用scikit-learn, transformers, Anthropic, OpenAI, and Gemini SDKs, Google API client libraries

按研究目标划分的软件选择

  • 深度学习、NLP与LLM研究: Python 如果您希望借助Hugging Face开展基于Transformer架构的深度学习、NLP或LLM研究,就必须学习Python编程。Hugging Face的transformers与Hub client,以及各大主流语言模型API的官方SDK,均为Python库,其官方文档与代码示例也均使用Python编写。
  • 机器学习预测: Python R 随机森林、梯度提升以及交叉验证预测在Python的scikit-learn中已成为标准实现,且在R中同样获得良好支持。Stata能够运行其中一部分模型,但可选模型库与说明文档的丰富度在Python与R中要高得多。
  • 异质性处理效应与因果机器学习: R Python Stata R语言的grf用于拟合因果森林;在Python中,EconML用于估计条件平均处理效应,而DoubleML实现了双重机器学习(该工具同时提供R版本);Stata用户则可使用2024年在Stata Journal中发表的ddml。
  • 从平台与网络服务收集数据: Python 绝大多数平台API的官方客户端库(例如Google的client libraries for the YouTube Data API)均面向Python及其他通用编程语言开发,而非面向R或Stata。
  • 具有加权、分层与整群特征的调查数据: Stata R Stata的svy前缀能够将抽样权重、分层及整群信息直接应用于绝大多数估计器(包括逻辑回归、多层模型及计数模型),且后续完美支持margins命令。R语言的survey包是可靠的替代方案。Python在三者之中功能最为薄弱。
  • 多层线性模型与其他嵌套数据: Stata R Stata的mixed, melogit, and the other me commands以及xtgee涵盖了学校中的学生、机构中的案主以及个体内部的重复测量数据;R语言的lme4与glmmTMB则能够拟合同类模型系列。
  • 准实验设计与计量经济学: Stata R 在Stata中,用于多时点交错双重差分的csdid与did_multiplegt_dyn、用于平行趋势敏感性检验的honestdid、用于合成双重差分的sdid、用于高维固定效应的reghdfe,以及用于工具变量的ivreg2;在R中,有fixest与did包;Python则有用于面板数据与工具变量模型的linearmodels。其中若干方法在Stata与R中均有提供,而Stata中的honestdid则是直接移植自R语言包。
  • 群体间差距分解: Stata Ben Jann开发的用于Blinder-Oaxaca分解的oaxaca命令,以及用于二元结果变量的fairlie命令。
  • 回归表格与回归系数图: Stata Ben Jann开发的用于生成表格的estout(esttab)与用于绘制系数图的coefplot,以及Stata新版本内置的etable与collect命令。
  • 潜类别分析与潜剖面分析: Mplus Mplus首屈一指,尤其是当潜类别需要与预测变量或远端结果建立关联时,因为Asparouhov and Muthén阐述的三步法已内置集成。在其他软件中,Stata带有lclass()选项的gsem、R语言的poLCA以及同样实现三步法估计的Python包StepMix均可用于拟合潜类别模型。
  • 结构方程模型与测量学分析: Mplus R Mplus擅长处理多层、贝叶斯与动态结构方程模型,并提供适用于复杂调查数据的TYPE=COMPLEX选项(详见feature list);作为免费开源工具,R语言的lavaan与semTools支持测量等值性检验,而mirt则专用于项目反应理论。Stata的sem与gsem涵盖了诸多标准模型,而Python的semopy相较之下功能依然较为有限。
  • 网络分析: R statnet套件中的ergm用于统计网络模型;Sacha Epskamp开发的qgraph、bootnet与psychonetrics用于构建症状或题项间的网络结构。
  • 元分析: R Stata R语言中Wolfgang Viechtbauer开发的metafor;Stata的meta命令套件则涵盖了标准元分析功能。
  • 贝叶斯多层模型: R brms借助Stan底层引擎拟合贝叶斯回归模型,且拥有与常规回归极为接近的公式语法。
  • 匹配与加权方法: R Stata R语言中Noah Greifer开发的MatchIt、WeightIt与cobalt全面涵盖了样本匹配、平衡加权与平衡性诊断;Stata则提供了teffects以及用户编写的psmatch2。
  • 地图与空间数据: R Python R语言的sf配合tidycensus,或Python的geopandas。

Python在统计分析中的定位

Python在自身擅长的应用场景中表现卓越,但若将其作为社会科学的主力统计软件则是一个薄弱的选择。其统计库并非围绕计量经济学估计而设计,且对结构方程模型的支持仅停留在初级阶段。statsmodels涵盖了诸多标准模型,但专门用于调查数据分析的软件包samplics目前已在官方页面上明确声明“不再维护”。当缺少某种统计模型时,唯一的替代方案是从头到尾自行编写算法代码,而这与社会科学惯常的建模实践截然不同——后者依赖于具有完备文档、经过公开发表并经大量用户严格检验的成熟估计器。

API调用

在这一语境下,API主要分为两类。对于公共统计数据,三款软件均拥有出色的工具支持,Stata亦不例外。Stata通过内置的import fred直接读取联邦储备银行数据,并通过getcensus从Census Bureau API加载American Community Survey数据。在R中,Kyle Walker开发的tidycensus能够在返回相同数据的同时附带行政边界地理几何数据,便于直接绘制空间地图。

对于平台数据与AI模型,Python的优势则远远超越Stata和R。Google的client libraries for the YouTube Data API涵盖Python、Java、JavaScript、PHP等语言,却不包含R。面向Anthropic、OpenAI、Google Gemini以及Hugging Face Hub的官方客户端库均包含Python,且无一官方支持R。R语言用户可以通过Posit开发的软件包ellmer调用若干语言模型,而StataCorp也发布了Stata commands for calling ChatGPT, Claude, Gemini, and Grok(底层通过Python调用各API),但最前沿的代码示例与最新功能永远最先在Python中亮相。

软件默认设置

在两款不同软件中运行同一模型并不总能得出相同数值,其差异通常源于默认设置。在scikit-learn中,LogisticRegression documentation明确指出“默认施加正则化”,因此采用默认参数拟合的逻辑回归实际上是惩罚回归模型,其系数必然与Stata或R中未施加惩罚的Logit模型不一致。在statsmodels中,普通最小二乘法(OLS)默认不包含截距项,其OLS documentation直截了当地指出:“默认不包含截距项,须由用户显式添加”。

整群标准误是一个更为隐蔽的案例。R语言包fixest的standard errors vignette展示了按企业进行聚类的一项回归分析,并报告了同一回归系数的三种不同标准误:基于R原生lm配合sandwich包得出的0.0649、基于plm包得出的0.0569,以及来自Stata xtreg命令的0.0633(fixest成功复现了该数值)。该文档自身的结论是:小样本校正“对标准误具有不可忽视的影响”。fixest被专门设计用于精确对齐xtreg,这一事实充分说明Stata至今仍是计量经济学领域的核心基准参考点。

Dot plot of three clustered standard errors for one coefficient: 0.0649 from R lm with sandwich, 0.0633 from Stata xtreg and fixest, 0.0569 from R plm
同一回归系数的不同整群标准误,引自fixest standard errors vignette。

若审稿人在另一款软件中复现您的模型并得出了不同的标准误,双方在计算上可能都是正确的,但这便构成了可复现性问题。

代码语法与可复现性

诸如SPSS等基于菜单点击操作的软件,除非单独保存语法脚本,否则不会留下任何分析记录。而代码语法文件能够完整记录分析的每一个步骤,使其他学者(或一年后的研究者本人)能够重新运行并得出完全一致的结果。鉴于当前生成式AI编写了学生所使用的大量代码,这一点在当下尤为重要。大模型能够在数秒内起草一份do文件或R脚本,而确切掌握模型究竟估计了什么的唯一途径,便是亲自研读、运行并妥善保存那些代码。

我预期可复现性将成为评判学术分析质量的核心准则。经济学期刊目前已普遍要求作者提交包含数据与代码的完整replication package;随着AI生成的代码越来越普及,我预期社会工作与公共卫生领域的期刊也将迈向相同的发展方向。

编程技能与生成式AI

通过向AI模型描述需求并直接接受其生成代码的开发方式,如今有了一个正式名称。Andrej Karpathy在2025年2月将其命名为“vibe coding”,并描述了一种“我不再阅读代码差异”的实践,但他将其严格限定于一次性的周末练手项目;柯林斯词典将其评选为Word of the Year for 2025。学生们常有理由追问:亲自学习编写代码是否依然具有意义?我的回答是肯定的,对于博士生而言尤为如此。

关于生产力提升的实证结论褒贬不一。在2022年一项针对GitHub Copilot的实验中,程序员完成一项界定明确的任务的速度提升了55.8%;而在METR于2025年开展的随机对照试验中,经验丰富的开源开发者在使用AI工具时耗时反而增加了19%,尽管他们在事后自我评估中认为工具使自己提速了约20%。相比之下,关于学习效果的证据则高度一致。在Anthropic开展的一项随机对照研究中,借助AI助手学习全新Python库的工程师在课后测试中的得分仅为50%,而亲自手写代码的对照组得分达67%,两者差距最大的模块正是排错调试——即甄别AI生成代码差错所需的核心技能。一项针对中学生的现场实真实验在数学学科中发现了相同的规律:不受限制使用GPT-4的学生在日常练习中表现更佳,但在脱离AI的闭卷考试中成绩却下滑了17%。

对于博士生而言,得出统计结果仅仅是科研目标的一部分,因为掌握全过程本身就是学术训练的核心所在。这不仅涵盖基础语法,还包括深入理解当模型设定发生变化时其背后的理论假设如何随之改变。语言模型会对提示词未予明确说明的一切细节自行做出预设选择。一项关于提示词规格不全的分析发现,模型通常会默认推断未说明的要求,但这种推断行为在不同模型和提示词之间“极其脆弱不稳定”。在数据分析领域,Bertran and colleagues向多个AI分析系统提供了相同的数据集与研究假设,结果发现其在“效应量、p值及研究结论上存在巨大离散度”,其根源正是在于数据预处理、模型设定与统计推断等环节中的不同自主选择。一项针对Claude Code与Codex在社会政策议题上的研究发现,其参数估计值虽与人类多分析者基准相近,但带有证实偏向的诱导性提示词使Claude Code的支持性裁决比例从10%剧增至90%。一名不具备代码审读能力的研究者,根本无从察觉模型究竟做出了何种底层选择。

成长为一名合格的学者,意味着对自己的研究结论负全责并能够做出严谨阐释。COPE关于作者署名权与AI工具的官方立场明确指出,在数据收集与分析中使用AI的作者必须对此进行如实披露,并对“手稿的内容负全责,即便对于由AI工具生成的部分亦是如此”。如果您无法透彻阐释一项分析,说明您并未真正掌握它,而这将深刻动摇您对自己研究的学术底气。在Fernandes and colleagues的两项研究中,借助AI解决推理问题的被试显著高估了自身表现;在一项网络安全研究中,使用AI助手的参与者编写的代码安全性更低,却更确信自己的代码牢不可破;一项针对知识工作者的调查发现,对生成式AI盲目信任往往伴随着批判性思维的弱化,而健康的学术自信则伴随着更强的批判审视。若连受过专业训练的科研人员都无法亲自编写代码,未来又有谁能够对AI生成的代码做出专业评估?

学习Stata的现实价值

在R或Python中运行统计分析已变得异常简便(尤其在AI辅助下),这似乎让Stata显得不再必要,但我依然认为学习Stata大有裨益。对于社会科学常见的数据分析、计量经济学及高级统计方法,Stata在跨版本一致性、估计器的详尽文档支持,以及由方法学家本人亲自编写的大量扩展包和高级选项方面均表现出色。据Stata manual说明,在do文件首行指定version参数,“可确保您的do文件或程序在Stata未来的所有后续版本中均能稳定无误地继续运行”。

软件费用

统计软件学生优惠价格(2026年10月)信息来源
Stata/BE每年94美元,或买断版298美元Stata student pricing
Stata/SE每年179美元,或买断版485美元同上
Mplus 9.1.1基础版195美元,含组合扩展包350美元Mplus student pricing
R, Python免费开源

许多大学为在校生购买了Stata的正版授权。在密歇根大学,学生可以通过所在学院IT部门,在大学管理的计算机设备上免费获取并使用Stata。Mplus提供了免费的试用演示版,限制了变量数量,足以在购买前先行运行体验示例。

  • October 28, 2026