fare R report aggiustato R quadrato e F-test in output con robusti errori standard

Aug 18 2020

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 stargazere diventerebbe molto caotico se dovessi inserire il modello non robusto solo per ottenere queste statistiche. Idealmente, voglio inserire un output di regressione stargazerche contiene queste statistiche, importandolo così nel loro framework.

Grazie in anticipo per tutte le risposte

Risposte

2 Petr Aug 18 2020 at 20:44

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.

1 Vincent Aug 18 2020 at 07:26

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 modelsummarypacchetto per creare le tue tabelle.

ha un statistic_overrideargomento 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 modelsummarypacchetto 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_robustfunzione, che include automaticamente errori standard robusti. Credo che estimatrsia 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)