hacer que R informe R cuadrado ajustado y prueba F en la salida con errores estándar robustos
He estimado un modelo de regresión lineal usando lm(x~y1 + y1 + ... + yn)
y para contrarrestar la heterocedasticidad actual hice que R estimara los errores estándar robustos con
coeftest(model, vcov = vcovHC(model, type = "HC0"))
Sé que el estadístico R cuadrado (robusto) y F del modelo "normal" siguen siendo válidos, pero ¿cómo hago para que R los informe en la salida? Quiero fusionar varios resultados de regresión de diferentes especificaciones junto con stargazer
y sería muy caótico si tuviera que ingresar el modelo no robusto solo para obtener estas estadísticas. Idealmente, quiero ingresar una salida de regresión stargazer
que contenga estas estadísticas, importando así a su marco.
Gracias de antemano por todas las respuestas.
Respuestas
Así es como se hace. Debe usar el objeto modelo que es compatible con stargazer como plantilla y luego puede proporcionar una lista con los errores estándar que se utilizarán:
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')
Con este enfoque, puede usar Stargazer incluso para objetos modelo que no son compatibles. Solo necesita coeficientes, errores estándar y valores p como vectores. Entonces puede 'insertar mecánicamente' incluso modelos no compatibles.
Una última nota. Tiene razón en que una vez presente la heterocedasticidad, aún se puede usar Rsquared. Sin embargo, la prueba F general y las pruebas t ya no son válidas.
No tengo una solución con stargarzer
, pero tengo un par de alternativas viables para tablas de regresión con errores estándar robustos:
Opción 1
Usa el modelsummary
paquete para hacer tus tablas.
tiene un statistic_override
argumento que le permite proporcionar una función que calcula una matriz de varianza covarianza robusta (por ejemplo, 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: La captura de pantalla anterior es de una tabla HTML, pero el modelsummary
paquete también puede guardar tablas de Word, LaTeX o Markdown.
Nota 2: Soy el autor de este paquete, así que trate esto como una vista potencialmente sesgada.
opcion 2
Utilice la estimatr::lm_robust
función, que incluye automáticamente errores estándar robustos. Creo que estimatr
lo respalda stargazer
, pero sé que lo respalda 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)