繁体   English   中英

使用 vcovHC() 的稳健标准错误 (HC3),用于 plm object 的 coeftest

[英]Robust standard error (HC3) using vcovHC(), coeftest for plm object

我想估计一个固定效应 model 并使用具有 HC3 小样本调整的稳健方差-协方差矩阵。

对于 model 本身,我使用以下代码行:

require(plm)
require(sandwich)
require(lmtest)
require(car)
QSFE <- plm(log(SPREAD)~PERIOD, data = na.omit(QSREG), index = c("STOCKS", "TIME"), model = "within")

这很好用,现在为了计算 HC3 稳健标准误差,我使用了coeftest ,其中包含vcovHC

coeftest(x = QSFE, vcov = vcovHC(QSFE, type = "HC3", method = "arellano"))

这不起作用。 返回的错误如下:

Error in 1 - diaghat : non-numeric argument to binary operator

问题出在 vcovHC 中:当将类型设置为"HC3"时。 它使用 function hatvalues()来计算"diaghat" ,它不支持plm对象并返回错误:

Error in UseMethod("hatvalues") : 
no applicable method for 'hatvalues' applied to an object of class "c('plm', 'panelmodel')"

有谁知道,如何使用 HC3 (HC2) 估计器进行 plm。 我认为它应该取决于 vcov 中使用的 function 帽子值,因为 HC0/HC1 工作正常,因为这不需要它。

plm 开发人员在这里。 虽然效率问题在计算上很有趣,但从统计角度来看,当您拥有 300 x 300 面板时,不需要这些小样本校正。 您可以愉快地使用带有 HC0 的 go (或者如果您确实想要面板小样本校正"sss" (面板 DF)无论如何都是最好的,后者在计算上要轻得多)。

当数据大小增加时,小样本校正变得无用的事实是我们没有分配稀缺的开发人员时间来提高它们效率的主要原因。 此外,从统计的角度来看,请注意,像 White-Arellano 这样的“聚类”vcovs 的属性对于 T ~ N 来说并不理想,它们适用于 N >> T。

Lastly, one clarification re: your original post: while originally vcovHC is a generic function in the 'sandwich' package, in a panel context the specialized method vcovHC.plm from the 'plm' package is applied. 这里有更好的解释: https://www.jstatsoft.org/article/view/v082i03

plm为 plm 对象提供的方法中,在 package plm中没有hatvalues值,“帽子”一词甚至不在 plm 的源代码中。 执行coeftest时,请务必加载 package plm 此外,请务必从 CRAN 安装最新版本的 plm(当前为 2.2-3 版)。

如果您已加载 package plm ,则代码应该可以工作。 它与我机器上的玩具示例有关。 可以肯定的是,您可能希望强制使用plm提供的vcovHC

拳头,试试vcovHC(QSFE, type = "HC3", method = "arellano") 如果这给出了相同的错误,请尝试plm::vcovHC(QSFE, type = "HC3", method = "arellano")

接下来,请尝试: coeftest(QSFE, vcov.=function(x) vcovHC(QSFE, method="arellano", type="HC3"))

编辑:使用提供的数据集,很明显调度到vcovHC.plm工作正常。 Package sandwich这里不涉及。 根本原因是参数type设置为"HC3" (和其他)的 function vcovHC.plm的 memory 需求。 这也解释了您对用于数据子集的 function 的评论。

Edit2 : Memory 对vcovHC.plm的小样本调整的需求从 plm 版本 2.4-0 开始显着降低(内部 function dhat优化)并且该错误不再发生。

vcovHC(QSFE, type = "HC3", method = "arellano")
Error in 1 - diaghat : non-numeric argument to binary operator
Called from: omega(uhat, diaghat, df, G)
Browse[1]> diaghat
[1] "Error : cannot allocate vector of size 59.7 Gb\n"
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError: cannot allocate vector of size 59.7 Gb>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM