faire rapport R ajusté R au carré et test F en sortie avec des erreurs standard robustes

Aug 18 2020

J'ai estimé un modèle de régression linéaire en utilisant lm(x~y1 + y1 + ... + yn)et pour contrer l'hétéroscédasticité actuelle, j'ai demandé à R d'estimer les erreurs standard robustes avec

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

Je sais que les statistiques R au carré (robustes) et F du modèle «normal» sont toujours valides, mais comment faire pour que R les rapporte dans la sortie? Je veux fusionner plusieurs sorties de régression de différentes spécifications avec stargazeret cela deviendrait très chaotique si je devais entrer dans le modèle non robuste juste pour obtenir ces statistiques. Idéalement, je veux entrer une sortie de régression dans stargazerqui contient ces statistiques, l'important ainsi dans leur cadre.

Merci d'avance pour toutes les réponses

Réponses

2 Petr Aug 18 2020 at 20:44

Voici comment procéder. Vous devez utiliser un objet de modèle pris en charge par stargazer comme modèle, puis vous pouvez fournir une liste avec les erreurs standard à utiliser:

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')

En utilisant cette approche, vous pouvez utiliser stargazer même pour les objets de modèle qui ne sont pas pris en charge. Vous n'avez besoin que de coefficients, d'erreurs standard et de valeurs p comme vecteurs. Ensuite, vous pouvez «insérer mécaniquement» même des modèles non pris en charge.

Une dernière note. Vous avez raison de dire qu'une fois l'hétéroscédasticité présente, Rsquared peut toujours être utilisé. Cependant, le test F global ainsi que les tests t ne sont plus valides.

1 Vincent Aug 18 2020 at 07:26

Je n'ai pas de solution avec stargarzer, mais j'ai quelques alternatives viables pour les tables de régression avec des erreurs standard robustes:

Option 1

Utilisez le modelsummarypackage pour créer vos tableaux.

il a un statistic_overrideargument vous permet de fournir une fonction qui calcule une matrice de covariance robuste de la variance (par exemple 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)

Remarque 1: La capture d'écran ci-dessus provient d'un tableau HTML, mais le modelsummarypackage peut également enregistrer des tableaux Word, LaTeX ou markdown.

Remarque 2: je suis l'auteur de ce package, veuillez donc le traiter comme une vue potentiellement biaisée.

Option 2

Utilisez la estimatr::lm_robustfonction, qui inclut automatiquement des erreurs standard robustes. Je pense que cela estimatrest soutenu par stargazer, mais je sais que cela est soutenu par 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)