Schätzen Sie mithilfe von R und plm Modelle mit festen Effekten, die Wechselwirkungen mit der Zeit enthalten

16

Ich verwende plm(), um Modelle der Form mit festen Effekten zu schätzen

y ~ x + time + time:fixed_trait

wo fixed_traitist eine Variable, die zwischen Individuen variiert, aber innerhalb von Individuen konstant ist.

Der Punkt , der in Wechselwirkung timemit fixed_traitist die Wirkung der erlauben fixed_traitvariieren über die Zeit hinweg. (Ich arbeite hier aus Paul Allisons kürzlich erschienenem Heft über festgelegte Effekte. Zitieren angehängt.)

plm()Probleme beim Schätzen von Koeffizienten und Standardfehlern für solche Modelle. Aber summary.plm()nicht R ^ 2 für diese Modelle berechnen. Dies ist das Problem, das ich beheben möchte.

Hier ist ein minimales Beispiel:

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

Das Nachforschen plm:::summary.plmmacht das Problem klarer. Um R ^ 2 zu berechnen, plmversuchen Sie Folgendes:

beta <- coef(fe2)
X <- model.matrix(fe2)
crossprod(t(X), beta)

Dies funktioniert nicht, da betanur Schätzungen für year1und year0:constund Xeine Spalte für enthalten sind year1:const. Mit anderen Worten, Xenthält Spalten für beide year0:constund year1:const, und es ist unmöglich, beide dieser Koeffizienten zu schätzen.

Eine Problemumgehung besteht darin, den Interaktionsbegriff "von Hand" zu erstellen, bevor Sie ihn in die Formel eingeben:

tmp$yearXconst <- tmp$year*tmp$const
fe3 <- plm(y ~ year + yearXconst, index=c('ID', 'year'), data=tmp)
summary(fe3)  # works fine

Das ist aber umständlich. Gibt es noch etwas, was ich tun kann, um summary.plmmit solchen Modellen zu arbeiten?

===

Allison, Paul D. 2009. Regressionsmodelle mit festen Effekten. Los Angeles, CA: Salbei. Siehe insbesondere Seiten 19-21.

user697473
quelle
1
Ab plmVersion 1.6-4 ist dies kein Problem mehr, da abgestimmte Koeffizienten einfach weggelassen werden.
Helix123

Antworten:

9

Versuchen Sie es mit

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

stattdessen. Es funktioniert sogar, wenn Sie redundant zeitlich festgelegte Effekte in die *Interaktion einbeziehen (da die Zeit zeitlich festgesetzt wird):

fe4 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp, effect = "twoway")
Charlie
quelle
Gibt es eine Möglichkeit, die Ausgabe von Nicht-Interaktionskoeffizienten zu unterdrücken, da *dies anstelle von verwendet :werden muss?
Arthur