定义
statsmodels是一个用Python编写的统计分析模块,其目标是提供估计各类统计模型所需的类与函数,同时支持假设检验和数据探索[1]。每个估计器都附带大量结果统计量,供使用者查看与判断[1]。
该包被定位为对SciPy统计计算能力的补充,涵盖描述性统计以及统计模型的估计与推断,功能方向包括线性回归、广义线性模型、离散因变量回归、稳健线性模型和时间序列分析等。它以修改版BSD三条款开源许可证发布[1]。
在建模接口上,statsmodels既接受R风格的公式语法,也接受pandas的DataFrame对象,用户还可以直接传入NumPy数组构造模型[2]。
原理
statsmodels把统计模型拆分为模型类与结果类两层:模型类描述数据与设定的关系,调用拟合方法后返回结果对象,结果对象集中保存系数、标准误、检验统计量等信息[1]。例如普通最小二乘模型可写作 $y = X\beta + \varepsilon$,其中因变量向量 $y$ 由设计矩阵 $X$、回归系数 $\beta$ 和误差项 $\varepsilon$ 确定;statsmodels的OLS类在给定 $y$ 与 $X$ 后求解使残差平方和最小的 $\beta$ 估计[1]。
广义线性模型部分采用连接函数把因变量的期望值与线性预测子联系起来,支持单参数指数族分布,因此可以处理因变量不服从正态分布的情形。离散因变量回归则基于最大似然估计,提供Logit、Probit、多项Logit和泊松回归等形式。
时间序列分析部分包括单变量模型与向量自回归模型。自回归模型把序列当前值表示为自身滞后项的线性组合,ARIMA在此基础上加入差分与移动平均成分。
flowchart LR
A[数据与模型设定] --> B[模型类]
B --> C[拟合方法]
C --> D[结果对象]
D --> E[系数与标准误]
D --> F[检验统计量]
发展历程
statsmodels的源头可以追溯到SciPy的stats.models模块,该模块最初由Jonathan Taylor编写,在一段时间内属于SciPy的一部分,后来被移除[3]。2009年的谷歌夏日代码(Google Summer of Code)期间,这一代码被修正、测试和改进,并作为新包发布[3]。
此后开发团队持续为其增加新模型、绘图工具和统计方法,谷歌夏日代码项目在2009年至2017年间对statsmodels提供了支持[3]。2010年,Skipper Seabold和Josef Perktold在第9届Python科学计算会议上发表论文,介绍了statsmodels在计量经济学和统计建模方面的用法,该论文成为引用statsmodels时的推荐文献[1]。
从0.5.0版本起,statsmodels开始支持R风格公式与pandas数据框配合使用,这改变了此前的模型设定方式。2018年前后,其在线文档由SourceForge迁移至statsmodels.org自有站点。发行版本方面,0.14系列通过PyPI及Debian、Fedora等发行版渠道分发[4]。
应用
statsmodels常用于计量经济学与统计分析工作,其离散因变量模型、稳健线性模型和面板数据类方法适合处理经济与社会科学中的回归问题。向量自回归模型可用于分析多个时间序列之间的相互影响[3]。
在假设检验方面,statsmodels提供诊断检验、设定检验、拟合优度与正态性检验以及多重检验相关的函数。数据输入输出方面,它提供读取Stata的dta文件并转为NumPy数组的工具,并支持把表格结果输出为ASCII、LaTeX和HTML格式。
包内还附带示例和测试用的数据集,并可直接读取R语言数据集仓库中的数据集,方便复现示例与验证结果[2]。
局限
statsmodels官方文档指出,代码并不能保证没有缺陷或始终可用:部分辅助函数测试不够充分,某些边界情形可能未被正确考虑,而数值问题在许多统计模型中是固有存在的[3]。
在接口稳定性方面,官方说明尚未对API稳定性作出保证,不过除极少数特殊情况外会采用较长的弃用周期,以尽量减少使用者需要修改代码的情形[3]。较新模型的用户接口可能随使用经验积累和反馈而调整,相关变动会在发行说明中记录[3]。
包内的sandbox目录收录的是处于不同开发和测试阶段的代码,官方明确不将其视为可用于生产环境的就绪代码,其中涉及混合效应模型、GARCH模型、广义矩估计、核回归、广义可加模型等方法。
参见
参考资料
- statsmodels documentation [引用日期2026-10-14]
- Introduction¶ [引用日期2026-10-14]
- About statsmodels# [引用日期2026-10-14]
- statsmodels [引用日期2026-10-14]