2010-12-08 8 views
27

Je voudrais trouver l'implémentation R qui ressemble le plus à la sortie de Stata pour ajuster une fonction de régression par moindres carrés avec des erreurs standard corrigées par Heteroskedastic. Spécifiquement, je voudrais que les erreurs-types corrigées soient dans le "résumé" et ne pas avoir à faire de calculs supplémentaires pour ma première série de tests d'hypothèses. Je suis à la recherche d'une solution aussi "propre" que celle qu'offre Eviews et Stata.Régression avec hétéroscédasticité Correction des erreurs-types

Jusqu'à présent, en utilisant le paquet « lmtest » le meilleur que je peux trouver est:

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

Cela me donne la sortie que je veux, mais il ne semble pas être en utilisant « coeftest » pour son but déclaré. Je devrais aussi utiliser le résumé avec les erreurs standard incorrectes pour lire les statistiques R^2 et F, etc. Je pense qu'il devrait y avoir une solution "une ligne" à ce problème étant donné que R est dynamique.

Merci

+0

Vous devez noter que vous avez besoin de voiture paquet aussi pour 'HCCM()'. Il m'a fallu quelques minutes pour savoir d'où cela venait. –

Répondre

37

Je pense que vous êtes sur la bonne voie avec coeftest dans le paquet lmtest. Jetez un oeil à la sandwich package qui comprend cette fonctionnalité et est conçu pour fonctionner de pair avec le paquet 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 de combiner ces deux pour vous si vous voulez que le one-liner ...

Il y a beaucoup d'exemples dans la vignette Econometric Computing with HC and HAC Covariance Matrix Estimators qui vient avec le paquet de sandwich de lmtest de liaison et de sandwich pour faire ce que vous voulez.

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

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

que nous pouvons utiliser comme ceci (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 
+7

@Jerome: Si vous êtes heureux avec une réponse, upvote ou l'accepter (c'est comme ça que les choses fonctionnent ici SO). OK, vous me payez ce que vous avez payé pour Stata et je vais écrire le one-liner pour vous ;-) Sérieusement, R est développé par des bénévoles et des particuliers. Ces personnes développent le code dont elles ont besoin et font ce qu'elles pensent que cela devrait être fait. 'lmtest' consiste à fournir des tests ciblés de modèles linéaires. Les auteurs ont probablement pensé qu'il était préférable de fournir les outils bruts pour faire ces choses et n'avaient pas besoin du sucre synthétique que vous voulez. Je vais vous montrer à quel point il est facile d'écrire un wrapper d'une ligne dans une modification de ma réponse. –

+0

une idée de ce que STATA fait ici, parce que j'essayais de reproduire les résultats que quelqu'un d'autre calculait avec l'option 'robust' de STATA. –

+3

Ah, je peux répondre à ma propre question I ici (celle que j'ai soulevée sur le commentaire précédent): L'équivalent de ce que STATA serait d'utiliser 'typ =" HC1 "' avec vcovHC. –

10

Je trouve un R fonction 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 objet 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é semblable à Stata.

summary(lm.object, robust=T) 

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

Questions connexes