web-dev-qa-db-fra.com

Régression avec des erreurs standard corrigées par hétéroskédasticité

Je voudrais trouver l'implémentation R qui ressemble le plus à la sortie Stata pour ajuster une fonction de régression des moindres carrés avec des erreurs standard corrigées hétéroskédastiques. Plus précisément, je voudrais que les erreurs standard corrigées soient dans le "résumé" et que je ne doive pas faire de calculs supplémentaires pour ma première série de tests d'hypothèse. Je recherche une solution aussi "propre" que ce que proposent Eviews et Stata.

Jusqu'à présent, en utilisant le package "lmtest", le mieux que je puisse trouver est:

model <- lm(...)
coeftest(model, vcov = hccm) 

Cela me donne la sortie que je veux, mais il ne semble pas utiliser "coeftest" pour son objectif déclaré. Je devrais également utiliser le résumé avec les erreurs standard incorrectes pour lire les statistiques R ^ 2 et F, etc. Je pense qu'il devrait exister une solution "une ligne" à ce problème étant donné la dynamique de R.

Merci

30
JJJ

Je pense que vous êtes sur la bonne voie avec coeftest dans le package lmtest. Jetez un œil au package sandwich qui inclut cette fonctionnalité et est conçu pour fonctionner main dans la main avec le package lmtest que vous avez déjà trouvé.

> # generate linear regression relationship
> # with Homoskedastic variances
> x <- sin(1:100)
> y <- 1 + x + rnorm(100)
> ## model fit and HC3 covariance
> fm <- lm(y ~ x)
> vcovHC(fm)
            (Intercept)           x
(Intercept) 0.010809366 0.001209603
x           0.001209603 0.018353076
> coeftest(fm, vcov. = vcovHC)

t test of coefficients:

            Estimate Std. Error t value  Pr(>|t|)    
(Intercept)  1.01973    0.10397  9.8081 3.159e-16 ***
x            0.93992    0.13547  6.9381 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Pour obtenir le test F, regardez la fonction waldtest():

> waldtest(fm, vcov = vcovHC)
Wald test

Model 1: y ~ x
Model 2: y ~ 1
  Res.Df Df      F    Pr(>F)    
1     98                        
2     99 -1 48.137 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Vous pouvez toujours cuisiner une fonction simple pour combiner ces deux pour vous si vous vouliez le one-liner ...

Il y a beaucoup d'exemples dans la vignette Calcul économétrique avec HC et HAC Covariance Matrix Estimators qui vient avec le paquet de sandwich de relier lmtest et sandwich pour faire ce que vous voulez.

Edit: Un one-liner pourrait être aussi simple que:

mySummary <- function(model, VCOV) {
    print(coeftest(model, vcov. = VCOV))
    print(waldtest(model, vcov = VCOV))
}

Que nous pouvons utiliser comme ceci (sur les exemples ci-dessus):

> mySummary(fm, vcovHC)

t test of coefficients:

            Estimate Std. Error t value  Pr(>|t|)    
(Intercept)  1.01973    0.10397  9.8081 3.159e-16 ***
x            0.93992    0.13547  6.9381 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Wald test

Model 1: y ~ x
Model 2: y ~ 1
  Res.Df Df      F    Pr(>F)    
1     98                        
2     99 -1 48.137 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
39
Gavin Simpson

J'ai trouvé une fonction R qui fait exactement ce que vous recherchez. Il vous donne des erreurs standard robustes sans avoir à faire de calculs supplémentaires. Vous exécutez summary() sur un lm.object et si vous définissez le paramètre robust=T il vous renvoie des erreurs standard cohérentes d'hétéroscédasticité de type Stata.

summary(lm.object, robust=T)

Vous pouvez trouver la fonction sur https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r/

10
Sandra Lopez

Il existe maintenant une solution sur une seule ligne utilisant lm_robust Du estimatr package , que vous pouvez installer à partir de CRAN install.packages(estimatr).

> library(estimatr)
> lmro <- lm_robust(mpg ~ hp, data = mtcars, se_type = "stata")
> summary(lmro)

Call:
lm_robust(formula = mpg ~ hp, data = mtcars, se_type = "stata")

Standard error type:  HC1 

Coefficients:
            Estimate Std. Error  Pr(>|t|) CI Lower CI Upper DF
(Intercept) 30.09886    2.07661 4.348e-15 25.85785 34.33987 30
hp          -0.06823    0.01356 2.132e-05 -0.09592 -0.04053 30

Multiple R-squared:  0.6024 ,   Adjusted R-squared:  0.5892 
F-statistic: 45.46 on 1 and 30 DF,  p-value: 1.788e-07

Vous pouvez également obtenir une sortie bien rangée:

> tidy(lmro)
         term    estimate std.error      p.value    ci.lower
1 (Intercept) 30.09886054 2.0766149 4.347723e-15 25.85784704
2          hp -0.06822828 0.0135604 2.131785e-05 -0.09592231
     ci.upper df outcome
1 34.33987404 30     mpg
2 -0.04053425 30     mpg

Les erreurs standard "stata" Sont par défaut des erreurs standard "HC1", qui sont les erreurs standard rob par défaut dans Stata. Vous pouvez également obtenir "classical", "HC0", "HC1", "HC2", "HC3" Et diverses erreurs standard en cluster (y compris celles qui correspondent à Stata).

2
luke.sonnet