2010-12-08 17 views
27

Heteroskedastic Düzeltilmiş Standart Hatalar ile En Küçük Kareler Regresyon fonksiyonuna uymak için Stata çıkışına en çok benzeyen R uygulamasını bulmak istiyorum. Özellikle, düzeltilmiş standart hataların "özet" içinde olmasını ve ilk hipotez testim için ek hesaplamalar yapmak zorunda kalmamasını istiyorum. Eviews ve Stata'nın sağladığı gibi “temiz” bir çözüm arıyorum. Heteroskedastisite ile Düzeltme Düzeltilmiş Standart Hatalar

Şimdiye kadar, en iyisi ben kadar gelebilir "lmtest" paketini kullanıyor:

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

Bu bana istediğim çıktıyı verir, ancak görünmüyor için "coeftest" kullanıyor belirtilen amacı. Ayrıca, R^2 ve F istatistiklerini okumak için yanlış standart hatalar ile özeti kullanmak zorunda kalacağım. Dinamik R'nin ne kadar verildiği göz önüne alındığında, bu problemin bir "tek satır" çözümü olması gerektiğini hissediyorum.

Teşekkür

+0

üzerinde fonksiyonunu bulabilirsiniz. Bunun nereden geldiğini öğrenmek birkaç dakika sürdü. –

cevap

37

Sana paket lmtest içinde coeftest ile doğru yolda olduğunu düşünüyorum. Bu işlevselliği içeren sandwich package'a bir göz atın ve daha önce bulduğunuz lmtest paketiyle el ele çalışmak üzere tasarlanmıştır.

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

fonksiyonu waldtest() bakmak, F testi yaptırmak için: Her zaman tek astar istiyorsa sizin için bu ikisini birleştirmek için basit bir fonksiyonu uydurmak olabilir

> 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 

...

Econometric Computing with HC and HAC Covariance Matrix Estimators skeçinde, istediğini yapmak için lmtest ve sandviç bağlayan sandviç paketiyle birlikte birçok örnek vardır.

Düzenleme: (yukarıdaki örnekler), bu gibi kullanabilir hangi

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

toplam: bir liner kadar basit olabilir

> 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: Eğer bir cevaptan memnun iseniz, bunu kabul edin ya da kabul edin (işte burada işler böyle devam eder). Tamam, bana Stata için ne ödediğinizi ödüyorsunuz ve sizin için tek lineli yazacağım ;-) Cidden, R gönüllüler ve bireyler tarafından geliştirildi. Bu insanlar, kullanmaları gereken kodları geliştirir ve yapılması gerektiğini hissettirir. “lmtest”, doğrusal modellerin hedeflenmiş testlerini sağlamakla ilgilidir. Yazarlar, ham aletlere bu şeyleri yapmalarını ve istedikleri özet-şekere ihtiyaç duymadıklarını daha iyi hissettiler. Cevabımdaki bir düzenlemede tek satırlık bir sarıcı yazmanın ne kadar kolay olduğunu göstereceğim. –

+0

, STATA'nın burada ne yaptığıyla ilgili bir fikriniz varsa, STATA'nın “sağlam” seçeneği ile hesaplanan bir başkasını çoğaltmaya çalışıyorum. –

+3

Ah, kendi sorumu burada yanıtlayabilirim (önceki yorumda yükselttiğim): STATA'nın vcovHC ile 'typ =" HC1 "' i kullanmak için kullanacağı eşdeğerdir. –

10

Bir R bulundu tam olarak aradığınızı yapan işlev. Ek hesaplamalar yapmak zorunda kalmadan sağlam standart hatalar verir. Bir lm.object üzerinde summary() çalıştırın ve robust=T parametresini ayarlarsanız, Stata benzeri bir heterossedastisite tutarlı standart hataları geri verir.

summary(lm.object, robust=T) 

Sen Sen `) (hccm` için de paket arabaya ihtiyacım dikkat etmelidir https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r/