我plm()
用来估计形式的固定效应模型
y ~ x + time + time:fixed_trait
其中fixed_trait
,变量在个体之间会有所不同,但在个体内部却是恒定的。
与之互动time
的目的fixed_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
仅包含year1
和的估算值year0:const
,同时X
还包含的列year1:const
。换句话说,X
包括列两个year0:const
和year1:const
,这是无法估计这两个系数。
一种解决方法是在将其输入公式之前,先创建“手工”交互项:
tmp$yearXconst <- tmp$year*tmp$const
fe3 <- plm(y ~ year + yearXconst, index=c('ID', 'year'), data=tmp)
summary(fe3) # works fine
但这很麻烦。除此之外,我可以做些什么来summary.plm
使用这种模型?
===
艾莉森,保罗D。2009年。固定效应回归模型。加利福尼亚州洛杉矶:Sage。尤其请参阅第19-21页。
plm
版本1.6-4 开始,这不再是问题,因为简单地降低了系数系数。