Почему стандартная ошибка lm_robust () HC3 меньше стандартной ошибки coeftest () HC0? - PullRequest
1 голос
/ 15 апреля 2020

Я использую lm_robust из пакета 'estimatr' для модели с фиксированным эффектом, включая устойчивые стандартные ошибки HC3. Мне пришлось переключиться с vcovH C (), потому что моя выборка данных была слишком большой, чтобы обрабатываться ею.

с использованием следующей строки для регрессии:

lm_robust(log(SPREAD) ~ PERIOD, data = dat, fixed_effects = ~ STOCKS + TIME, se_type = "HC3")

Код работает нормально, а коэффициенты такие же, как при использовании фиксированных эффектов из пакета plm. Поскольку я не могу использовать coeftest для оценки стандартных ошибок HC3 с выходом plm из-за слишком большой выборки данных, я сравнил оценку HC3 lm_robust с HC1 coeftest(model, vcov= vcovHC(model, type = HC1)). В результате стандартная ошибка HC3 lm_robust намного меньше, чем HC1 от Coeftest.

Есть ли у кого-нибудь объяснение, поскольку HC3 должен быть более строгим, чем HC1. Я ценю любые рекомендации и решения.

EDIT модель, используемая для coeftest:

plm(log(SPREAD) ~ PERIOD, data = dat, index = c("STOCKS", "TIME"), effect = "twoway", method = "within")

1 Ответ

2 голосов
/ 16 апреля 2020

Похоже, что метод vcovHC() для plm автоматически оценивает устойчивые к кластеру стандартные ошибки, а для lm_robust() - нет. Следовательно, оценка HC1 стандартной ошибки для plm будет выглядеть завышенной по сравнению с lm_robust (lm в этом отношении).

Использование некоторых игрушечных данных:

library(sandwich)
library(tidyverse)
library(plm)
library(estimatr)
library(lmtest)

set.seed(1981)
x <- sin(1:1000)
y <- 1 + x + rnorm(1000)
f <- as.character(sort(rep(sample(1:100), 10)))
t <- as.character(rep(sort(sample(1:10)), 100))

dat <- tibble(y = y, x = x, f = f, t = t)

lm_fit <- lm(y ~ x + f + t, data = dat)
plm_fit <- plm(y ~ x, index = c("f", "t"), model = "within", effect = "twoways", data = dat)
rb_fit <- lm_robust(y ~ x, fixed_effects = ~ f + t, data = dat, se_type = "HC1", return_vcov = TRUE)

sqrt(vcovHC(lm_fit, type = "HC1")[2, 2])
#> [1] 0.04752337
sqrt(vcovHC(plm_fit, type = "HC1"))
#>            x
#> x 0.05036414
#> attr(,"cluster")
#> [1] "group"
sqrt(rb_fit$vcov)
#>            x
#> x 0.04752337

rb_fit <- lm_robust(y ~ x, fixed_effects = ~ f + t, data = dat, se_type = "HC3", return_vcov = TRUE)
sqrt(vcovHC(lm_fit, type = "HC3")[2, 2])
#> [1] 0.05041177
sqrt(vcovHC(plm_fit, type = "HC3"))
#>            x
#> x 0.05042142
#> attr(,"cluster")
#> [1] "group"
sqrt(rb_fit$vcov)
#>            x
#> x 0.05041177

Похоже, что в этих двух пакетах нет эквивалентных устойчивых к кластеру стандартных типов ошибок. Однако SE становятся ближе при указании устойчивых к кластеру SE в lm_robust():

rb_fit <- lm_robust(y ~ x, fixed_effects = ~ f + t, clusters = f, data = dat, se_type = "CR0")
summary(rb_fit)
#> 
#> Call:
#> lm_robust(formula = y ~ x, data = dat, clusters = f, fixed_effects = ~f + 
#>     t, se_type = "CR0")
#> 
#> Standard error type:  CR0 
#> 
#> Coefficients:
#>   Estimate Std. Error t value  Pr(>|t|) CI Lower CI Upper DF
#> x    0.925    0.05034   18.38 1.133e-33   0.8251    1.025 99
#> 
#> Multiple R-squared:  0.3664 ,    Adjusted R-squared:  0.2888
#> Multiple R-squared (proj. model):  0.3101 ,  Adjusted R-squared (proj. model):  0.2256 
#> F-statistic (proj. model): 337.7 on 1 and 99 DF,  p-value: < 2.2e-16
coeftest(plm_fit, vcov. = vcovHC(plm_fit, type = "HC1"))
#> 
#> t test of coefficients:
#> 
#>   Estimate Std. Error t value  Pr(>|t|)    
#> x 0.925009   0.050364  18.366 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Создано в 2020-04-16 пакетом Представить (v0.3.0 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...