faire rapport R ajusté R au carré et test F en sortie avec des erreurs standard robustes
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 stargazer
et 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 stargazer
qui contient ces statistiques, l'important ainsi dans leur cadre.
Merci d'avance pour toutes les réponses
Réponses
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.
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 modelsummary
package pour créer vos tableaux.
il a un statistic_override
argument 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 modelsummary
package 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_robust
fonction, qui inclut automatiquement des erreurs standard robustes. Je pense que cela estimatr
est 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)