这两个布劳希-帕根检验之间有什么区别?


9

在某些数据上使用R并尝试查看我的数据是否为异方差,我发现了Breusch-Pagan测试的两个实现,即bptest(包lmtest)和ncvTest(包车)。但是,这些产生不同的结果。两者有什么区别?您何时应该选择使用其中一个?

> model <- lm(y ~ x)
> bp <- bptest(model)
> bp
studentized Breusch-Pagan test

data:  model 
BP = 3.3596, df = 1, p-value = 0.06681

> ncvTest(model)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 3.858704    Df = 1     p = 0.04948855 

这些示例表明,根据测试,我的数据在一种情况下是异方差的,在另一种情况下是同方的。我确实在这里找到了这个问题,所以bptest可能是学生化的,而ncvTest可能不是,但是,那意味着什么呢?

Answers:


9

您的猜测是正确的,ncvTest执行Breusch-Pagan测试的原始版本。实际上,可以通过将其与进行验证bptest(model, studentize = FALSE)。(正如@ Helix123指出的那样,两个功能也是不同的其他方面,如默认参数,一个应该检查的包装说明书lmtestcar更多细节。)

R. Koenker在1981年的文章“对异方差测试进行学生化注释”中提出了学生化的Breusch-Pagan考试。两者最明显的区别是它们使用不同的检验统计量。即,让为学生化的测试统计信息,而为原始统计信息,ξξ^

ξ^=λξλ=Varε22Varε2

这是一段代码,演示了我刚才写的内容(数据取自faraway包):

> mdl = lm(final ~ midterm, data = stat500)
> bptest(mdl)

    studentized Breusch-Pagan test

data:  mdl
BP = 0.86813, df = 1, p-value = 0.3515

> bptest(mdl, studentize = FALSE)

    Breusch-Pagan test

data:  mdl
BP = 0.67017, df = 1, p-value = 0.413

> ncvTest(mdl)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 0.6701721    Df = 1     p = 0.4129916 
> 
> n = nrow(stat500)
> e = residuals(mdl)
> bpmdl = lm(e^2 ~ midterm, data = stat500)
> lambda = (n - 1) / n * var(e^2) / (2 * ((n - 1) / n * var(e))^2)
> Studentized_bp = n * summary(bpmdl)$r.squared
> Original_bp = Studentized_bp * lambda
> 
> Studentized_bp
[1] 0.8681335
> Original_bp
[1] 0.6701721

至于为什么要对原始的BP测试进行学生学习,直接引用R. Koenker的文章可能会有所帮助:

...从此分析中得出两个结论:

  1. Breusch和Pagan检验的渐近能力对分布的峰度极为敏感,并且ε
  2. 仅在高斯峰度的特殊情况下,检验的渐近大小是正确的。

以前的结论在Koenker和Bassett(1981)的基础上得到了扩展,其中提出了对异方差进行替代的可靠测试。后一个结论表明,只有在上的高斯条件下,Breusch和Pagan提出的显着性水平才是正确的 。由于此类条件通常是在盲目信念下假设的,而且众所周知难以验证,因此建议对Breusch和Pagan检验进行修改,以正确地“学习”检验统计量,并为的合理大类分布得出渐近正确的显着性水平。εε

简而言之,学生化BP测试比原始测试更强大。


2
但是,还有另一个区别:ncvTestbptest使用不同的变量来解释残差,请分别参见参数var.formulavarformula。将另一个回归变量添加到示例后,结果将有所不同。
Helix123 '16

@ Helix123:谢谢,我想我错过了。
弗朗西斯

2

实际上,默认情况下ncvTestbptest使用等式的左侧,而使用右侧。

这意味着,在的情况下Y ~ X,两个测试都将提供相同的结果(关于的studentize = F选项bptest)。但是,在的多变量分析中Y ~ X1 + X2,结果将有所不同。(正如@ Helix123指出的)

从帮助文件中ncvTest : var.formula:“误差方差的单边公式;如果省略,则误差方差取决于拟合值。” 这意味着,默认情况下将使用拟合值,但也允许使用自变量(X1 + X2)的线性组合。

从帮助文件中bptest : varformula:“默认情况下,采用与主要回归模型相同的解释变量。”

继续@Francis的相同示例(data stat500,来自faraway包):

> mdl_t = lm(final ~ midterm + hw, data = stat500)

BP测试,使用拟合值:

> ncvTest(mdl_t) # Default

Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 0.6509135    Df = 1     p = 0.4197863 

> bptest(mdl_t, varformula = ~ fitted.values(mdl_t), studentize = F)

Breusch-Pagan test

data:  mdl_t
BP = 0.65091, df = 1, p-value = 0.4198

BP测试,使用预测变量的线性组合:

> ncvTest(mdl_t, var.formula = ~ midterm + hw)
Non-constant Variance Score Test 
Variance formula: ~ midterm + hw 
Chisquare = 0.7689743    Df = 2     p = 0.6807997 

> bptest(mdl_t, studentize = F) # Default

Breusch-Pagan test

data:  mdl_t
BP = 0.76897, df = 2, p-value = 0.6808

“线性组合选项”允许研究与特定自变量的线性相关性相关的异方差性。例如,仅hw变量:

> ncvTest(mdl_t, var.formula = ~ hw)
Non-constant Variance Score Test 
Variance formula: ~ hw 
Chisquare = 0.04445789    Df = 1     p = 0.833004 

> bptest(mdl_t, varformula = ~ stat500$hw, studentize = F)

Breusch-Pagan test

data:  mdl_t
BP = 0.044458, df = 1, p-value = 0.833

最后,正如@Francis总结的那样,“总之,学生化BP测试比原始BP测试更健壮”,我通常将bpteststudentize = TRUE(默认)和varformula = ~ fitted.values(my.lm)作为选项用于同方差的初始方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.