2010-12-13 24 views
12

Estoy tratando de aprender R después de usar Stata y debo decir que me encanta. Pero ahora estoy teniendo algunos problemas. Estoy a punto de hacer algunas regresiones múltiples con los datos del panel, así que estoy usando el paquete plm.Heterocedasticity errores estándar robustos con el paquete PLM

Ahora quiero tener los mismos resultados con plm en R que cuando uso la función lm y Stata cuando realizo una regresión de entidad fija y heteroscedasticidad.

Digamos que tengo un conjunto de datos de panel con las variables Y, ENTITY, TIME, V1.

me sale el mismo error estándar en R con este código

lm.model<-lm(Y ~ V1 + factor(ENTITY), data=data) 
coeftest(lm.model, vcov.=vcovHC(lm.model, type="HC1)) 

como cuando realizo esta regresión en Stata

xi: reg Y V1 i.ENTITY, robust 

Pero cuando realizo esta regresión en el paquete plm me sale otra errores estándar

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data) 
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1)) 
  • ¿He perdido la configuración de algunas opciones?
  • ¿El modelo plm utiliza algún otro tipo de estimación y, en caso afirmativo, cómo?
  • ¿Puedo de alguna manera tener los mismos errores estándar con plm como en Stata con , robust
+2

esto es algo que es mejor preguntar en http://www.crossvalidated.com, van a ser capaces de ayudar más. Y sería bueno tener algún código reproducible mientras estás en ello, junto con el resultado esperado. Esto a menudo borra un problema bastante más rápido. –

+3

No sé stata, pero parece que su regresión stata es un modelo lineal agrupado de Y = a0 + a1 * V1 + a2 * ENTIDAD + épsilon con het se robusto, que es lo que está haciendo con 'lm' , por lo que los resultados coinciden. En el modelo 'plm' estás haciendo una regresión FE Y = a0 + a1 * V1 + ui + epsilon, donde ui es la FE para cada" individuo ", que por' índice 'has especificado que es ENTIDAD. Por lo tanto, creo que sus resultados de stata y R coinciden en el primer caso porque está haciendo un panel agrupado con entity como ind var en ambos casos. Pero no sé Stata. –

Respuesta

2

¿Es posible que el código de Stata es diferente de lo que está haciendo con PLM?

plm 's 'dentro' de opción con efectos 'individuales' significa un modelo de la forma:

yit = a + Xit*B + eit + ci 

¿Qué plm hace es degradar los coeficientes de modo que ci gotas de la ecuación.

yit_bar = Xit_bar*B + eit_bar 

Tal que el sufijo "bar" significa que cada variable tiene su media restada. La media se calcula a lo largo del tiempo y es por eso que el efecto es para el individuo. También podría tener un efecto de tiempo fijo que sería común para todas las personas, en cuyo caso el efecto también sería a través del tiempo (sin embargo, eso es irrelevante en este caso).

No estoy seguro de lo que hace el comando "xi" en STATA, pero creo que se expande una interacción ¿verdad? Entonces me parece que estás tratando de usar una variable ficticia por ENTIDAD como fue resaltado por @richardh.

Para que coincidan los códigos Stata y plm, debe utilizar el mismo modelo.

Tiene dos opciones: (1) inserta sus datos en stata y usa la opción xtreg con el modificador fe o (2) usa plm con la opción de agrupamiento y un dummy por ENTIDAD.

a juego Stata a R:

xtset entity year 
xtreg y v1, fe robust 

a juego PLM para Stata:

plm(Y ~ V1 + as.factor(ENTITY) , index=C("ENTITY","YEAR"), model="pooling", effect="individual", data=data) 

continuación, utilice vcovHC con uno de los modificadores. Asegúrese de verificar paper que tiene una buena revisión de todas las mecánicas detrás de las opciones "HC" y la forma en que afectan la matriz de covarianza de varianza.

Espero que esto ayude.

4

De forma predeterminada, el paquete plm no utiliza la exacta misma corrección de muestra pequeña para los datos del panel como Stata. Sin embargo, en la versión 1.5 de plm (en CRAN) tiene una opción que emulará lo que Stata está haciendo.

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", 
    effect="individual", data=data) 
coeftest(plm.model, vcov.=function(x) vcovHC(x, type="sss")) 

Esto debería dar la misma agrupados por grupo de errores estándar como en Stata (pero como se mencionó en los comentarios, sin un ejemplo reproducible y los resultados que esperas que es más difícil responder a la pregunta).

Para obtener más información sobre este y algunos puntos de referencia de R y Stata SE robustos ver Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R.

Consulte también:

+0

'plm''s' type = "sss" 'no replica el pequeño ajuste de muestra de Stata exactamente porque Stata tiene una intersección en su modelo FE y por lo tanto, usa una cantidad diferente de coeficientes en el ajuste. 'plm' no tiene esta intersección y, por lo tanto, usa" cantidad de coeficientes - 1 "en relación con Stata en el ajuste. Para muestras pequeñas, esto da resultados ligeramente diferentes pero pasará desapercibido en muestras grandes. – Helix123

+0

@ Helix123 De hecho. He discutido esto con los autores de 'plm' y, en general, no está claro cuál es la justificación teórica para que Stata incluya el intercepto en estos cálculos. Mientras que una intercepción * puede * ser calculada y 'plm' también lo hace si se solicita (' within_intercept() ', posiblemente aún en SVN), parece ser algo así como un concepto artificial en el contexto de modelos 'dentro'. Por ahora, no parecía prudente incluir una réplica "numéricamente exacta" de SE agrupadas. Esto dijo, Gretl parece replicar estos cómputos * exactamente * a la Stata. – landroni

Cuestiones relacionadas