You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

线性概率模型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²,而是经过了针对残差异方差的调整,所以和原始残差平方回归的结果必然存在数值差异。
  • 验证方法:手动复现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

火山引擎 最新活动