fazer R reportar R quadrado ajustado e teste F na saída com erros padrão robustos

Aug 18 2020

Estimei um modelo de regressão linear usando lm(x~y1 + y1 + ... + yn)e para contrariar a heterocedasticidade presente, fiz R estimar os erros padrão robustos com

coeftest(model, vcov = vcovHC(model, type = "HC0"))

Eu sei que (robusto) R ao quadrado e a estatística F do modelo "normal" ainda são válidos, mas como faço para que R os relate na saída? Eu quero fundir várias saídas de regressão de especificações diferentes junto com stargazere ficaria muito caótico se eu tivesse que inserir o modelo não robusto junto apenas para obter essas estatísticas. Idealmente, quero inserir uma saída de regressão em stargazerque contenha essas estatísticas, importando-as para seu framework.

Agradecemos antecipadamente por todas as respostas

Respostas

2 Petr Aug 18 2020 at 20:44

É assim que se deve proceder. Você precisa usar o objeto modelo compatível com o stargazer como modelo e, em seguida, fornecer uma lista com os erros padrão a serem usados:

library(dplyr)
library(lmtest)
library(stargazer)


# Basic Model ---------------------------------------------------------------------------------

model1 <- lm(hp ~ factor(gear) + qsec + cyl + factor(am), data = mtcars)
summary(model1)


# Robust standard Errors ----------------------------------------------------------------------

model_robust <- coeftest(model1, vcov = vcovHC(model1, type = "HC0"))

# Get robust standard Errors (sqrt of diagonal element of variance-covariance matrix)
se = vcovHC(model1, type = "HC0") %>% diag() %>% sqrt()

stargazer(model1, model1, 
          se = list(NULL, se), type = 'text')

Usando esta abordagem, você pode usar o Stargazer mesmo para objetos de modelo que não são suportados. Você só precisa de coeficientes, erros padrão e valores-p como vetores. Então você pode 'inserir mecanicamente' até mesmo modelos sem suporte.

Uma última nota. Você está correto ao afirmar que, uma vez que a heteroscedasticidade está presente, o Rsquared ainda pode ser usado. No entanto, o teste F geral, bem como os testes t, NÃO são mais válidos.

1 Vincent Aug 18 2020 at 07:26

Não tenho uma solução com stargarzer, mas tenho algumas alternativas viáveis ​​para tabelas de regressão com erros padrão robustos:

Opção 1

Use o modelsummarypacote para fazer suas tabelas.

tem um statistic_overrideargumento que permite fornecer uma função que calcula uma matriz de covariância de variância robusta (por exemplo sandwich::vcovHC,.

library(modelsummary)
library(sandwich)

mod1 <- lm(drat ~ mpg, mtcars)
mod2 <- lm(drat ~ mpg + vs, mtcars)
mod3 <- lm(drat ~ mpg + vs + hp, mtcars)
models <- list(mod1, mod2, mod3)

modelsummary(models, statistic_override = vcovHC)

Nota 1: a imagem acima é de uma tabela HTML, mas o modelsummarypacote também pode salvar tabelas Word, LaTeX ou markdown.

Nota 2: eu sou o autor deste pacote, portanto, trate isso como uma visão potencialmente tendenciosa.

opção 2

Use a estimatr::lm_robustfunção, que inclui automaticamente erros padrão robustos. Acredito que estimatrseja apoiado por stargazer, mas sei que é apoiado por modelsummary.

library(estimatr)

mod1 <- lm_robust(drat ~ mpg, mtcars)
mod2 <- lm_robust(drat ~ mpg + vs, mtcars)
mod3 <- lm_robust(drat ~ mpg + vs + hp, mtcars)
models <- list(mod1, mod2, mod3)

modelsummary(models)