☰
statsmodels - SKILL
2026/10/16 2:49:44 网站建设 项目流程

name: statsmodels
description: “Statsmodels is Python’s premier library for statistical modeling, providing tools for estimation, inference, and diagnostics across a wide range of statistical methods.”
license: BSD-3-Clause license
metadata:
skill-author: K-Dense Inc.
risk: safe
source: community

Statsmodels:统计建模与计量经济学

概述

Statsmodels 是 Python 首屈一指的统计建模库,为广泛的统计方法提供估计、推断和诊断工具。将此技能用于严谨的统计分析,从简单的线性回归到复杂的时间序列模型和计量经济学分析。

使用本技能的时机

在以下情况下应使用此技能:

  • 拟合回归模型(OLS、WLS、GLS、分位数回归)
  • 执行广义线性建模(逻辑、泊松、伽马等)
  • 分析离散结果(二元、多项、计数、有序)
  • 进行时间序列分析(ARIMA、SARIMAX、VAR、预测)
  • 运行统计检验和诊断
  • 测试模型假设(异方差、自相关、正态性)
  • 检测离群值和有影响的观测值
  • 比较模型(AIC/BIC、似然比检验)
  • 估计因果效应
  • 生成可发表级的统计表格和推断

快速入门指南

线性回归(OLS)

importstatsmodels.apiassmimportnumpyasnpimportpandasaspd# Prepare data - ALWAYS add constant for interceptX=sm.add_constant(X_data)# Fit OLS modelmodel=sm.OLS(y,X)results=model.fit()# View comprehensive resultsprint(results.summary())# Key resultsprint(f"R-squared:{results.rsquared:.4f}")print(f"Coefficients:\\n{results.params}")print(f"P-values:\\n{results.pvalues}")# Predictions with confidence intervalspredictions=results.get_prediction(X_new)pred_summary=predictions.summary_frame()print(pred_summary)# includes mean, CI, prediction intervals# Diagnosticsfromstatsmodels.stats.diagnosticimporthet_breuschpagan bp_test=het_breuschpagan(results.resid,X)print(f"Breusch-Pagan p-value:{bp_test[1]:.4f}")# Visualize residualsimportmatplotlib.pyplotasplt plt.scatter(results.fittedvalues,results.resid)plt.axhline(y=0,color='r',linestyle='--')plt.xlabel('Fitted values')plt.ylabel('Residuals')plt.show()

逻辑回归(二元结果)

fromstatsmodels.discrete.discrete_modelimportLogit# Add constantX=sm.add_constant(X_data)# Fit logit modelmodel=Logit(y_binary,X)results=model.fit()print(results.summary())# Odds ratiosodds_ratios=np.exp(results.params)print("Odds ratios:\\n",odds_ratios)# Predicted probabilitiesprobs=results.predict(X)# Binary predictions (0.5 threshold)predictions=(probs>0.5).astype(int)# Model evaluationfromsklearn.metricsimportclassification_report,roc_auc_scoreprint(classification_report(y_binary,predictions))print(f"AUC:{roc_auc_score(y_binary,probs):.4f}")# Marginal effectsmarginal=results.get_margeff()print(marginal.summary())

时间序列(ARIMA)

fromstatsmodels.tsa.arima.modelimportARIMAfromstatsmodels.graphics.tsaplotsimportplot_acf,plot_pacf# Check stationarityfromstatsmodels.tsa.stattoolsimportadfuller adf_result=adfuller(y_series)print(f"ADF p-value:{adf_result[1]:.4f}")ifadf_result[1]>0.05:# Series is non-stationary, difference ity_diff=y_series.diff().dropna()# Plot ACF/PACF to identify p, qfig,(ax1,ax2)=plt.subplots(2,1,figsize=(12,8))plot_acf(y_diff,lags=40,ax=ax1)plot_pacf(y_diff,lags=40,ax=ax2)plt.show()# Fit ARIMA(p,d,q)model=ARIMA(y_series,order=(1,1,1))results=model.fit()print(results.summary())# Forecastforecast=results.forecast(steps=10)forecast_obj=results.get_forecast(steps=10)forecast_df=forecast_obj.summary_frame()print(forecast_df)# includes mean and confidence intervals# Residual diagnosticsresults.plot_diagnostics(figsize=(12,8))plt.show()

广义线性模型(GLM)

importstatsmodels.apiassm# Poisson regression for count dataX=sm.add_constant(X_data)model=sm.GLM(y_counts,X,family=sm.families.Poisson())results=model.fit()print(results.summary())# Rate ratios (for Poisson with log link)rate_ratios=np.exp(results.params)print("Rate ratios:\\n",rate_ratios)# Check overdispersionoverdispersion=results.pearson_chi2/results.df_residprint(f"Overdispersion:{overdispersion:.2f}")ifoverdispersion>1.5:# Use Negative Binomial insteadfromstatsmodels.discrete.count_modelimportNegativeBinomial nb_model=NegativeBinomial(y_counts,X)nb_results=nb_model.fit()print(nb_results.summary())

核心统计建模能力

1. 线性回归模型

适用于连续结果和各种误差结构的全面线性模型套件。

可用模型:

  • OLS:带独立同分布误差的标准线性回归
  • WLS:用于异方差误差的加权最小二乘
  • GLS:用于任意协方差结构的广义最小二乘
  • GLSAR:带自回归误差的 GLS,用于时间序列
  • 分位数回归:条件分位数(对离群值稳健)
  • 混合效应:带随机效应的分层/多水平模型
  • 递推/滚动:时变参数估计

关键特性:

  • 全面的诊断检验
  • 稳健标准误(HC、HAC、聚类稳健)
  • 影响统计量(Cook 距离、杠杆值、DFFITS)
  • 假设检验(F 检验、Wald 检验)
  • 模型比较(AIC、BIC、似然比检验)
  • 带置信区间和预测区间的预测

何时使用:连续结果变量、需要对系数进行推断、需要诊断

参考:有关模型选择、诊断和最佳实践的详细指导,请参阅references/linear_models.md。

2. 广义线性模型(GLM)

将线性模型扩展到非正态分布的灵活框架。

分布族:

  • 二项:二元结果或比例(逻辑回归)
  • 泊松:计数数据
  • 负二项:过度离散的计数
  • 伽马:正的连续、右偏数据
  • 逆高斯:具有特定方差结构的正连续数据
  • 高斯:等价于 OLS
  • Tweedie:用于半连续数据的灵活族

连接函数:

  • Logit、Probit、Log、Identity、Inverse、Sqrt、CLogLog、Power
  • 根据解释需求和模型拟合选择

关键特性:

  • 通过 IRLS 进行最大似然估计
  • 偏差和 Pearson 残差
  • 拟合优度统计量
  • 伪 R 平方度量
  • 稳健标准误

何时使用:非正态结果、需要灵活的方差和连接函数规格

参考:有关族选择、连接函数、解释和诊断,请参阅references/glm.md。

3. 离散选择模型

用于类别和计数结果的模型。

二元模型:

  • Logit:逻辑回归(比值比)
  • Probit:概率回归(正态分布)

多项模型:

  • MNLogit:无序类别(3 个以上水平)
  • 条件 Logit:带备选特定变量的选择模型
  • 有序模型:有序结果(有序类别)

计数模型:

  • 泊松:标准计数模型
  • 负二项:过度离散的计数
  • 零膨胀:过多零值(ZIP、ZINB)
  • 障碍模型:用于零值过多数据的两阶段模型

关键特性:

  • 最大似然估计
  • 均值处边际效应或平均边际效应
  • 通过 AIC/BIC 进行模型比较
  • 预测概率和分类
  • 拟合优度检验

何时使用:二元、类别或计数结果

参考:有关模型选择、解释和评估,请参阅references/discrete_choice.md。

4. 时间序列分析

全面的时间序列建模和预测能力。

单变量模型:

  • AutoReg(AR):自回归模型
  • ARIMA:自回归积分滑动平均
  • SARIMAX:带外生变量的季节性 ARIMA
  • 指数平滑:简单、Holt、Holt-Winters
  • ETS:创新状态空间模型

多变量模型:

  • VAR:向量自回归
  • VARMAX:带 MA 和外生变量的 VAR
  • 动态因子模型:提取共同因子
  • VECM:向量误差修正模型(协整)

高级模型:

  • 状态空间:卡尔曼滤波、自定义规格
  • 机制转换:马尔可夫转换模型
  • ARDL:自回归分布滞后

关键特性:

  • 用于模型识别的 ACF/PACF 分析
  • 平稳性检验(ADF、KPSS)
  • 带预测区间的预测
  • 残差诊断(Ljung-Box、异方差)
  • Granger 因果检验
  • 脉冲响应函数(IRF)
  • 预测误差方差分解(FEVD)

何时使用:时间有序数据、预测、理解时间动态

参考:有关模型选择、诊断和预测方法,请参阅references/time_series.md。

5. 统计检验与诊断

用于模型验证的广泛检验和诊断能力。

残差诊断:

  • 自相关检验(Ljung-Box、Durbin-Watson、Breusch-Godfrey)
  • 异方差检验(Breusch-Pagan、White、ARCH)
  • 正态性检验(Jarque-Bera、Omnibus、Anderson-Darling、Lilliefors)
  • 规格检验(RESET、Harvey-Collier)

影响与离群值:

  • 杠杆值(hat 值)
  • Cook 距离
  • DFFITS 和 DFBETAs
  • 学生化残差
  • 影响图

假设检验:

  • t 检验(单样本、双样本、配对)
  • 比例检验
  • 卡方检验
  • 非参数检验(Mann-Whitney、Wilcoxon、Kruskal-Wallis)
  • 方差分析(单因素、双因素、重复测量)

多重比较:

  • Tukey 的 HSD
  • Bonferroni 校正
  • 错误发现率(FDR)

效应量与功效:

  • Cohen’s d、eta 平方
  • t 检验、比例的功效分析
  • 样本量计算

稳健推断:

  • 异方差一致标准误(HC0-HC3)
  • HAC 标准误(Newey-West)
  • 聚类稳健标准误

何时使用:验证假设、检测问题、确保稳健推断

参考:有关全面检验和诊断程序,请参阅references/stats_diagnostics.md。

公式 API(R 风格)

Statsmodels 支持 R 风格的公式,用于直观的模型规格:

importstatsmodels.formula.apiassmf# OLS with formularesults=smf.ols('y ~ x1 + x2 + x1:x2',data=df).fit()# Categorical variables (automatic dummy coding)results=smf.ols('y ~ x1 + C(category)',data=df).fit()# Interactionsresults=smf.ols('y ~ x1 * x2',data=df).fit()# x1 + x2 + x1:x2# Polynomial termsresults=smf.ols('y ~ x + I(x**2)',data=df).fit()# Logitresults=smf.logit('y ~ x1 + x2 + C(group)',data=df).fit()# Poissonresults=smf.poisson('count ~ x1 + x2',data=df).fit()# ARIMA (not available via formula, use regular API)

模型选择与比较

信息准则

# Compare models using AIC/BICmodels={'Model 1':model1_results,'Model 2':model2_results,'Model 3':model3_results}comparison=pd.DataFrame({'AIC':{name:res.aicforname,resinmodels.items()},'BIC':{name:res.bicforname,resinmodels.items()},'Log-Likelihood':{name:res.llfforname,resinmodels.items()}})print(comparison.sort_values('AIC'))# Lower AIC/BIC indicates better model

似然比检验(嵌套模型)

# For nested models (one is subset of the other)fromscipyimportstats lr_stat=2*(full_model.llf-reduced_model.llf)df=full_model.df_model-reduced_model.df_model p_value=1-stats.chi2.cdf(lr_stat,df)print(f"LR statistic:{lr_stat:.4f}")print(f"p-value:{p_value:.4f}")ifp_value<0.05:print("Full model significantly better")else:print("Reduced model preferred (parsimony)")

交叉验证

fromsklearn.model_selectionimportKFoldfromsklearn.metricsimportmean_squared_error kf=KFold(n_splits=5,shuffle=True,random_state=42)cv_scores=[]fortrain_idx,val_idxinkf.split(X):X_train,X_val=X.iloc[train_idx],X.iloc[val_idx]y_train,y_val=y.iloc[train_idx],y.iloc[val_idx]# Fit modelmodel=sm.OLS(y_train,X_train).fit()# Predicty_pred=model.predict(X_val)# Scorermse=np.sqrt(mean_squared_error(y_val,y_pred))cv_scores.append(rmse)print(f"CV RMSE:{np.mean(cv_scores):.4f}±{np.std(cv_scores):.4f}")

最佳实践

数据准备

  1. 始终添加常数项:除非排除截距,否则使用sm.add_constant()
  2. 检查缺失值:拟合前处理或插补
  3. 必要时缩放:改善收敛、解释(但对树模型不是必需的)
  4. 编码类别变量:使用公式 API 或手动虚拟编码

模型构建

  1. 从简单开始:从基础模型开始,按需增加复杂性
  2. 检查假设:检验残差、异方差、自相关
  3. 使用合适的模型:将模型与结果类型匹配(二元→Logit、计数→Poisson)
  4. 考虑替代方案:如果假设被违反,使用稳健方法或不同模型

推断

  1. 报告效应量:不仅是 p 值
  2. 使用稳健标准误:当存在异方差或聚类时
  3. 多重比较:在检验多个假设时校正
  4. 置信区间:始终与点估计一起报告

模型评估

  1. 检查残差:绘制残差与拟合值图、Q-Q 图
  2. 影响诊断:识别并调查有影响的观测值
  3. 样本外验证:在保留集上测试或交叉验证
  4. 比较模型:对非嵌套使用 AIC/BIC,对嵌套使用 LR 检验

报告

  1. 综合摘要:使用.summary()获取详细输出
  2. 记录决策:注明变换、排除的观测值
  3. 谨慎解释:考虑连接函数(例如 log 连接的 exp(β))
  4. 可视化:绘制预测、置信区间、诊断图

常见工作流

工作流 1:线性回归分析

  1. 探索数据(绘图、描述统计)
  2. 拟合初始 OLS 模型
  3. 检查残差诊断
  4. 检验异方差、自相关
  5. 检查多重共线性(VIF)
  6. 识别有影响的观测值
  7. 必要时用稳健标准误重新拟合
  8. 解释系数和推断
  9. 在保留集或通过交叉验证验证

工作流 2:二元分类

  1. 拟合逻辑回归(Logit)
  2. 检查收敛问题
  3. 解释比值比
  4. 计算边际效应
  5. 评估分类性能(AUC、混淆矩阵)
  6. 检查有影响的观测值
  7. 与替代模型比较(Probit)
  8. 在测试集上验证预测

工作流 3:计数数据分析

  1. 拟合泊松回归
  2. 检查过度离散
  3. 如果过度离散,拟合负二项
  4. 检查过多零值(考虑 ZIP/ZINB)
  5. 解释率比
  6. 评估拟合优度
  7. 通过 AIC 比较模型
  8. 验证预测

工作流 4:时间序列预测

  1. 绘制序列,检查趋势/季节性
  2. 检验平稳性(ADF、KPSS)
  3. 如果非平稳则差分
  4. 从 ACF/PACF 识别 p、q
  5. 拟合 ARIMA 或 SARIMAX
  6. 检查残差诊断(Ljung-Box)
  7. 生成带置信区间的预测
  8. 在测试集上评估预测准确性

参考文档

此技能包含用于详细指导的全面参考文件:

references/linear_models.md

线性回归模型的详细覆盖,包括:

  • OLS、WLS、GLS、GLSAR、分位数回归
  • 混合效应模型
  • 递推和滚动回归
  • 全面诊断(异方差、自相关、多重共线性)
  • 影响统计量和离群值检测
  • 稳健标准误(HC、HAC、聚类)
  • 假设检验和模型比较

references/glm.md

广义线性模型的完整指南:

  • 所有分布族(二项、泊松、伽马等)
  • 连接函数以及何时使用每种
  • 模型拟合和解释
  • 伪 R 平方和拟合优度
  • 诊断和残差分析
  • 应用(逻辑、泊松、伽马回归)

references/discrete_choice.md

离散结果模型的综合指南:

  • 二元模型(Logit、Probit)
  • 多项模型(MNLogit、条件 Logit)
  • 计数模型(泊松、负二项、零膨胀、障碍)
  • 有序模型
  • 边际效应和解释
  • 模型诊断和比较

references/time_series.md

深入的时间序列分析指导:

  • 单变量模型(AR、ARIMA、SARIMAX、指数平滑)
  • 多变量模型(VAR、VARMAX、动态因子)
  • 状态空间模型
  • 平稳性检验和诊断
  • 预测方法和评估
  • Granger 因果、IRF、FEVD

references/stats_diagnostics.md

全面的统计检验和诊断:

  • 残差诊断(自相关、异方差、正态性)
  • 影响和离群值检测
  • 假设检验(参数和非参数)
  • 方差分析和事后检验
  • 多重比较校正
  • 稳健协方差矩阵
  • 功效分析和效应量

何时参考:

  • 需要详细的参数解释
  • 在相似模型之间选择
  • 排除收敛或诊断问题
  • 理解特定检验统计量
  • 寻找高级功能的代码示例

搜索模式:

# 查找特定模型的信息grep-r"Quantile Regression"references/# 查找诊断检验grep-r"Breusch-Pagan"references/stats_diagnostics.md# 查找时间序列指导grep-r"SARIMAX"references/time_series.md

应避免的常见陷阱

  1. 忘记常数项:除非不需要截距,否则始终使用sm.add_constant()
  2. 忽略假设:检查残差、异方差、自相关
  3. 结果类型的错误模型:二元→Logit/Probit、计数→Poisson/NB,而非 OLS
  4. 不检查收敛:注意优化警告
  5. 错误解释系数:记住连接函数(log、logit 等)
  6. 对过度离散数据使用泊松:检查离散度,必要时使用负二项
  7. 不使用稳健标准误:当存在异方差或聚类时
  8. 过拟合:相对于样本量参数过多
  9. 数据泄漏:在测试数据上拟合或使用未来信息
  10. 不验证预测:始终检查样本外性能
  11. 比较非嵌套模型:使用 AIC/BIC,而非 LR 检验
  12. 忽略有影响的观测值:检查 Cook 距离和杠杆值
  13. 多重检验:在检验许多假设时校正 p 值
  14. 不对时间序列差分:在非平稳数据上拟合 ARIMA
  15. 混淆预测区间与置信区间:预测区间更宽

获取帮助

有关详细文档和示例:

  • 官方文档:https://www.statsmodels.org/stable/
  • 用户指南:https://www.statsmodels.org/stable/user-guide.html
  • 示例:https://www.statsmodels.org/stable/examples/index.html
  • API 参考:https://www.statsmodels.org/stable/api.html

限制

  • 仅当任务明确匹配上述范围时使用本技能。
  • 不要将输出视为针对特定环境验证、测试或专家审查的替代品。
  • 如果缺少所需输入、权限、安全边界或成功标准,请停下来并要求澄清。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询