【问题标题】:Error computing Robust Standard errors in Panel regression model (plm,R)面板回归模型 (plm,R) 中的稳健标准误差计算误差
【发布时间】:2014-05-02 09:56:58
【问题描述】:

我正在使用 plm 库来运行固定效应回归,并使用三明治、lmtest 库来计算稳健的标准误差。我运行回归没有问题,但在某些情况下,当我去计算标准错误时,我得到以下错误:

library(plm)
library(sandwich)
library(lmtest)

fe_reg <- plm(y ~ x + I(x^2)+factor(date), data=reg_data, index=c("id","date"), model="within")
coeftest(fe_reg, vcov.=vcovHC(fe_reg, type="HC1"))

RRuntimeError: Error in solve.default(crossprod(demX))
  system is computationally singular: reciprocal condition number = 1.84726e-25

我在计算系数或“正常”标准误差(即同方差)时没有任何问题。此外,当我省略二次项时,计算稳健标准误差也没有问题:

fe_reg <- plm(y ~ x +factor(date), data=reg_data, index=c("id","date"), model="within")  

有人知道发生了什么吗?如果设计矩阵是奇异的,那么就不应该计算系数,所以我不明白计算标准误差时问题出在哪里。

谢谢!

【问题讨论】:

    标签: r standard-error robust plm


    【解决方案1】:

    如果我没记错的话,plm 不是很冗长。我认为可以有一个奇异矩阵,但 plm 不会抱怨。 lm 通常更冗长。所以试试

     lm_mod1 <- lm(y ~ x + I(x^2)+factor(date), data=reg_data)
     summary(lm_mod1)
    

    lm 将在其摘要输出中告诉您计算一个系数是否有问题(系数为表中的NA,输出顶部也应有注释)。 编辑:在这种情况下,lm 的摘要输出顶部的注释应为“系数:(1 由于奇异性而未定义)”。

    编辑 coeftest 不起作用还有另一种可能: 如果您的 model.matrix 包含非常大的值以及非常小的值,solve 可能无法通过 vcovHC 函数中的计算来求解线性方程组。因此,如果是这种情况,请查看model.matrix(y ~ x + I(x^2)+factor(date), data=reg_data)。如果是这样,请尝试重新调整一些变量(例如,将 oder 除以 100 或 1000 [也 log() 有时有意义)。注意,系数的解释会随着尺度的变化而变化!

    【讨论】:

    • 摘要输出顶部的注释应为“系数:(1 由于奇异性而未定义)”。
    • 是的,很可能存在奇点,虽然plm()summary() 工作正常,但vcovHC() 可能会失败。
    • addendum: plm's vcovHC() now (development version) 像plm()summary() 一样处理奇点:drop and continue,所以应该解决最初的问题。
    • 附录 2:plm 的官方 CRAN 版本 (1.6-4) 现在已合并。
    猜你喜欢
    • 2020-03-15
    • 2011-05-24
    • 2022-01-07
    • 2021-03-04
    • 1970-01-01
    • 2016-12-16
    • 2020-12-22
    • 2012-03-09
    • 2015-02-06
    相关资源
    最近更新 更多