固定效应回归与交互项导致误差问题。

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

在普通的OLS回归中,将plm替换为lm函数可以正常工作。问题是为什么它对我的模型不起作用?

3个回答

6
请注意,plm()一直表现良好,而是summary.plm()函数出了问题!深入研究该函数揭示了在计算R^2的部分出现的问题。 在stackexchange上阅读有关相同问题的更多信息 快速而不太优雅的解决方法包括:
(1)将LoadArea:DischargeArea替换为LoadArea * DischargeArea
(2)手动创建单独的交互变量
LoadxDischarge <- LoadArea*DischargeArea 

4

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

lm命令会自动在由于共线性而未被估计的变量的beta向量中放置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行是降级操作。另一个stackoverflow帖子详细描述了我上面使用的data.table的操作。

上面代码的输出结果将是:

> 
              demeaned_var1 demeaned_var2
demeaned_var1             1             1
demeaned_var2             1             1

这将告诉您哪些被降维的变量是完全共线的。

1
我遇到了同样的问题。但是在我的模型中,我有41个自变量。我该如何知道哪些自变量导致多重共线性? - Riccardo
如果你有data.table(这是一个很棒的包),你可以通过手动减去所有变量的均值,然后计算相关系数表来轻松完成。就像我上面粘贴的那样。 - mmgm
最近,plm包有两个函数可以检测线性依赖:detect_lin_depalias。一定要仔细阅读它们的文档,因为在数据转换之后(例如within/demeaning转换),线性依赖可能很难被发现。 - Helix123

0

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

library("sandwich")
library("lmtest")
coeftest(mult_fe)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接