17 votos

El uso de R y de plm para la estimación de efectos fijos modelos que incluyen las interacciones con el tiempo

Estoy usando plm() a la estimación de efectos fijos de los modelos de la forma

y ~ x + time + time:fixed_trait

donde fixed_trait es una variable que varía entre individuos, pero es constante dentro de los individuos.

El punto de interacción time con fixed_trait es para permitir que el efecto de la fixed_trait a variar en el tiempo. (Estoy trabajando aquí de Pablo Allison reciente folleto de efectos fijos. Cita en el apéndice.)

plm() no tiene problemas en la estimación de los coeficientes y errores estándar para estos modelos. Pero summary.plm() no se puede calcular R^2 para estos modelos. Este es el problema que me gustaría solucionar.

Aquí es un ejemplo mínimo:

library(plm)
tmp <- data.frame(ID=rep(1:3, 2), year=rep(0:1, each=3), 
                  y=rnorm(6), const=rep(1:3, 2))
fe1 <- plm(y ~ year,              index=c('ID', 'year'), data=tmp)
fe2 <- plm(y ~ year + year:const, index=c('ID', 'year'), data=tmp)
summary(fe1)  # works fine
summary(fe2)  # Error in crossprod(t(X), beta) : non-conformable arguments

Profundizar en plm:::summary.plm hace que el problema más clara. Para calcular R^2, plm intenta hacer esto:

beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)

Esto no funciona porque beta sólo incluye estimaciones para year1 y year0:const, mientras que X también incluye una columna para year1:const. En otras palabras, X incluye columnas para ambos year0:const y year1:const, y es imposible de estimar tanto de los coeficientes.

Una solución es crear el término de interacción "a mano" antes de entrar en la fórmula:

tmp$yearXconst <- tmp$year*tmp$const
fe3 <- plm(y ~ year + yearXconst, index=c('ID', 'year'), data=tmp)
summary(fe3)  # works fine

Pero esto es muy complicado. Por debajo de este, ¿hay algo que yo pueda hacer para summary.plm trabajar con estos modelos?

===

Allison, Pablo D. 2009. Efectos Fijos De Los Modelos De Regresión. Los Angeles, CA: Sage. Véanse especialmente las páginas 19-21.

9voto

simmosn Puntos 304

Trate de usar

fe3 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp)

en su lugar. Funciona incluso si son de forma redundante, incluyendo el tiempo de los efectos fijos en la * interacción (porque el tiempo está siendo efecto fijo (ed):

fe4 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp, effect = "twoway")

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