2010-12-08 30 views
27

Me gustaría encontrar la implementación R que se asemeja más a la salida Stata para ajustar una función de regresión de mínimos cuadrados con errores estándar heteroscedásticos corregidos. Específicamente me gustaría que los errores estándar corregidos estén en el "resumen" y no tengan que hacer cálculos adicionales para mi ronda inicial de pruebas de hipótesis. Estoy buscando una solución tan "limpia" como lo que ofrecen Eviews y Stata.Regresión con errores estándar corregidos de heterocedasticidad

Hasta el momento, utilizando el paquete "lmtest" lo mejor que puede llegar a es:

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

Esto me da la salida que quiero, pero no parece estar usando "coeftest" para su propósito declarado También tendría que usar el resumen con los errores estándar incorrectos para leer R^2 y F stat, etc. Siento que debería existir una solución de "línea única" para este problema, dado cuán dinámico es R.

Gracias

+0

Debe tener en cuenta que es necesario coche paquete también para 'HCCM()'. Me llevó unos minutos averiguar de dónde venía eso. –

Respuesta

37

creo que usted está en el camino correcto con coeftest en lmtest paquete. Eche un vistazo al sandwich package que incluye esta funcionalidad y está diseñado para trabajar de la mano con el paquete lmtest que ya ha encontrado.

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

Para obtener la prueba F, mira función 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 

Siempre se puede cocinar una función simple de combinar estos dos para que si quería la de una sola línea ...

Hay muchos ejemplos en la viñeta Econometric Computing with HC and HAC Covariance Matrix Estimators que viene con el paquete de sándwich de vincular lmtest y sándwich para hacer lo que desee.

Editar: A de una sola línea podría ser tan simple como:

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

que podemos utilizar como esto (en los ejemplos de la anterior):

> 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 está contento con una respuesta, voto en contra o acepte (así es como funcionan las cosas aquí en SO). OK, me pagas lo que pagaste por Stata y yo te escribo el delineador ;-) En serio, R está desarrollado por voluntarios y por individuos. Estas personas desarrollan el código que necesitan usar y lo hacen cómo sienten que se debe hacer. 'lmtest' se trata de proporcionar pruebas específicas de modelos lineales. Los autores probablemente consideraron que era mejor proporcionar las herramientas crudas para hacer estas cosas y no necesitaban el azúcar resumen que desea. Te mostraré lo fácil que es escribir un contenedor de una línea en una edición de mi respuesta. –

+0

cualquier idea de lo que hace STATA aquí, porque estaba tratando de reproducir los resultados que alguien más calculó con la opción 'robusta' de STATA. –

+3

Ah, puedo responder mi propia pregunta aquí (la que planteé en el comentario anterior): el equivalente a lo que hace STATA sería usar 'typ =" HC1 "' con vcovHC. –

10

he encontrado un R función que hace exactamente lo que estás buscando. Le proporciona robustos errores estándar sin tener que hacer cálculos adicionales. Ejecuta summary() en un lm.object y si establece el parámetro robust=T le devuelve errores estándar consistentes de heteroscedasticidad similar a Stata.

summary(lm.object, robust=T) 

Puede encontrar la función de https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r/

Cuestiones relacionadas