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.