Подходят модели с устойчивыми стандартными ошибками - PullRequest
2 голосов
/ 25 апреля 2019

Я использую следующий код R для запуска нескольких моделей линейной регрессии и извлечения результатов в фрейм данных:

library(tidyverse)
library(broom)

data <- mtcars
outcomes <- c("wt", "mpg", "hp", "disp")
exposures <- c("gear", "vs", "am")

models <- expand.grid(outcomes, exposures) %>%
group_by(Var1) %>% rowwise() %>%
summarise(frm = paste0(Var1, "~factor(", Var2, ")")) %>%
group_by(model_id = row_number(),frm) %>%
do(tidy(lm(.$frm, data = data))) %>%
mutate(lci = estimate-(1.96*std.error),
     uci = estimate+(1.96*std.error))

Как я могу изменить свой код, чтобы использовать устойчивые стандартные ошибки, подобные STATA?

* example of using robust standard errors in STATA
regress y x, robust

1 Ответ

3 голосов
/ 25 апреля 2019

Подробное обсуждение устойчивых стандартных ошибок в моделях lm представлено на stackexchange .

Вы можете обновить свой код следующим образом:

library(sandwich)

models <- expand.grid(outcomes, exposures) %>%
 group_by(Var1) %>% rowwise() %>%
 summarise(frm = paste0(Var1, "~factor(", Var2, ")")) %>%
 group_by(model_id = row_number(),frm) %>%
 do(cbind(
  tidy(lm(.$frm, data = data)),
  robSE = sqrt(diag(vcovHC(lm(.$frm, data = data), type="HC1"))) )
 ) %>%
 mutate(
  lci  = estimate - (1.96 * std.error), 
  uci  = estimate + (1.96 * std.error),
  lciR = estimate - (1.96 * robSE),
  uciR = estimate + (1.96 * robSE)
 )

Важная строка такова:

sqrt(diag(vcovHC(lm(.$frm, data = data), type="HC1"))) )

Функция vcovHC возвращает ковариационную матрицу.Вам нужно извлечь дисперсию по диагонали diag и взять вычислить квадратный корень sqrt.

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