具有交互项的固定效果回归导致错误

时间:2013-05-23 15:57:36

标签: r plm

我正在尝试估算一个面板数据集,其中包含一个表示路线的地理区域(LoadArea,DischargeArea)的交互项。使用固定效果规范时,它不喜欢交互项(LoadArea * DischargeArea),并在汇总回归时产生以下错误:

mult_fe<-plm(log(DayRate)~LoadArea *DischargeArea + factor(Laycan.Day.Diff) + CapUtil + Age
+ I(Age^2) + WFRDWT + lag_BDTI, data=mult_reg1,model="within");


summary(mult_fe)
Error in crossprod(t(X), beta) : non-conformable arguments

这在使用lm函数替换plm的正常OLS回归中工作正常。 问题是为什么它不适用于我的模型?

3 个答案:

答案 0 :(得分:5)

请注意plm()一直都很好,它的summary.plm()函数坏了!深入研究该函数揭示了计算R ^ 2的部分的麻烦。

Read more here on the same problem at stackexchange

快速而不那么优雅的解决方法包括:

(1)用LoadArea替换LoadArea:DischargeArea * DischargeArea

(2)手动创建单独的交互变量

LoadxDischarge <- LoadArea*DischargeArea 

答案 1 :(得分:4)

这是变量之间共线性的问题。

lm命令自动将NAs放在β矢量中,用于因共线性而未估计的变量,但PLM不会。

当你有LoadArea * DischargeArea PLM时,你的模型会有三个变量:

LoadArea + DischargeArea + LoadArea:DischargeArea

之后,PLM会贬低他们。

在这种情况下,如果没有关于您的数据的进一步信息,我猜测其中一个变量与其中一个因素水平完全共线:

as.factor(Laycan.Day.Diff)

在你的情况下,我会尝试估计没有因子的模型。如果它有效,您就会知道导致问题的因素。如果是这样,您可以将每个因子转换为显式的0/1假人,并逐个添加它们,直到您了解问题的来源。

要确定哪些变量是共线的,您可以尝试以下方法:

require(data.table)
tmp      <- data.table(var1=1:10,var2=55:64,userid=rep(c(1,2),5))
cols     <- c('var1','var2')
newnames <- c('demeaned_var1','demeaned_var2')
tmp[,(newnames):=.SD-lapply(.SD,mean),.SDcols=cols,by=userid]
cor(tmp[,newnames,with=F])

第5行是贬低。另一个stack overflow post描述了我在上面详细使用的data.table的操作。

上面代码的输出将是:

> 
              demeaned_var1 demeaned_var2
demeaned_var1             1             1
demeaned_var2             1             1

这将告诉你哪些贬低的变量是完全共线的。

答案 2 :(得分:0)

至少获得标准错误等的方法是使用

if