StatsModels中使用R风格公式构建统计模型完全指南
引言
StatsModels作为Python中强大的统计分析库,从0.5.0版本开始引入了R风格的公式语法来构建统计模型。这一特性极大简化了模型构建过程,使Python用户能够享受到与R语言类似的建模体验。本文将全面介绍如何在StatsModels中使用公式语法构建各类统计模型。
公式语法基础
StatsModels的公式语法基于Patsy库实现,其核心语法结构为:
因变量 ~ 自变量1 + 自变量2 + ...
其中~
左侧为因变量(响应变量),右侧为自变量(解释变量)。这种语法简洁直观,特别适合统计建模场景。
环境准备
首先需要导入必要的库:
import statsmodels.api as sm
import statsmodels.formula.api as smf
import numpy as np
StatsModels提供了两种使用公式的方式:
- 直接从
formula.api
导入特定模型:
from statsmodels.formula.api import ols
- 通过
smf
命名空间访问:
smf.ols
线性回归示例
我们使用Guerry数据集演示公式语法的使用:
# 加载数据
dta = sm.datasets.get_rdataset("Guerry", "HistData")
df = dta.data[["Lottery", "Literacy", "Wealth", "Region"]].dropna()
# 构建模型
model = smf.ols(formula="Lottery ~ Literacy + Wealth + Region", data=df)
results = model.fit()
print(results.summary())
这个简单的公式表示用Literacy、Wealth和Region预测Lottery。
分类变量处理
当公式中包含文本变量时,Patsy会自动将其视为分类变量。例如上面的Region变量被自动处理为分类变量,并创建了虚拟变量。
也可以显式使用C()
函数指定分类变量:
model = smf.ols(formula="Lottery ~ Literacy + Wealth + C(Region)", data=df)
公式运算符详解
基本运算符
+
:添加变量-
:移除变量:
:交互项*
:交互项加主效应
移除截距项
model = smf.ols(formula="Lottery ~ Literacy + Wealth - 1", data=df)
交互作用
仅交互项:
model = smf.ols(formula="Lottery ~ Literacy:Wealth", data=df)
交互项加主效应:
model = smf.ols(formula="Lottery ~ Literacy*Wealth", data=df)
使用函数转换变量
公式中可以嵌入各种函数对变量进行转换:
内置函数
model = smf.ols(formula="Lottery ~ np.log(Literacy)", data=df)
自定义函数
def square(x):
return x**2
model = smf.ols(formula="Lottery ~ square(Literacy)", data=df)
高级应用
为不支持公式的模型创建设计矩阵
即使某些模型不支持公式语法,我们仍可以使用Patsy创建设计矩阵:
import patsy
formula = "Lottery ~ Literacy * Wealth"
y, X = patsy.dmatrices(formula, df)
# 使用设计矩阵拟合模型
model = sm.OLS(y, X)
results = model.fit()
返回不同类型的设计矩阵
返回numpy数组:
y, X = patsy.dmatrices(formula, df, return_type="matrix")
返回pandas DataFrame:
y, X = patsy.dmatrices(formula, df, return_type="dataframe")
最佳实践
- 处理缺失值:公式语法会自动处理缺失值,但最好先检查数据完整性
- 变量转换:考虑对非正态分布变量进行log等转换
- 模型诊断:拟合后务必检查残差等诊断图
- 分类编码:理解分类变量如何被编码为虚拟变量
总结
StatsModels的公式语法为Python中的统计建模提供了简洁直观的接口。通过本文介绍的各种运算符和技巧,用户可以灵活构建从简单到复杂的统计模型。公式语法不仅提高了代码可读性,也使得模型构建过程更加高效。
对于更高级的公式用法,如对比编码、样条函数等,建议进一步学习Patsy库的文档。掌握这些工具将极大提升你在Python中进行统计建模的效率和能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考