在 R 中使用 vcovHC 随机效应模型 - 按时间和实体进行聚类?

问题描述 投票:0回答:1

我有一个关于不同公司几个季度的股票回报的随机效应模型。为了处理集群标准错误,我想按公司和季度使用 vcovHC 和集群。我找到了几个答案,这些答案有助于通过两个维度对常规线性模型进行聚类,但不会出现随机效应,因此请您帮助将其包括在内。

下面的代码是否适用或者您的方法是什么?

clustered_se <- vcovHC(random_model, type = "HC1", cluster = "group", group = "time")
coeftest(random_model, clustered_se)
r panel-data random-effects
1个回答
0
投票

从您的问题来看,尚不清楚您使用哪些 R 软件包。我假设您使用

plm
进行随机效应模型估计,并使用
lmtest::coeftest

许多包都带来了

vcovHC
实现。如果您使用
plm::vcovHC
,这不会给您带来双集群标准错误,请参阅文档
?plm::vcovHC
。 (参数
cluster
表示您使用
plm::vcovHC
,但另一方面,参数
group
对于
plm
´s
vcovHC
无效。)

对于基于 PLM 的方法,

plm::vcovDC
给出了 Thompson (2011) 和 Cameron 等人的聚类标准误差。 (2011),请参阅其文档。

因此,如果您的数据是季度数据(并且季度数据位于数据的时间维度中),则可以按公司和季度进行聚类。

一个示例看起来像这样(例如,双向 RE 模型):

library(plm)
data("Grunfeld")
swar <- plm(inv ~ value + capital,
            data = Grunfeld, model = "random", effect = "twoways")
dblcluster <- vcovDC(swar)
summary(swar, vcov = dblcluster)
#
#
#> Twoways effects Random Effect Model 
#>    (Swamy-Arora's transformation)
#> 
#> Note: Coefficient variance-covariance matrix supplied: dblcluster
#> 
#> Call:
#> plm(formula = inv ~ value + capital, data = Grunfeld, effect = "twoways", 
#>     model = "random")
#> 
#> Balanced Panel: n = 10, T = 20, N = 200
#> 
#> Effects:
#>                   var std.dev share
#> idiosyncratic 2675.43   51.72 0.274
#> individual    7095.25   84.23 0.726
#> time             0.00    0.00 0.000
#> theta: 0.864 (id) 0 (time) 0 (total)
#> 
#> Residuals:
#>      Min.   1st Qu.    Median   3rd Qu.      Max. 
#> -177.1700  -19.7576    4.6048   19.4676  252.7596 
#> 
#> Coefficients:
#>               Estimate Std. Error z-value  Pr(>|z|)    
#> (Intercept) -57.865377  36.373180 -1.5909    0.1116    
#> value         0.109790   0.010657 10.3021 < 2.2e-16 ***
#> capital       0.308190   0.043926  7.0161 2.281e-12 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Total Sum of Squares:    2376000
#> Residual Sum of Squares: 547910
#> R-Squared:      0.7694
#> Adj. R-Squared: 0.76706
#> Chisq: 155.664 on 2 DF, p-value: < 2.22e-16
#
#
lmtest::coeftest(swar, vcov. = dblcluster, df = Inf)
#> 
#> z test of coefficients:
#> 
#>               Estimate Std. Error z value  Pr(>|z|)    
#> (Intercept) -57.865377  36.373180 -1.5909    0.1116    
#> value         0.109790   0.010657 10.3021 < 2.2e-16 ***
#> capital       0.308190   0.043926  7.0161 2.281e-12 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
© www.soinside.com 2019 - 2024. All rights reserved.