fare R report aggiustato R quadrato e F-test in output con robusti errori standard
Ho stimato un modello di regressione lineare utilizzando lm(x~y1 + y1 + ... + yn)
e per contrastare l'attuale eteroschedasticità ho fatto stimare a R gli errori standard robusti con
coeftest(model, vcov = vcovHC(model, type = "HC0"))
So che R quadrato (robusto) e la statistica F del modello "normale" sono ancora validi, ma come faccio a fare in modo che R li segnali nell'output? Voglio fondere insieme diversi output di regressione da specifiche diverse stargazer
e diventerebbe molto caotico se dovessi inserire il modello non robusto solo per ottenere queste statistiche. Idealmente, voglio inserire un output di regressione stargazer
che contiene queste statistiche, importandolo così nel loro framework.
Grazie in anticipo per tutte le risposte
Risposte
Ecco come procedere. È necessario utilizzare un oggetto modello supportato da stargazer come modello e quindi è possibile fornire un elenco di errori standard da utilizzare:
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 questo approccio puoi usare stargazer anche per oggetti modello che non sono supportati. Hai solo bisogno di coefficienti, errori standard e valori p come vettori. Quindi puoi "inserire meccanicamente" anche i modelli non supportati.
Un'ultima nota. Hai ragione sul fatto che una volta che l'eteroschedasticità è presente, Rsquared può ancora essere utilizzato. Tuttavia, i test F complessivi e i test t NON sono più validi.
Non ho una soluzione stargarzer
, ma ho un paio di valide alternative per le tabelle di regressione con robusti errori standard:
opzione 1
Usa il modelsummary
pacchetto per creare le tue tabelle.
ha un statistic_override
argomento che consente di fornire una funzione che calcola una matrice robusta di covarianza della varianza (ad es 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: lo screenshot qui sopra proviene da una tabella HTML, ma il modelsummary
pacchetto può anche salvare tabelle Word, LaTeX o markdown.
Nota 2: sono l'autore di questo pacchetto, quindi trattalo come una vista potenzialmente parziale.
opzione 2
Utilizzare la estimatr::lm_robust
funzione, che include automaticamente errori standard robusti. Credo che estimatr
sia supportato da stargazer
, ma so che è supportato da 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)