Apa perbedaan antara kedua Tes Breusch-Pagan ini?

9

Menggunakan R pada beberapa data dan mencoba melihat apakah data saya heteroscedastic atau tidak, saya telah menemukan dua implementasi tes Breusch-Pagan, bptest (paket lmtest) dan ncvTest (paket mobil). Namun, ini menghasilkan hasil yang berbeda. Apa perbedaan keduanya? Kapan sebaiknya Anda memilih untuk menggunakan satu atau yang lain?

> 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 

Contoh ini menunjukkan bahwa menurut pengujian, data saya dalam satu kasus heteroscedastic dan dalam kasus lain homoscedastic. Saya memang menemukan pertanyaan ini di sini sehingga bptest mungkin menjadi mahasiswa dan ncvTest mungkin tidak, bagaimanapun, apa artinya ini?

Penampilan
sumber

Jawaban:

9

Tebakan Anda benar, ncvTestmelakukan versi asli tes Breusch-Pagan. Ini sebenarnya dapat diverifikasi dengan membandingkannya bptest(model, studentize = FALSE). (Seperti yang ditunjukkan @ Helix123, dua fungsi juga berbeda dalam aspek lain seperti argumen default, seseorang harus memeriksa manual paket lmtestdan caruntuk lebih detail.)

ξξ^

ξ^=λξ,λ=Var(ε2)2Var(ε)2.

Berikut adalah potongan kode yang menunjukkan apa yang baru saja saya tulis (data diambil dari farawaypaket):

> 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

Adapun alasan mengapa seseorang ingin membuat tes BP yang asli, kutipan langsung dari artikel R. Koenker mungkin bermanfaat:

... Dua kesimpulan muncul dari analisis ini:

  1. Kekuatan asimptotik dari Breusch dan tes Pagan sangat sensitif terhadap kurtosis distribusi , danε
  2. ukuran asimptotik dari tes ini hanya benar dalam kasus khusus Gaussian kurtosis.

Kesimpulan sebelumnya diperluas dalam Koenker dan Bassett (1981) di mana alternatif, tes kuat untuk heteroskedastisitas disarankan. Kesimpulan terakhir menyiratkan bahwa tingkat signifikansi yang disarankan oleh Breusch dan Pagan hanya akan benar dalam kondisi Gaussian di . Karena kondisi seperti itu umumnya diasumsikan berdasarkan keyakinan buta dan terkenal sulit untuk diverifikasi, sebuah modifikasi dari tes Breusch dan Pagan disarankan yang dengan benar "menswastakan" statistik pengujian dan mengarah ke tingkat signifikansi yang benar asimptotik untuk kelas distribusi yang cukup besar untuk .εεε

Singkatnya, tes BP pelajar lebih kuat daripada yang asli.

Francis
sumber
2
Namun, ada perbedaan lain: ncvTestdan bptestmenggunakan variabel yang berbeda untuk menjelaskan residu, lihat argumen var.formuladan varformula, masing-masing. Hasilnya akan berbeda setelah Anda menambahkan regressor lain ke contoh Anda.
Helix123
@ Helix123: terima kasih, saya rasa saya melewatkan itu.
Francis
2

Dalam istilah praktis, ncvTestgunakan sisi kiri dari persamaan dan bptestgunakan sisi kanan, secara default.

Ini berarti bahwa dalam kasus Y ~ X, kedua tes akan memberikan hasil yang sama (mengenai studentize = Fopsi bptest). Tetapi dalam analisis multivariat seperti itu Y ~ X1 + X2, hasilnya akan berbeda. (Seperti yang ditunjukkan oleh @ Helix123)

Dari file bantuan ncvTest : var.formula: "rumus satu sisi untuk varian kesalahan; jika dihilangkan, varian kesalahan tergantung pada nilai yang dipasang ." Yang berarti, secara default, nilai yang dipasang akan digunakan, tetapi juga memungkinkan untuk menggunakan kombinasi linear dari variabel independen (X1 + X2).

Dari file bantuan bptest : varformula: "Secara default , variabel penjelas yang sama diambil seperti dalam model regresi utama."

Melanjutkan contoh yang sama dari @Francis (data stat500, dari farawaypaket):

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

Tes BP, menggunakan nilai yang dipasang:

> 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

Tes BP, menggunakan kombinasi prediktor linier:

> 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

"Opsi kombinasi linear" memungkinkan untuk menyelidiki heteroskedastisitas yang terkait dengan ketergantungan linear dari variabel independen tertentu. Misalnya, hanya hwvariabelnya:

> 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

Terakhir, seperti yang dirangkum @Francis, "Singkatnya, tes BP pelajar lebih kuat daripada yang asli", saya biasanya menggunakan bptest, dengan studentize = TRUE(default) dan varformula = ~ fitted.values(my.lm)sebagai opsi, untuk pendekatan awal untuk homoskedastisitas.

Ana
sumber