在Python中怎样使用statsmodels进行严谨的统计回归诊断

梦辰吖_1712

梦辰吖_1712

2026-10-18

545人浏览

原创

statsmodels回归后用results.resid和results.fittedvalues提取残差与拟合值,二者为numpy.ndarray;需转pandas.series或用matplotlib绘图,且须验证len(results.resid) == results.nobs;推荐用results.get_influence()替代手动计算以避免精度偏差。

在python中怎样使用statsmodels进行严谨的统计回归诊断

statsmodels回归后怎么提取残差和拟合值

回归诊断的第一步是拿到残差和预测值,results.resid 和 results.fittedvalues 是最直接的入口。注意它们返回的是 numpy.ndarray,不是 Pandas Series(除非你用 sm.OLS(y, X, missing='drop') 且原始数据是 DataFrame,此时索引可能保留,但不能依赖)。常见错误是直接对 results.resid 调用 .plot() 报错——它没这个方法,得先转成 pandas.Series 或用 matplotlib.pyplot.scatter()。

  • 务必检查残差长度是否等于有效样本量:len(results.resid) == results.nobs,否则说明有缺失值处理不一致
  • 如果模型用了 formula 接口(如 smf.ols('y ~ x1 + x2', df)),results.get_influence() 返回的对象能更安全地复用原始索引
  • 避免手动计算残差(如 y - results.predict()),浮点精度和内部设计差异可能导致微小偏差,尤其在加权或广义最小二乘中

怎么用statsmodels做残差正态性与异方差检验

statsmodels 不自带“一键诊断面板”,得组合调用特定函数。正态性推荐 statsmodels.stats.diagnostic.acorr_ljungbox(仅时序)之外的通用方案:用 scipy.stats.shapiro(小样本)或 scipy.stats.jarque_bera(大样本),但注意后者对偏度/峰度敏感,易在样本量 > 5000 时过度拒绝原假设;异方差首选 statsmodels.stats.diagnostic.het_breusch_pagan(BP 检验)或 het_white(White 检验),二者都返回四元组,关键看 p 值(bp_test[3])。

  • het_breusch_pagan 要求传入残差和原始设计矩阵 X(不是 results.model.exog,后者可能含常数列重复或缩放)
  • White 检验自动构造辅助回归的变量(含平方项与交叉项),计算开销更大,但无需预设异方差形式
  • QQ 图比统计检验更稳健:statsmodels.graphics.gofplots.ProbPlot(results.resid).qqplot(),别只盯着 p 值——尾部偏离比中间偏离更有诊断价值

如何用get_influence()识别强影响点和高杠杆点

results.get_influence() 是 statsmodels 里最被低估的诊断接口。它返回的 Influence 对象能算 Cook 距离、DFBETAS、杠杆值(hat matrix 对角线)、DFFITS 等。其中 .cooks_distance 返回两个数组(距离值、p 值),但注意其 p 值基于 F 分布近似,小样本下不可靠;真正实用的是阈值判断:leverage > 2 * (k + 1) / n(k 是参数个数,n 是样本量)。

Claw Code Suite (Python-Only Edition)
Claw Code Suite (Python-Only Edition)

仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...

下载
  • DFBETAS 按列给出每个参数的标准化影响,绝对值 > 2 / sqrt(n) 视为对该参数有显著影响
  • 不要只画 infl.hat_matrix_diag 散点图——叠加 infl.cooks_distance[0] 颜色映射更能定位“高杠杆+高影响”的危险点
  • 若用 sm.WLS 或 sm.GLS,get_influence() 默认按加权残差计算,需显式传 cov_type='HC0' 才能得到稳健标准误下的影响度量

为什么plot_regress_exog结果看起来“太干净”

statsmodels.graphics.regressionplots.plot_regress_exog 默认只画单个解释变量的偏残差图(partial residual plot),容易误判为“无非线性”。它实际展示的是 resid_all_others + beta_i * x_i vs x_i,其中 resid_all_others 是其他变量回归后的残差。问题在于:当 x_i 与其他变量高度相关时,该图会掩盖真实非线性;且它不显示置信带,视觉上平滑不等于无结构。

  • 必须配合 plot_partregress(全变量偏回归图)和 plot_ccpr(成分-成分图)交叉验证
  • 对分类变量或样条项,plot_regress_exog 会失效——改用 results.get_prediction().summary_frame() 手动构造边际效应图
  • 图中红虚线是 OLS 拟合线,但若数据存在分组(如实验/对照),应分组拟合并比较斜率,而非依赖全局直线

回归诊断不是跑完几个检验就结束的事。最常被跳过的一步是:把残差对所有原始变量(包括你没放进模型的潜在混杂变量)散点图扫一遍——statsmodels 不会替你想到该画哪张图,而异常模式往往藏在那些“本不该画”的图里。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1751

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4504

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1729

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

26557

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3227

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3227

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1183

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2503

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习