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

Sas*_*ras 6 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
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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

在这里阅读更多关于stackexchange的相同问题

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

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

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

LoadxDischarge <- LoadArea*DischargeArea 
Run Code Online (Sandbox Code Playgroud)


mmg*_*mgm 4

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

对于由于共线性而未估计的变量,lm 命令会自动将 NA 放入 beta 向量中,但 PLM 不会。

当您拥有 LoadArea*DischargeArea 时,PLM 会将三个变量添加到您的模型中:

LoadArea + DischargeArea + LoadArea:DischargeArea
Run Code Online (Sandbox Code Playgroud)

在那之后,PLM 就会贬低他们。

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

as.factor(Laycan.Day.Diff)
Run Code Online (Sandbox Code Playgroud)

在你的情况下,我会尝试在没有因素的情况下估计模型。如果有效,您就知道导致问题的因素。如果遇到这种情况,您可以将每个因素转换为显式 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])
Run Code Online (Sandbox Code Playgroud)

第5行是贬义。另一篇堆栈溢出帖子详细描述了我上面使用的 data.table 的操作。

上面代码的输出将是:

> 
              demeaned_var1 demeaned_var2
demeaned_var1             1             1
demeaned_var2             1             1
Run Code Online (Sandbox Code Playgroud)

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