Estoy usando plm()
para estimar modelos de efectos fijos 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 interactuar time
con fixed_trait
es permitir que el efecto fixed_trait
varíe a lo largo del tiempo. (Estoy trabajando aquí desde el reciente folleto de Paul Allison sobre efectos fijos. Cita adjunta).
plm()
no tiene problemas para estimar coeficientes y errores estándar para tales modelos. Pero summary.plm()
no puedo calcular R ^ 2 para estos modelos. Este es el problema que me gustaría solucionar.
Aquí hay 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
aclara el problema. Para calcular R ^ 2, plm
intenta hacer esto:
beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)
Esto no funciona porque beta
solo 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 estimar ambos coeficientes.
Una solución alternativa es crear el término de interacción "a mano" antes de ingresarlo 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 engorroso. A falta de esto, ¿hay algo que pueda hacer para summary.plm
trabajar con estos modelos?
===
Allison, Paul D. 2009. Modelos de regresión de efectos fijos. Los Ángeles, CA: Sage. Ver especialmente las páginas 19-21.
plm
versión 1.6-4, esto ya no es un problema ya que los coeficientes aumentados simplemente se eliminan.Respuestas:
Intenta usar
en lugar. Incluso funciona si incluye efectos fijos de tiempo de forma redundante en la
*
interacción (porque el tiempo se está solucionando):fuente
*
debe usarse en lugar de:
, ¿hay alguna forma de suprimir la salida de coeficientes de no interacción?