¿Cuál es la diferencia entre estas dos pruebas breusch-paganas?

9

Usando R en algunos datos e intentando ver si mis datos son o no heteroscedásticos, he encontrado dos implementaciones de la prueba Breusch-Pagan, bptest (package lmtest) y ncvTest (package car). Sin embargo, estos producen resultados diferentes. ¿Cuál es la diferencia entre los dos? ¿Cuándo debería elegir usar uno u otro?

> 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 

Este ejemplo muestra que, según las pruebas, mis datos son en un caso heteroscedastic y en el otro caso homoscedastic. Encontré esta pregunta aquí, por lo que bptest podría ser estudiada y ncvTest podría no ser, sin embargo, ¿qué significa esto entonces?

Semblante
fuente

Respuestas:

9

Su suposición es correcta, ncvTestrealiza la versión original de la prueba Breusch-Pagan. Esto realmente se puede verificar comparándolo con bptest(model, studentize = FALSE). (Como señaló @ Helix123, dos funciones también difieren en otros aspectos, como los argumentos predeterminados, uno debe consultar los manuales del paquete lmtesty carpara obtener más detalles).

R. Koenker propuso la prueba studentizada de Breusch-Pagan en su artículo de 1981 Una Nota sobre la Studentización de una prueba de heterocedasticidad . La diferencia más obvia de los dos es que usan estadísticas de prueba diferentes. A saber, deje que sea ​​la estadística de prueba estudiada y sea ​​la original,* ξξξ^

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

Aquí hay un fragmento de código que demuestra lo que acabo de escribir (datos tomados del farawaypaquete):

> 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

En cuanto a por qué uno quiere estudiar la prueba original de BP, una cita directa del artículo de R. Koenker puede ser útil:

... Dos conclusiones surgen de este análisis:

  1. El poder asintótico de la prueba de Breusch y Pagan es extremadamente sensible a la curtosis de la distribución de , yε
  2. El tamaño asintótico de la prueba es correcto solo en casos especiales de curtosis gaussiana.

La primera conclusión se amplía en Koenker y Bassett (1981), donde se sugieren pruebas alternativas y robustas de heterocedasticidad. La última conclusión implica que los niveles de significación sugeridos por Breusch y Pagan serán correctos solo en condiciones gaussianas en . Dado que tales condiciones generalmente se asumen con fe ciega y son notoriamente difíciles de verificar, se sugiere una modificación de la prueba de Breusch y Pagan que correctamente "estudia" el estadístico de prueba y conduce a niveles de significación asintóticamente correctos para una clase de distribuciones razonablemente grande para .εε

En resumen, la prueba de BP studentizada es más robusta que la original.

Francis
fuente
2
Sin embargo, hay otra diferencia: ncvTesty bptestusar diferentes variables para explicar los residuos, ver argumentos var.formulay varformula, respectivamente. Los resultados serán diferentes una vez que agregue otro regresor a su ejemplo.
Helix123
@ Helix123: gracias, supongo que me perdí eso.
Francis el
2

En términos prácticos, ncvTestusa el lado izquierdo de la ecuación y bptestusa el lado derecho, por defecto.

Significa que, en el caso de Y ~ X, ambas pruebas proporcionarán los mismos resultados (con respecto a la studentize = Fopción de bptest). Pero en un análisis multivariante como Y ~ X1 + X2, los resultados serán diferentes. (Como señaló @ Helix123)

Del archivo de ayuda de ncvTest : var.formula: "una fórmula unilateral para la varianza del error; si se omite, la varianza del error depende de los valores ajustados ". Lo que significa que, por defecto, se usarán los valores ajustados, pero también permite usar una combinación lineal de las variables independientes (X1 + X2).

Del archivo de ayuda de bptest : varformula: "Por defecto , se toman las mismas variables explicativas que en el modelo de regresión principal".

Continuando con el mismo ejemplo de @Francis (datos stat500, del farawaypaquete):

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

Prueba de BP, utilizando valores ajustados:

> 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

Prueba de PA, utilizando una combinación lineal de predictores:

> 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

La "opción de combinación lineal" permite investigar la heterocedasticidad asociada a la dependencia lineal de una variable independiente específica. Por ejemplo, solo 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

Por último, como resumió @Francis, "en resumen, la prueba de BP estudiantilizada es más robusta que la original", generalmente utilizo bptest, con studentize = TRUE(por defecto) y varformula = ~ fitted.values(my.lm)como opciones, un enfoque inicial para la homocedasticidad.

Ana
fuente