2010-12-08 3 views
27

Ich möchte die R-Implementierung finden, die Stata-Ausgabe am ehesten ähnelt, um eine Least-Squares-Regressionsfunktion mit Heteroskedastic Corrected Standard Errors anzupassen. Insbesondere möchte ich, dass die korrigierten Standardfehler in der "Zusammenfassung" stehen und keine zusätzlichen Berechnungen für meine erste Hypothesenprüfung durchführen müssen. Ich suche nach einer Lösung, die so "sauber" ist wie das, was Eviews und Statas bieten.Regression mit Heteroskedastizität Korrigierte Standardfehler

Bisher das „lmtest“ Paket mit dem besten was ich mit oben kommen kann ist:

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

Das gibt mir die Ausgabe, die ich will, aber es scheint nicht für die Verwendung von „coeftest“ wurde sein erklärter Zweck. Ich würde auch die Zusammenfassung mit den falschen Standardfehlern verwenden müssen, um den R^2 und F stat usw. abzulesen. Ich denke, dass es eine "Einzeilige" Lösung für dieses Problem gibt, wenn man bedenkt, wie dynamisch R ist.

Dank

+0

sollten Sie beachten, dass Sie Paket Auto auch für 'HCCM()' benötigen. Ich brauchte ein paar Minuten, um herauszufinden, woher das kam. –

Antwort

37

Ich glaube, Sie auf dem richtigen Weg sind mit coeftest in Paket lmtest. Werfen Sie einen Blick auf die sandwich package, die diese Funktionalität enthält und entwickelt wurde, um Hand in Hand mit dem Paket zu arbeiten, das Sie bereits gefunden haben.

> # 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 

den F-Test zu erhalten, sehen Sie Funktion 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 

Sie immer eine einfache Funktion kochen könnten diese beiden für Sie zu kombinieren, wenn Sie die Einzeiler wollte ...

Es gibt viele Beispiele in der Vignette, die mit dem Sandwich-Paket der Verknüpfung von lmtest und Sandwich kommt, um zu tun, was Sie wollen.

Edit: Ein Einzeiler könnte so einfach sein wie:

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

Was wir wie diese verwenden können (auf die Beispiele von oben):

> 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: Wenn Sie mit einer Antwort zufrieden sind, Upvote oder akzeptieren Sie es (so funktioniert es hier auf SO). OK, du bezahlst mir, was du für Stata bezahlt hast, und ich schreibe dir den One-Liner für dich ;-) Ernsthaft, R wird von Freiwilligen und Einzelpersonen entwickelt. Diese Leute entwickeln Code, den sie verwenden müssen, und tun es so, wie sie es für richtig halten. Bei "lmtest" geht es um gezielte Tests linearer Modelle. Die Autoren hielten es wahrscheinlich für besser, die rohen Werkzeuge für diese Dinge zur Verfügung zu stellen und brauchten den von Ihnen gewünschten summarischen Zucker nicht. Ich zeige Ihnen, wie einfach es ist, einen einzeiligen Wrapper in eine Bearbeitung meiner Antwort zu schreiben. –

+0

jede Idee, was STATA hier tut, weil ich versuchte, Ergebnisse zu reproduzieren, die jemand anders mit STATAs "robuster" Option berechnet hat. –

+3

Ah, ich kann hier meine eigene Frage beantworten (die, die ich im vorherigen Kommentar angesprochen habe): Das Äquivalent zu dem, was STATA tut, wäre 'typ =" HC1 "' mit vcovHC. –

10

fand ich eine R Funktion, die genau das tut, wonach Sie suchen. Sie erhalten robuste Standardfehler, ohne zusätzliche Berechnungen durchführen zu müssen. Sie laufen summary() auf einem lm.Object und wenn Sie den Parameter robust=T setzen gibt es Ihnen wieder Stata-ähnliche Heteroskedastizität konsistente Standardfehler.

summary(lm.object, robust=T) 

können Sie die Funktion finden auf https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r/