3 votos

Prueba de autocorrelación de Breusch-Godfrey: bgtest para datos de panel arroja resultados diferentes que pbgtest

Tengo un conjunto de datos panel que contiene 12 años diferentes, muchos identificadores por año (algunos identificadores faltan en algunos años... panel desequilibrado) y muchas variables. Me gustaría probar la correlación automática y he ejecutado algunos modelos de regresión en OLS que contienen la variable "año" para controlar el tiempo. He verificado la correlación automática utilizando lmtest::bgtest y sugiere que no hay autocorrelación (mis datos están ordenados por año..2002,2002,2002,2003,2003....). Me enteré de que el paquete plm tiene una función pbgtest que debería ser lo mismo que bgtest pero cuando ejecuto el mismo modelo OLS exacto en plm y pruebo la autocorrelación, la prueba sugiere autocorrelación. Estoy usando model = "pooling" en mi función plm, por lo que debería ser exactamente lo mismo que mi modelo OLS creado por la función lm. Me gustaría saber cuál de las pruebas usar/confiar y por qué difieren los resultados?

ejemplo de mi modelo:

a <- plm(y~x,model="pooling")
b <- lm(y~x)
plm::pbgtest(a)
lmtest::bgtest(b)

Los resultados de las pruebas no son los mismos aunque los datos son los mismos y el resumen de a y b es el mismo. La diferencia no se debe al order diferente o al type= "F" o "Chisq" diferentes.

2voto

Helix123 Puntos 287

El argumento order tiene diferentes valores predeterminados cuando se utiliza pbgtest() en comparación con bgtest().

Para pbgtest() order = NULL, para bgtest() order = 1. Consulte también la sección Nota en la documentación (?pbgtest).

Lo que desees para un modelo de panel es la respuesta de pbgtest() (no importa cuál sea el valor de order).

Sin embargo, no obtendrás los mismos números para ambas funciones si las aplicas a un modelo de panel (efectos fijos o aleatorios). Esto tiene una razón bastante técnica: lmtest::bgtest toma los datos de model_object$model que son los datos originales (sin transformar) en cualquier caso. Para modelos de panel, la prueba debe ejecutarse en los datos (cuasi-)desestandarizados y pbgtest() al ser un envoltorio alrededor de lmtest::bgtest() hace exactamente eso: extrae los datos (cuasi-)desestandarizados y los pasa a lmtest::bgtest(). Para un modelo de agrupación, obtendrás los mismos números ya que los datos no están transformados.

También tenga en cuenta que los datos en modelos estimados por plm pueden estar en un orden diferente ya que plm reordena los datos para que sean una serie temporal apilada. Para verificar eso, uno puede comparar los datos y su orden utilizado en la estimación mirando plm_object$model y lm_object$model. Un orden diferente de las observaciones llevará a resultados distintos de pbgtest y bgtest incluso para modelos de agrupación.

Aquí hay un ejemplo de código que muestra cómo funciona pbgtest() en principio:

library(plm)
data("Grunfeld", package = "plm")
g_re <- plm(inv ~ value + capital, data = Grunfeld, model = "random")

# extraer los datos (cuasi-)desestandarizados:
X <- model.matrix(g_re)
y <- pmodel.response(g_re)
# hacer un objeto de modelo lm para pasar a lmtest::bgtest()
lm.mod <- lm(y ~ X - 1)

# mismos coeficientes:
all.equal(lm.mod$coefficients, g_re$coefficients, check.attributes = FALSE)
lmtest::bgtest(lm.mod, order = 1)
plm::pbgtest(g_re, order = 1) # resultados idénticos

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X