J'utilise plm()
pour estimer les modèles à effets fixes du formulaire
y ~ x + time + time:fixed_trait
où fixed_trait
est une variable qui varie selon les individus mais qui est constante au sein des individus.
Le point d'interaction time
avec fixed_trait
est de permettre à l'effet de fixed_trait
varier dans le temps. (Je travaille ici à partir du récent livret de Paul Allison sur les effets fixes. Citation en annexe.)
plm()
n'a aucune difficulté à estimer les coefficients et les erreurs standard pour de tels modèles. Mais summary.plm()
ne peut pas calculer R ^ 2 pour ces modèles. C'est le problème que je voudrais résoudre.
Voici un exemple minimal:
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
Plonger dans plm:::summary.plm
rend le problème plus clair. Pour calculer R ^ 2, plm
essayez de faire ceci:
beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)
Cela ne fonctionne pas car beta
inclut uniquement les estimations pour year1
et year0:const
, tout en X
incluant également une colonne pour year1:const
. En d'autres termes, X
inclut des colonnes pour les deux year0:const
et year1:const
, et il est impossible d'estimer ces deux coefficients.
Une solution de contournement consiste à créer le terme d'interaction "à la main" avant de le saisir dans la formule:
tmp$yearXconst <- tmp$year*tmp$const
fe3 <- plm(y ~ year + yearXconst, index=c('ID', 'year'), data=tmp)
summary(fe3) # works fine
Mais c'est lourd. Bref, est-ce que je peux faire quelque chose pour summary.plm
travailler avec de tels modèles?
===
Allison, Paul D. 2009. Modèles de régression à effets fixes. Los Angeles, Californie: Sage. Voir notamment les pages 19-21.
plm
version 1.6-4, ce n'est plus un problème car les coefficients alisés sont simplement supprimés.Réponses:
Essayez d'utiliser
au lieu. Cela fonctionne même si vous incluez de manière redondante des effets à temps fixe dans l'
*
interaction (car le temps est fixé à effet fixe):la source
*
doit être utilisé au lieu de:
, existe-t-il un moyen de supprimer la sortie des coefficients de non-interaction?