使用 R 和 plm 估计包含与时间相互作用的固定效应模型

机器算法验证 r
2022-01-20 12:41:10

plm()用来估计形式的固定效应模型

y ~ x + time + time:fixed_trait

其中fixed_trait是一个变量,在个体之间变化,但在个体内部是恒定的。

交互的要点timefixed_trait允许fixed_trait随时间变化的效果。(我从 Paul Allison 最近关于固定效果的小册子在这里工作。附有引文。)

plm()可以轻松估计此类模型的系数和标准误差。summary.plm()无法为这些模型计算 R^2。这是我想解决的问题。

这是一个最小的例子:

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

深入研究plm:::summary.plm使问题更加清晰。要计算 R^2,plm请尝试这样做:

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

这不起作用,因为仅包括beta的估计值,同时还包括 的列换句话说,包含的列,并且不可能同时估计这两个系数。year1year0:constXyear1:constXyear0:constyear1:const

一种解决方法是在将交互项输入公式之前“手动”创建交互项:

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

但这很麻烦。除此之外,我能做些什么来summary.plm使用这些模型吗?

===

Allison, Paul D. 2009。固定效应回归模型。加利福尼亚州洛杉矶:圣人。尤其见第 19-21 页。

1个回答

尝试使用

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

反而。如果您在交互中冗余地包含时间固定效果,它甚至可以工作*(因为时间是固定效果的):

fe4 <- plm(y ~ year * const, index = c('ID', 'year'), data = tmp, effect = "twoway")