Qual è la differenza tra questi due test Breusch-Pagan?


9

Usando R su alcuni dati e cercando di vedere se i miei dati sono eteroscedastici, ho trovato due implementazioni del test Breusch-Pagan, bptest (pacchetto lmtest) e ncvTest (pacchetto auto). Tuttavia, questi producono risultati diversi. Qual è la differenza tra i due? Quando dovresti scegliere di usare l'uno o l'altro?

> 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 

Questo esempio mostra che, secondo i test, i miei dati sono in un caso eteroscedastici e nell'altro caso omoscedastici. Ho trovato questa domanda qui, quindi bptest potrebbe essere studentized e ncvTest potrebbe non essere, tuttavia, cosa significa questo?

Risposte:


9

La tua ipotesi è corretta, ncvTestesegue la versione originale del test Breusch-Pagan. Questo può effettivamente essere verificato confrontandolo con bptest(model, studentize = FALSE). (Come sottolineato da @ Helix123, due funzioni differiscono anche in altri aspetti come gli argomenti predefiniti, si dovrebbe controllare i manuali dei pacchetti di lmteste carper maggiori dettagli.)

Il test studentesco Breusch-Pagan fu proposto da R. Koenker nel suo articolo del 1981 A Note on Studentizing a Test for Heteroscedasticity . La differenza più ovvia delle due è che usano statistiche di test diverse. Vale a dire, essere le statistiche dei test studentizzate e sia quello originale,* ξξξ^

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

Ecco uno snippet di codice che dimostra ciò che ho appena scritto (dati presi dal farawaypacchetto):

> 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

Per quanto riguarda il motivo per cui si desidera studiare il test BP originale, una citazione diretta dall'articolo di R. Koenker può essere utile:

... Da questa analisi emergono due conclusioni:

  1. Il potere asintotico del test di Breusch e Pagan è estremamente sensibile alla curtosi della distribuzione di , eε
  2. la dimensione asintotica del test è corretta solo in casi speciali di curtosi gaussiana.

La prima conclusione è estesa a Koenker e Bassett (1981), dove vengono suggeriti test alternativi e robusti per l'eteroscedasticità. Quest'ultima conclusione implica che i livelli di significatività suggeriti da Breusch e Pagan saranno corretti solo in condizioni gaussiane su . Poiché tali condizioni sono generalmente assunte sulla fede cieca e sono notoriamente difficili da verificare, viene suggerita una modifica del test di Breusch e Pagan che "studia" correttamente la statistica del test e porta a livelli di significatività asintoticamente corretti per una classe ragionevolmente ampia di distribuzioni per .εεε

In breve, il test BP studentizzato è più robusto di quello originale.


2
Tuttavia, c'è un'altra differenza: ncvTeste bptestutilizzare variabili diverse per spiegare i residui, vedere gli argomenti var.formulae varformula, rispettivamente. I risultati divergeranno quando aggiungi un altro regressore al tuo esempio.
Helix123,

@ Helix123: grazie, immagino di aver perso.
Francis,

2

In termini pratici, ncvTestutilizza il lato sinistro dell'equazione e bptestutilizza il lato destro, per impostazione predefinita.

Ciò significa che in Y ~ Xentrambi i casi entrambi i test forniranno gli stessi risultati (per quanto riguarda l' studentize = Fopzione di bptest). Ma in un'analisi multivariata come Y ~ X1 + X2, i risultati saranno diversi. (Come sottolineato da @ Helix123)

Dal file di aiuto di ncvTest : var.formula: "una formula unilaterale per la varianza dell'errore; se omessa, la varianza dell'errore dipende dai valori adattati ". Ciò significa che, per impostazione predefinita, verranno utilizzati i valori adattati, ma consente anche di utilizzare una combinazione lineare delle variabili indipendenti (X1 + X2).

Dal file di aiuto di bptest : varformula: "Per impostazione predefinita, vengono prese le stesse variabili esplicative del modello di regressione principale."

Continuando lo stesso esempio di @Francis (dati stat500, dal farawaypacchetto):

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

Test BP, utilizzando i valori adattati:

> 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 test, utilizzando una combinazione lineare di predittori:

> 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

L '"opzione di combinazione lineare" consente di studiare l'eteroschedasticità associata alla dipendenza lineare di una specifica variabile indipendente. Ad esempio, solo la hwvariabile:

> 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

Infine, come sintetizzava @Francis, "In breve, il test BP studentizzato è più robusto di quello originale", di solito vado bptest, con studentize = TRUE(impostazione predefinita) e varformula = ~ fitted.values(my.lm)come opzioni, per un approccio iniziale per l'omoschedasticità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.