You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Breusch-Pagan同方差性测试触发ValueError:需包含常数项

解决Breusch-Pagan测试触发的ValueError(需要常数项)

问题根源

  • 你构建的OLS模型未包含常数项(截距),statsmodels的sm.OLS()默认不会自动添加截距项。
  • Breusch-Pagan测试要求输入的自变量矩阵(exog_het)必须包含常数项,且至少有两列(常数项+至少一个自变量),但你传入的heights[['AM_Height']]仅一列,不符合要求。

修正步骤

1. 重构带常数项的线性模型

使用sm.add_constant()为自变量添加常数项列,确保OLS模型包含截距:

import statsmodels.api as sm
import statsmodels.stats.api as sms
import matplotlib.pyplot as plt

# 为自变量添加常数项
x = sm.add_constant(heights['AM_Height'])
y = heights['PM_Height']
model = sm.OLS(y, x).fit()

2. 修正Breusch-Pagan测试代码

测试时传入包含常数项的完整自变量矩阵(即构建模型时的x),而非单独的AM_Height列:

# 直接使用模型内置的残差,无需手动计算
residual = model.resid

# 残差与拟合值散点可视化(可选)
fig, ax = plt.subplots(figsize=(6,2.5))
_ = ax.scatter(residual, model.fittedvalues)

# 执行Breusch-Pagan异方差检验
bp_results = sms.diagnostic.het_breuschpagan(residual, x)

测试结果说明

het_breuschpagan返回四个结果:

  • Lagrange Multiplier统计量
  • LM检验的p值
  • F统计量
  • F检验的p值

若p值小于显著性水平(如0.05),则拒绝同方差原假设,判定数据存在异方差。

内容的提问来源于stack exchange,提问作者Hayden Ravert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:15:15