Как организовать список моделей для Stargazer? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть большой набор данных, в котором я хочу разбить на 13 частей (по Subsetor). В каждом из них я запускаю 4 разных plm, меняя только зависимую переменную.

Я также хотел бы использовать кластерные робастные стандартные ошибки, используя coeftest и vcovHC. Вот некоторые примеры данных:

library(tidyverse)
library(lmtest)
library(sandwich)
library(broom)

df <- structure(list(Subsetor = c("Footwear", "Footwear", "Machinery", 
"Machinery"), mmc = c(31028, 22902, 33013, 35017), MassaSalarial_SM_Real = c(0, 
0, 0, 2758.78039259859), Ano = c(1990, 1990, 1991, 1991, 1992), Vinculos = c(0, 0, 0, 536), Estab = c(0, 
0, 1, 8), salario_real_capita_SM = c(NaN, NaN, NaN, 5.14697834440035
), tarifa_peso_VAB_1990 = c(0.193475, 0.5756, 0.258589287604088, 
0.258589287604088)), row.names = c(NA, -4L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), groups = structure(list(Subsetor = c("Footwear", 
"Machinery"), .rows = list(1:2, 3:4)), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE))

Сначала я запустил регрессии с учетом каждой зависимой переменной для каждого типа в Subsetor:

Model_Vinculos <- df %>%
  mutate(salario_real_capita_SM = salario_real_capita_SM %>% 
           replace(., is.na(.), 0)) %>%
  group_by(Subsetor) %>%
  nest() %>%
  mutate(model = map(data, 
                     ~plm(log(Vinculos + 1) ~ log(tarifa_peso_VAB_1990),
                          data = . ,
                          model = 'within',
                          effects = 'twoways',
                          index = c('mmc', 'Ano'))),
         erros.padrao = map(model, ~coeftest(., vcovHC(., type = 'HC0', 
                                                       cluster = 'group'))),
         inf = map(model, broom::tidy)) %>%
  select(Subsetor, inf, erros.padrao, model)

Я повторил этот процесс, создав 3 других объекта : Model_Estab, Model_MassaSalarial и Model_Salario.

После этого я связал их, а также извлек желаемую информацию, а именно коэффициенты и устойчивые стандартные ошибки:

Models_Subsetor <- list(
  Estabelecimentos = Model_Estab,
  Massa_Salarial = Model_MassaSalarial,
  Remuneracao = Model_Salario,
  Vinculos = Model_Vinculos
) %>%
  bind_rows(.id  = 'id') %>%
  select(Subsetor, inf, erros.padrao, id) %>%
  unnest(cols = c(inf)) %>%
  select(Subsetor, estimate, erros.padrao, id) %>%
  mutate(erros.padrao = map(erros.padrao, broom::tidy)) %>%
  mutate(se = erros.padrao %>% map_dbl(~ .x[['std.error']])) %>%
  select(id, Subsetor, estimate, se) %>%
  gather(estimate:se, key = 'key', value = 'value') %>%
  spread(id, value) 

Теперь я хотел бы использовать эти результаты с stargazer. Простое печатание Models_Subsetor не было бы идеальным, поскольку таблица не была бы точно отформатирована как таблица регрессии.

Поэтому мой вопрос заключается в том, как проще всего получить таблицу звездного наблюдателя, которая похожа на эту. один, но это похоже на таблицу регрессии (со звездочками в соответствии с p-значениями, удалением частей, где написано 'se', помещением стандартных ошибок в скобках, что позволяет мне добавлять строки с некоторыми другими пользовательскими наблюдениями и т. д.).

...