8

我正在尝试使用表示路线的地理区域(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 回归中工作正常。问题是为什么它不适用于我的模型?

4

3 回答 3

5

请注意 plm() 一直运行良好,它的 summary.plm() 函数非常糟糕!深入研究函数揭示了计算 R^2 部分的问题。

在 stackexchange 上阅读更多关于相同问题的信息

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

(1) 将 LoadArea:DischargeArea 替换为 LoadArea*DischargeArea

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

LoadxDischarge <- LoadArea*DischargeArea 
于 2015-06-03T18:44:04.290 回答
4

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

对于由于共线性而未估计的变量,lm 命令会自动将 NA 放入 beta 向量中,但 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 行是贬义词。这篇其他堆栈溢出帖子详细描述了我在上面使用的 data.table 的操作。

上面代码的输出将是:

> 
              demeaned_var1 demeaned_var2
demeaned_var1             1             1
demeaned_var2             1             1

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

于 2013-06-10T09:48:07.933 回答
0

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

library("sandwich")
library("lmtest")
coeftest(mult_fe)
于 2016-06-14T21:17:00.340 回答