Запуск нескольких регрессий с кластеризацией в R - PullRequest
1 голос
/ 17 апреля 2020

Обычно я использую следующий код, когда мне нужно запустить несколько регрессий.

outcomes <- colnames(df[,1:10]) #specifies column names for variables
form <- paste(outcomes, "~ covariate1 + covariate2)
model <- form %>%
  set_names(outcomes) %>%
  map(~lm(.x, data = df))
map(model, summary)

Это дает мне вывод для регрессии всех переменных результата на ковариате1 + ковариате2.

Я пытаюсь сделать то же самое, но с кластерными надежными стандартными ошибками. Я использовал lm_robust из пакета estimatr. Это изменение, которое я сделал в приведенном выше коде.

outcomes <- colnames(df[,1:10]) 
form <- paste(outcomes, "~ covariate1 + covariate2)
model <- form %>%
  set_names(outcomes) %>%
  map(~lm_robust(.x, data = df, clusters = id))
map(model, summary)

Как видите, я изменил lm на lm_robust и добавил аргумент, который указывает уровень, на котором я хочу кластеризоваться. Почему это не работает, когда приведенный выше код работает? Что бы вы предложили изменить, чтобы этот код работал?

Я также открыт для совершенно новых способов одновременной работы кластерной и некластерной регрессий.

1 Ответ

4 голосов
/ 17 апреля 2020

Основное различие между lm и lm_robust заключается в первом аргументе, lm принимает объект формулы или объект, который является принудительным для одного.

library(estimatr)
library(purrr)

Таким образом, передача объекта формулы в виде строки работает с lm

lm("mpg~gear+carb", data = mtcars)

, что совпадает с

lm(mpg~gear+carb, data = mtcars)

, но это не работает с lm_robust

lm_robust("mpg~gear+carb", data = mtcars)

Ошибка в формуле [[2]]: нижний индекс вне границ

Требуется объект формулы только .

lm_robust(mpg~gear+carb, data = mtcars)
#            Estimate Std. Error t value Pr(>|t|) CI Lower CI Upper DF
#(Intercept)     7.28      2.984    2.44 2.11e-02     1.17    13.38 29
#gear            5.58      0.933    5.98 1.69e-06     3.67     7.48 29
#carb           -2.75      0.366   -7.53 2.64e-08    -3.50    -2.01 29

Поэтому измените строку на объект формулы в вашем коде, и он должен работать.

model <- form %>%
         set_names(outcomes) %>%
         map(~lm_robust(as.formula(.x), data = df, clusters = id))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...