StatsModels中使用R风格公式构建统计模型完全指南

StatsModels中使用R风格公式构建统计模型完全指南

statsmodels Statsmodels: statistical modeling and econometrics in Python statsmodels 项目地址: https://gitcode.com/gh_mirrors/st/statsmodels

引言

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提供了两种使用公式的方式:

  1. 直接从formula.api导入特定模型:
from statsmodels.formula.api import ols
  1. 通过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")

最佳实践

  1. 处理缺失值:公式语法会自动处理缺失值,但最好先检查数据完整性
  2. 变量转换:考虑对非正态分布变量进行log等转换
  3. 模型诊断:拟合后务必检查残差等诊断图
  4. 分类编码:理解分类变量如何被编码为虚拟变量

总结

StatsModels的公式语法为Python中的统计建模提供了简洁直观的接口。通过本文介绍的各种运算符和技巧,用户可以灵活构建从简单到复杂的统计模型。公式语法不仅提高了代码可读性,也使得模型构建过程更加高效。

对于更高级的公式用法,如对比编码、样条函数等,建议进一步学习Patsy库的文档。掌握这些工具将极大提升你在Python中进行统计建模的效率和能力。

statsmodels Statsmodels: statistical modeling and econometrics in Python statsmodels 项目地址: https://gitcode.com/gh_mirrors/st/statsmodels

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵇习柱Annabelle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值