Sto usando plm()per stimare i modelli a effetti fissi del modulo
y ~ x + time + time:fixed_trait
dove fixed_traitè una variabile che varia tra gli individui ma è costante all'interno degli individui.
Il punto di interagire timecon fixed_traitè quello di consentire l'effetto di fixed_traitvariare nel tempo. (Sto lavorando qui dal recente opuscolo di Paul Allison sugli effetti fissi. Citazione allegata.)
plm()non ha problemi a stimare i coefficienti e gli errori standard per tali modelli. Ma summary.plm()non è possibile calcolare R ^ 2 per questi modelli. Questo è il problema che vorrei risolvere.
Ecco un esempio minimo:
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
L'analisi approfondita plm:::summary.plmchiarisce il problema. Per calcolare R ^ 2, plmprova a fare questo:
beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)
Questo non funziona perché betainclude solo le stime per year1e year0:const, mentre Xinclude anche una colonna per year1:const. In altre parole, Xinclude colonne per entrambi year0:conste year1:const, ed è impossibile stimare entrambi questi coefficienti.
Una soluzione alternativa consiste nel creare il termine di interazione "a mano" prima di inserirlo nella formula:
tmp$yearXconst <- tmp$year*tmp$const
fe3 <- plm(y ~ year + yearXconst, index=c('ID', 'year'), data=tmp)
summary(fe3) # works fine
Ma questo è ingombrante. A parte questo, c'è qualcosa che posso fare per summary.plmlavorare con questi modelli?
===
Allison, Paul D. 2009. Modelli di regressione ad effetti fissi. Los Angeles, California: Sage. Vedi in particolare le pagine 19-21.
plmversione 1.6-4, questo non è più un problema poiché i coefficienti modificati vengono semplicemente eliminati.