线性概率模型studentized BP检验与手动回归F值差异原因咨询
为什么Studentized Breusch-Pagan检验值和手动残差平方回归的F值不一致?
嘿,这个问题的核心在于你用的Studentized Breusch-Pagan检验和手动执行的残差平方回归,本质上依赖的是完全不同的统计量计算逻辑,咱们一步步理清楚:
核心差异:残差的类型不同
你手动跑的回归用的是原始残差的平方(resid(model1)^2),这对应普通Breusch-Pagan检验的基础步骤;而bptest(model1, studentize=TRUE)调用的是Studentized残差的平方。
Studentized残差是对原始残差的一种调整——每个残差都会除以它的个体估计标准差(这个标准差是通过删除当前观测后重新拟合模型得到的,目的是消除单个观测对残差方差的影响),让检验在小样本或异方差结构复杂的场景下更稳健。统计量的计算逻辑不同
- 普通Breusch-Pagan检验的卡方统计量是
样本量n × 残差平方回归的R²,服从自由度为自变量个数的卡方分布;你手动得到的F值是这个残差平方回归的F统计量,它和普通BP的卡方值可以互相转换,但和Studentized BP的统计量无关。 - Studentized Breusch-Pagan检验的统计量是基于Studentized残差平方的回归计算而来的,它不是简单的
n×R²,而是经过了针对残差异方差的调整,所以和原始残差平方回归的结果必然存在数值差异。
- 普通Breusch-Pagan检验的卡方统计量是
验证方法:手动复现Studentized BP检验
如果你想手动得到和bptest一致的结果,可以先提取Studentized残差,再做回归:# 提取Studentized残差 stu_resid <- rstudent(model1) # 用Studentized残差平方对自变量回归 bp_stu_model <- lm(I(stu_resid^2) ~ mother + after + mother:after, data = your_data) # 计算Studentized BP统计量:n × R²(这里n是样本量) bp_stat <- nrow(your_data) * summary(bp_stu_model)$r.squared这个
bp_stat就会和bptest(model1, studentize=TRUE)输出的BP值几乎一致。
总之,两种方法的数值差异完全是因为使用的残差类型不同,但只要p值足够小,都能有效指示模型存在异方差问题。
内容的提问来源于stack exchange,提问作者Nizar Habib




