R

這兩個 Breusch-Pagan 測試有什麼區別?

  • January 29, 2016

在一些數據上使用 R 並嘗試查看我的數據是否是異方差的,我發現了 Breusch-Pagan 測試的兩個實現,bptest(包 lmtest)和ncvTest(包 car)。但是,這些會產生不同的結果。兩者有什麼區別?什麼時候應該選擇使用其中一種?

> 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 可能不是,但是,這意味著什麼?

您的猜測是正確的,ncvTest執行原始版本的 Breusch-Pagan 測試。這實際上可以通過比較來驗證bptest(model, studentize = FALSE)。(正如@Helix123 所指出的,兩個函數在其他方面也不同,例如默認參數,一個應該查看包手冊以lmtest獲取car更多詳細信息。)

學生化的 Breusch-Pagan 檢驗由 R. Koenker 在其 1981 年的文章A Note on Studentizing a Test for Heteroscedasticity中提出。兩者最明顯的區別是它們使用不同的測試統計量。即,讓是學生化的測試統計和成為原始人,

這是一段代碼,演示了我剛剛編寫的內容(數據取自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 測試比原始測試更穩健。

引用自:https://stats.stackexchange.com/questions/193061

comments powered by Disqus