Utilisation de R et de plm pour estimer les modèles à effets fixes qui incluent les interactions avec le temps

16

J'utilise plm()pour estimer les modèles à effets fixes du formulaire

y ~ x + time + time:fixed_trait

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.

user697473
la source
1
À partir de la plmversion 1.6-4, ce n'est plus un problème car les coefficients alisés sont simplement supprimés.
Helix123

Réponses:

9

Essayez d'utiliser

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

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):

fe4 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp, effect = "twoway")
Charlie
la source
Étant donné que cela *doit être utilisé au lieu de :, existe-t-il un moyen de supprimer la sortie des coefficients de non-interaction?
Arthur