使用 statsmodels 进行专业的统计建模与计量经济分析
解决机器学习库(如 scikit-learn)缺乏统计推断能力的痛点,通过 statsmodels 实现包含 P 值、置信区间和详细诊断报告的严谨统计分析。
为什么需要这个技能
在很多研究场景中,仅仅知道模型的预测准确率是不够的,我们需要回答“这个变量是否显著?”、“影响程度是多少?”以及“模型假设是否成立?”。
scikit-learn 专注于预测(Prediction),而 statsmodels 专注于推断(Inference)。它提供了强大的统计工具,能够生成类似于 R 语言的详细分析总结表,涵盖 OLS 回归、广义线性模型(GLM)、时间序列分析(ARIMA/SARIMAX)以及各种严谨的统计检验(如异方差检验、平稳性检验),是进行学术研究和金融计量的核心工具。
适用场景
- 回归分析:拟合线性回归(OLS)、逻辑回归(Logit)或分位数回归。
- 时间序列预测:处理具有趋势性和季节性的数据,构建 ARIMA 或 VAR 模型。
- 因果推断:分析变量间的统计显著性,估计因果效应。
- 模型诊断:检测残差的正态性、自相关性或异方差性。
- 计数数据分析:处理非正态分布的计数数据(如 Poisson 或负二项回归)。
核心工作流
1. 线性回归 (OLS) 基础流
在 statsmodels 中,截距项(Constant)不会默认添加,必须手动处理。
import statsmodels.api as sm
import numpy as np
# 准备数据 - 必须手动添加常数项以计算截距
X = sm.add_constant(X_data)
# 拟合 OLS 模型
model = sm.OLS(y, X)
results = model.fit()
# 输出包含 P 值、R-squared 等所有关键信息的汇总表
print(results.summary())
2. 快速模型指定 (Formula API)
如果你习惯 R 语言的表达式,可以使用 formula.api 自动处理分类变量(Dummy Coding)和交互项。
import statsmodels.formula.api as smf
# 语法:'目标变量 ~ 解释变量1 + 解释变量2'
# C(category) 会自动将其处理为类别变量
results = smf.ols('y ~ x1 + C(category) + x1:x2', data=df).fit()
print(results.summary())
3. 时间序列分析 (ARIMA)
从平稳性检验到模型预测的完整路径。
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.stattools import adfuller
# 1. ADF 平稳性检验
adf_result = adfuller(y_series)
print(f"ADF p-value: {adf_result[1]:.4f}")
# 2. 拟合 ARIMA(p,d,q) 模型
model = ARIMA(y_series, order=(1, 1, 1))
results = model.fit()
# 3. 预测未来 10 个周期
forecast = results.get_forecast(steps=10).summary_frame()
下载和安装
解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md。
你可能还需要
暂无推荐