Quelle est la différence entre ces deux tests de Breusch-Pagan?

9

En utilisant R sur certaines données et en essayant de voir si mes données sont hétéroscédastiques, j'ai trouvé deux implémentations du test de Breusch-Pagan, bptest (package lmtest) et ncvTest (package car). Cependant, ceux-ci produisent des résultats différents. Quelle est la différence entre les deux? Quand devriez-vous choisir d'utiliser l'un ou l'autre?

> 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 

Ces exemples montrent que selon les tests, mes données sont dans un cas hétéroscédastiques et dans l'autre cas homoscédastiques. J'ai trouvé cette question ici afin que bptest puisse être étudié et ncvTest ne soit pas, cependant, qu'est-ce que cela signifie alors?

Mine
la source

Réponses:

9

Votre supposition est correcte, ncvTesteffectue la version originale du test de Breusch-Pagan. Cela peut en fait être vérifié en le comparant à bptest(model, studentize = FALSE). (Comme l'a souligné @ Helix123, deux fonctions diffèrent également sur d'autres aspects tels que les arguments par défaut, il convient de consulter les manuels des packages de lmtestet carpour plus de détails.)

Le test Breusch-Pagan studentisé a été proposé par R. Koenker dans son article de 1981 A Note on Studentizing a Test for Heteroscedasticity . La différence la plus évidente des deux est qu'ils utilisent des statistiques de test différentes. À savoir, que soit les statistiques de test étudiées et l'original,* ξξξ^

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

Voici un extrait de code qui montre ce que je viens d'écrire (données extraites du farawaypackage):

> 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

Quant à savoir pourquoi on veut étudier le test BP d'origine, une citation directe de l'article de R. Koenker peut être utile:

... Deux conclusions ressortent de cette analyse:

  1. Le pouvoir asymptotique du test de Breusch et Pagan est extrêmement sensible à la kurtosis de la distribution de , etε
  2. la taille asymptotique du test n'est correcte que dans un cas particulier de kurtosis gaussien.

La première conclusion est développée dans Koenker et Bassett (1981) où des tests alternatifs et robustes d'hétéroscédasticité sont suggérés. Cette dernière conclusion implique que les niveaux de signification suggérés par Breusch et Pagan ne seront corrects que dans des conditions gaussiennes sur . Étant donné que de telles conditions sont généralement supposées sur une foi aveugle et sont notoirement difficiles à vérifier, une modification du test de Breusch et Pagan est suggérée qui "élève" correctement la statistique du test et conduit à des niveaux de signification asymptotiquement corrects pour une classe de distributions raisonnablement large pour .εε

En bref, le test de TA étudiant est plus robuste que l'original.

Francis
la source
2
Cependant, il y a une autre différence: ncvTestet bptestutilisez différentes variables pour expliquer les résidus, voir les arguments var.formulaet varformula, respectivement. Les résultats divergent une fois que vous avez ajouté un autre régresseur à votre exemple.
Helix123
@ Helix123: merci, je suppose que j'ai raté ça.
Francis
2

En termes pratiques, ncvTestutilise le côté gauche de l'équation et bptestutilise le côté droit, par défaut.

Cela signifie que dans un cas de Y ~ X, les deux tests fourniront les mêmes résultats (concernant l' studentize = Foption de bptest). Mais dans une analyse multivariée telle que Y ~ X1 + X2, les résultats seront différents. (Comme l'a souligné @ Helix123)

À partir du fichier d'aide de ncvTest : var.formula: "une formule unilatérale pour la variance d'erreur; si elle est omise, la variance d'erreur dépend des valeurs ajustées ." Ce qui signifie que, par défaut, les valeurs ajustées seront utilisées, mais cela permet également d'utiliser une combinaison linéaire des variables indépendantes (X1 + X2).

À partir du fichier d'aide de bptest : varformula: "Par défaut, les mêmes variables explicatives sont prises comme dans le modèle de régression principal."

Poursuivant le même exemple de @Francis (données stat500, à partir du farawaypackage):

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

Test BP, en utilisant des valeurs ajustées:

> 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

Test BP, utilisant une combinaison linéaire de prédicteurs:

> 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 '"option de combinaison linéaire" permet d'étudier l'hétéroscédasticité associée à la dépendance linéaire d'une variable indépendante spécifique. Par exemple, juste la hwvariable:

> 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

Enfin, comme le résume @Francis, "En bref, le test de TA étudiant est plus robuste que l'original", je choisis généralement bptest, avec studentize = TRUE(par défaut) et varformula = ~ fitted.values(my.lm)en option, une approche initiale de l'homoscédasticité.

Ana
la source