首页 > 解决方案 > 如何为观星者组织模型列表?

问题描述

我有一个大型数据集,我想将其分成 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_EstabModel_MassaSalarialModel_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”的部分,将标准错误放在括号内,允许我添加带有其他一些自定义观察值的行等)。

标签: rstargazerplm

解决方案


推荐阅读