【问题标题】:Fixed Effects Regression with Interaction Term Causes Error带有交互项的固定效应回归导致错误
【发布时间】:2013-05-19 02:09:09
【问题描述】:

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

【问题讨论】:

    标签: r plm


    【解决方案1】:

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

    Read more here on the same problem at stackexchange

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

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

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

    LoadxDischarge <- LoadArea*DischargeArea 
    

    【讨论】:

      【解决方案2】:

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

      对于由于共线性而未估计的变量,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 行是贬低。另一个stack overflow post 描述了我在上面详细使用的data.table 的操作。

      上面代码的输出将是:

      > 
                    demeaned_var1 demeaned_var2
      demeaned_var1             1             1
      demeaned_var2             1             1
      

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

      【讨论】:

      • 我也有同样的问题。但在我的模型中,我有 41 个自变量。我如何知道哪些导致多重共线性?
      • 如果你有 data.table (这是一个很棒的包),你可以通过手动贬低你的所有变量然后计算相关表来轻松地做到这一点。类似于我上面粘贴的内容。
      • 一段时间以来,plm 包有两个函数来检测线性依赖:detect_lin_depalias。请务必阅读他们的文档,因为数据转换后的线性相关性(例如内部/贬低转换)可能很难发现。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-03-20
        • 2021-06-16
        • 2021-12-25
        • 2015-04-22
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        • 2021-07-13
        • 1970-01-01
        相关资源
        最近更新 更多