這兩個 Breusch-Pagan 測試有什麼區別?
在一些數據上使用 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 的文章可能會有所幫助:
… 從該分析中得出兩個結論:
- Breusch 和 Pagan 檢驗的漸近冪對分佈的峰度極為敏感, 和
- 測試的漸近大小僅在高斯峰度的特殊情況下是正確的。
前一個結論在 Koenker 和 Bassett (1981) 中得到了擴展,其中提出了異方差性的替代穩健檢驗。後一個結論意味著 Breusch 和 Pagan 建議的顯著性水平只有在高斯條件下才是正確的 . 由於這些條件通常是盲目假設的,並且眾所周知難以驗證,因此建議對 Breusch 和 Pagan 檢驗進行修改,以正確“研究”檢驗統計量,並為相當大的分佈類別得出漸近正確的顯著性水平.
簡而言之,學生化的 BP 測試比原始測試更穩健。