Regresja z Heteroskedastycznością skorygowane błędy Standardowe

Chciałbym znaleźć implementację R, która najbardziej przypomina wyjście Stata dla dopasowania funkcji regresji najmniejszych kwadratów z Heteroskedastycznymi poprawkami błędów standardowych. W szczególności chciałbym, aby skorygowane błędy standardowe były w "podsumowaniu" i nie musiały wykonywać dodatkowych obliczeń dla mojej początkowej rundy testowania hipotez. Szukam rozwiązania, które jest równie "czyste" jak to, co zapewniają Eviews i Stata.

Jak na razie używam pakietu "lmtest" najlepiej jak potrafię wymyśl to:

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

Daje mi to wyjście, które chcę, ale wydaje się, że nie używa "coeftest" DO OKREŚLONEGO CELU. Musiałbym również użyć podsumowania z błędnymi błędami standardowymi, aby odczytać statystykę R^2 I F itp. Uważam, że powinno istnieć "jednoliniowe" rozwiązanie tego problemu, biorąc pod uwagę, jak dynamiczne jest R.

Thanks

 28
Author: Metrics, 2010-12-08

3 answers

Myślę, że jesteś na dobrej drodze z coeftest w pakiecie lmtest. Zapoznaj się z pakietem sandwich, który zawiera tę funkcjonalność i został zaprojektowany do współpracy z pakietem lmtest, który już znalazłeś.

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

Aby uzyskać test F, spójrz na funkcję 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

Zawsze możesz przygotować prostą funkcję łączenia tych dwóch dla Ciebie, jeśli chcesz one-liner...

Jest wiele przykładów w obliczeń ekonometrycznych z Estymatory macierzy kowariancji HC i HAC winieta, która jest dostarczana z pakietem sandwich łączącym lmtest i sandwich, aby zrobić to, co chcesz.

Edit: jednolinijkowy może być tak prosty jak:

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

Które możemy użyć w ten sposób (na przykładach z góry):

> 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
 38
Author: Gavin Simpson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 22:06:26

Znalazłem funkcję R, która robi dokładnie to, czego szukasz. Zapewnia solidne błędy standardowe bez konieczności wykonywania dodatkowych obliczeń. Biegasz summary() na lm.obiekt i jeśli ustawisz parametr robust=T to zwróci ci stata-jak heteroscedasticity spójne błędy standardowe.

summary(lm.object, robust=T)

Możesz znaleźć funkcję na https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r/

 10
Author: Sandra Lopez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 18:12:43

Jest teraz rozwiązanie jednoliniowe z wykorzystaniem lm_robust z estimatr Pakiet , który można zainstalować z 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

Możesz również uzyskać tidy output:

> 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

Błędy standardowe "stata" domyślnie są to błędy standardowe "HC1", które są domyślnymi błędami standardowymi rob W Stata. Możesz również uzyskać "classical", "HC0", "HC1", "HC2", "HC3" i różne klastrowe błędy standardowe (w tym te, które pasują do Stata).

 1
Author: luke.sonnet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 17:50:00