J'utilise plm()pour estimer les modèles à effets fixes du formulaire
y ~ x + time + time:fixed_trait
où fixed_traitest une variable qui varie selon les individus mais qui est constante au sein des individus.
Le point d'interaction timeavec fixed_traitest de permettre à l'effet de fixed_traitvarier 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.plmrend le problème plus clair. Pour calculer R ^ 2, plmessayez de faire ceci:
beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)
Cela ne fonctionne pas car betainclut uniquement les estimations pour year1et year0:const, tout en Xincluant également une colonne pour year1:const. En d'autres termes, Xinclut des colonnes pour les deux year0:constet 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.plmtravailler 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.
plmversion 1.6-4, ce n'est plus un problème car les coefficients alisés sont simplement supprimés.