面板回归模型中稳健标准误差的误差计算(plm,R)



我使用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")  

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

谢谢!

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

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

lm将在它的总结输出中告诉您是否有计算某个系数的问题(表中的系数为NA,输出顶部也应该有注释)。Edit:在本例中,lm的摘要输出顶部的注释应该是"Coefficients: (1 not defined because of singularity)"。

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

最新更新