Uso de libreria stargazer

El comando stargazer produce código LaTeX, código HTML y texto ASCII para tablas bien formateadas que contienen los resultados del análisis de regresión de varios modelos uno al lado del otro. También puede generar estadísticas resumidas y contenido del marco de datos. stargazer admite una gran cantidad de objetos modelo de una variedad de paquetes.

Algunos argumentos importantes para sus uso

type: Un vector de caracteres que especifica qué tipo de salida debe producir el comando. Los valores posibles son “latex” (predeterminado) para el código LaTeX, “html” para el código HTML / CSS, “texto” para la salida de texto ASCII.

…: Uno o más objetos de modelo (para tablas de análisis de regresión) o marcos de datos / vectores / matrices (para estadísticas de resumen o salida directa de contenido). También se pueden incluir como listas (o incluso listas dentro de listas).

title: Un vector de caracteres con títulos para las tablas.

summary: Un valor lógico que indica si el paquete debe generar una tabla de resumen de estadísticas cuando se le da un marco de datos. Si es FALSE, el paquete generará en su lugar el contenido del marco de datos.

allign: Un valor lógico que indica si los valores numéricos de la misma columna deben alinearse con la marca decimal en la salida LaTeX. Requiere  usepackage {dcolumn} en el preámbulo de LaTeX.

Ahora, para ejecutar un modelo de regresión simple de mínimos cuadrados ordinarios (OLS) y un modelo corregido con estimación HAC robusta, se colocaran los dos en el argumento “…” ambos separados por una coma. No sin antes de haber realizado la estimación robusta del modelo

Estimación del modelo

options(scipen = 999999)
library(foreign)
datos_regresion <- read.dta("https://stats.idre.ucla.edu/stat/data/crime.dta")
modelo_crime<-lm(crime~poverty+single,data=datos_regresion)
print(modelo_crime)
## 
## Call:
## lm(formula = crime ~ poverty + single, data = datos_regresion)
## 
## Coefficients:
## (Intercept)      poverty       single  
##   -1368.189        6.787      166.373

Pruebas de heterocedasticidad y autocorrelación

Prueba white

library(lmtest)
white_test<-bptest(modelo_crime,~I(poverty^2)+I(single^2)+poverty*single,data = datos_regresion)
print(white_test)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_crime
## BP = 10.73, df = 5, p-value = 0.057

Hay evidencia de heterocedasticidad y autocorrelación ya que p value < que 0.05

Prueba de multiplicador de Lagrange

Autocorrelación de segundo orden

library(lmtest)
prueba_LM<-bgtest(modelo_crime,order = 2)
print(prueba_LM)
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  modelo_crime
## LM test = 0.27165, df = 2, p-value = 0.873

No hay evidencia de autocorrelación de 2° orden ya que p.value > 0.05

Autocorrelación de 1° orden (prueba de durbin watson)

library(car)
## Loading required package: carData
durbinWatsonTest(model = modelo_crime)
##  lag Autocorrelation D-W Statistic p-value
##    1     -0.07014421      2.040007   0.954
##  Alternative hypothesis: rho != 0

No hay evidencia de autocorrelación de 1° orden ya que p.value > 0.05

Estimación robusta (Uso de estimador HAC)

Sin corregir

options(scipen = 99999)
library(lmtest)
#Sin corregir:
coeftest(modelo_crime)
## 
## t test of coefficients:
## 
##               Estimate Std. Error t value         Pr(>|t|)    
## (Intercept) -1368.1887   187.2052 -7.3085 0.00000000247861 ***
## poverty         6.7874     8.9885  0.7551           0.4539    
## single        166.3727    19.4229  8.5658 0.00000000003117 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Corregido (usando estimador HAC)

options(scipen = 99999)
library(lmtest)
library(sandwich)

#Corregido

estimacion_omega<-vcovHC(modelo_crime,type = "HC0") 

coeftest(modelo_crime,vcov. = estimacion_omega)
## 
## t test of coefficients:
## 
##               Estimate Std. Error t value      Pr(>|t|)    
## (Intercept) -1368.1887   276.4111 -4.9498 0.00000956181 ***
## poverty         6.7874    10.6010  0.6403        0.5251    
## single        166.3727    25.4510  6.5370 0.00000003774 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Comparación de modelos con estimador HAC

library(stargazer)
errores_corregidos<- sqrt(diag(estimacion_omega))

stargazer(modelo_crime,modelo_crime,se=list(NULL,errores_corregidos),
          type = "html",title = "Comparación de modelos con estimación HAC",column.labels =   c("modelo original", "modelo corregido"))
Comparación de modelos con estimación HAC
Dependent variable:
crime
modelo original modelo corregido
(1) (2)
poverty 6.787 6.787
(8.989) (10.601)
single 166.373*** 166.373***
(19.423) (25.451)
Constant -1,368.189*** -1,368.189***
(187.205) (276.411)
Observations 51 51
R2 0.707 0.707
Adjusted R2 0.695 0.695
Residual Std. Error (df = 48) 243.610 243.610
F Statistic (df = 2; 48) 57.964*** 57.964***
Note: p<0.1; p<0.05; p<0.01

Estimador HAC de NeweyWest

library(lmtest)
library(sandwich)

#Corregido:

estimacion_omega2<-NeweyWest(modelo_crime,lag = 2)
coeftest(modelo_crime,vcov. = estimacion_omega)
## 
## t test of coefficients:
## 
##               Estimate Std. Error t value      Pr(>|t|)    
## (Intercept) -1368.1887   276.4111 -4.9498 0.00000956181 ***
## poverty         6.7874    10.6010  0.6403        0.5251    
## single        166.3727    25.4510  6.5370 0.00000003774 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Estimación robusta

options(scipen = 999999)
library(robustbase)
library(stargazer)
modelo_crime_robust<-lmrob(crime~poverty+single,data=datos_regresion)
# print(summary(modelo_crime_robust))
stargazer(modelo_crime,modelo_crime_robust,type = "html",title = "comparación de modelos con estimación robusta de orden 1",column.labels = c("original","corregido"))
comparación de modelos con estimación robusta de orden 1
Dependent variable:
crime
OLS MM-type
linear
original corregido
(1) (2)
poverty 6.787 11.466
(8.989) (9.263)
single 166.373*** 176.569***
(19.423) (23.223)
Constant -1,368.189*** -1,539.640***
(187.205) (235.765)
Observations 51 51
R2 0.707 0.795
Adjusted R2 0.695 0.787
Residual Std. Error (df = 48) 243.610 191.864
F Statistic 57.964*** (df = 2; 48)
Note: p<0.1; p<0.05; p<0.01

Comparación de modelos con estimación robusta de orden 2

estimacion.omega2 <- NeweyWest(modelo_crime,lag = 2)
errores_standard_corregidos.2 <- sqrt(diag(estimacion.omega2))
stargazer(modelo_crime,modelo_crime, se = list(NULL, errores_standard_corregidos.2),
          column.labels = c("original", "corregido"), 
          type = "html",
          title="Comparación de modelos con estimación robusta de orden 2")
Comparación de modelos con estimación robusta de orden 2
Dependent variable:
crime
original corregido
(1) (2)
poverty 6.787 6.787
(8.989) (10.594)
single 166.373*** 166.373***
(19.423) (25.915)
Constant -1,368.189*** -1,368.189***
(187.205) (303.847)
Observations 51 51
R2 0.707 0.707
Adjusted R2 0.695 0.695
Residual Std. Error (df = 48) 243.610 243.610
F Statistic (df = 2; 48) 57.964*** 57.964***
Note: p<0.1; p<0.05; p<0.01