Práctica sobre el Cálculo y la Presentación de Estimadores HAC

Estimación del modelo

# Carga de datos

load("C:/Users/User/Desktop/documents_rstudio/periodo_3/Verónica Nayeli Miranda Mejia - smoke.RData")
options(scipen = 99999999)
library(lmtest)
modelo_lineal<-lm(formula = cigs~cigpric+lcigpric+income+lincome+age+agesq+ educ+white+restaurn, data = data)
coeftest(modelo_lineal)
## 
## t test of coefficients:
## 
##                   Estimate     Std. Error t value     Pr(>|t|)    
## (Intercept)  340.804374604  260.015587269  1.3107     0.190334    
## cigpric        2.002267667    1.492831189  1.3413     0.180220    
## lcigpric    -115.273464445   85.424315195 -1.3494     0.177585    
## income        -0.000046194    0.000133491 -0.3460     0.729402    
## lincome        1.404061178    1.708165841  0.8220     0.411340    
## age            0.778359013    0.160555612  4.8479 0.0000015001 ***
## agesq         -0.009150353    0.001749292 -5.2309 0.0000002158 ***
## educ          -0.494780616    0.168180198 -2.9420     0.003356 ** 
## white         -0.531051635    1.460721806 -0.3636     0.716287    
## restaurn      -2.644241351    1.129998690 -2.3400     0.019528 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Presentación del modelo con stargazer

library(stargazer)
stargazer(modelo_lineal,title="Modelo Lineal",type="html")
Modelo Lineal
Dependent variable:
cigs
cigpric 2.002
(1.493)
lcigpric -115.273
(85.424)
income -0.00005
(0.0001)
lincome 1.404
(1.708)
age 0.778***
(0.161)
agesq -0.009***
(0.002)
educ -0.495***
(0.168)
white -0.531
(1.461)
restaurn -2.644**
(1.130)
Constant 340.804
(260.016)
Observations 807
R2 0.055
Adjusted R2 0.044
Residual Std. Error 13.413 (df = 797)
F Statistic 5.169*** (df = 9; 797)
Note: p<0.1; p<0.05; p<0.01

Verificación si la matriz de Varianza-Covarianza del modelo es escalar o no.

Mediante la verificación de las pruebas de heterocedasticidad y autocorrelación.

Prueba de Heterocedasticidad

form_compl_interaccion <- function(variables) {
  
  if (!is.vector(variables) || !all(sapply(variables, is.character))) {
    stop("El argumento 'variables' debe ser un vector de caracteres.")
  }
  
  # Generar términos cuadráticos
  terminos_cuadraticos <- paste(paste0("I(", variables, "^2)"), collapse = " + ")
  
  # Generar términos de interacción
  interaccion <- combn(variables, 2, FUN = function(x) paste(x, collapse = "*"), simplify = TRUE)
  terminos_interaccion <- paste(interaccion, collapse = " + ")
  
  # Concatenar términos cuadráticos e interacciones
  cadena_formula <- paste(terminos_cuadraticos, terminos_interaccion, sep = " + ")
  
  # Crear objeto formula
  objeto_formula <- as.formula(paste("~", cadena_formula))
  
  return(objeto_formula)
}
options(scipen = 99999)
variables<-c("cigpric","lcigpric","income","lincome","age",
             "agesq","educ","white","restaurn")
formula_result<-form_compl_interaccion(variables)
library(lmtest)
prueba_white<-bptest(modelo_lineal,formula_result,data = data)
print(prueba_white)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_lineal
## BP = 60.193, df = 50, p-value = 0.1532

Interpretación Como pvalue(0.15)>0.05 No se rechaza la H0, por tanto hay evidencia que la varianza de los residuos es homocedástica, es decir no tiene problemas de heterocedasticidad.

Prueba de Autocorrelación

a) Prueba de Durbin Watson.

library(lmtest)
dwtest(modelo_lineal,alternative = "two.sided",iterations = 1000)
## 
##  Durbin-Watson test
## 
## data:  modelo_lineal
## DW = 2.0174, p-value = 0.8866
## alternative hypothesis: true autocorrelation is not 0

Interpretación: No hay evidencia de autocorrelación de primer orden, por lo que no se rechaza la H0, al ser el Pvalue (0.8866) > sigma(0.05).

b) Prueba del Multiplicador de Lagrange (verificación de autocorrelación de primero y segundo orden).

Segundo orden

library(lmtest)
bgtest(modelo_lineal,order = 2)
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  modelo_lineal
## LM test = 0.26889, df = 2, p-value = 0.8742

Interpretación

No se rechaza la H0,al ser el Pvalue (0.8742) > sigma(0.05), mostrando evidencia de no autocorrelación en segundo orden.

Primer orden

library(lmtest)
bgtest(modelo_lineal,order = 1)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  modelo_lineal
## LM test = 0.069737, df = 1, p-value = 0.7917

Interpretación

No se rechaza la H0,al ser el Pvalue (0.7917) > sigma(0.05), mostrando evidencia de no autocorrelación en primer orden.

Para este ejercicio, no será necesario hacer uso de la estimación robusta mediante los estimadores HAC ya que este modelo al no tener presencia de heterocedasticidad y autocorrelación, no presenta violación a sus supuestos, y además esta indicando que la matriz de varianza covarianza es escalar.

Pero para efectos de práctica se hace uso de los estimadores HAC, los cuales se presentan a continuación:

Estimación Robusta

Sin corregir

options(scipen = 99999)
library(lmtest)
library(sandwich)
coeftest(modelo_lineal)
## 
## t test of coefficients:
## 
##                   Estimate     Std. Error t value     Pr(>|t|)    
## (Intercept)  340.804374604  260.015587269  1.3107     0.190334    
## cigpric        2.002267667    1.492831189  1.3413     0.180220    
## lcigpric    -115.273464445   85.424315195 -1.3494     0.177585    
## income        -0.000046194    0.000133491 -0.3460     0.729402    
## lincome        1.404061178    1.708165841  0.8220     0.411340    
## age            0.778359013    0.160555612  4.8479 0.0000015001 ***
## agesq         -0.009150353    0.001749292 -5.2309 0.0000002158 ***
## educ          -0.494780616    0.168180198 -2.9420     0.003356 ** 
## white         -0.531051635    1.460721806 -0.3636     0.716287    
## restaurn      -2.644241351    1.129998690 -2.3400     0.019528 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Corregido

options(scipen = 99999)
library(lmtest)
library(sandwich)
estimacion_omega<-vcovHC(modelo_lineal,type="HC1")
coeftest(modelo_lineal,vcov. = estimacion_omega)
## 
## t test of coefficients:
## 
##                   Estimate     Std. Error t value        Pr(>|t|)    
## (Intercept)  340.804374604  280.307210432  1.2158        0.224412    
## cigpric        2.002267667    1.612751396  1.2415        0.214778    
## lcigpric    -115.273464445   91.915690160 -1.2541        0.210165    
## income        -0.000046194    0.000116316 -0.3971        0.691370    
## lincome        1.404061178    1.236656671  1.1354        0.256562    
## age            0.778359013    0.137801126  5.6484 0.0000000225324 ***
## agesq         -0.009150353    0.001460626 -6.2647 0.0000000006108 ***
## educ          -0.494780616    0.163987570 -3.0172        0.002633 ** 
## white         -0.531051635    1.370425032 -0.3875        0.698483    
## restaurn      -2.644241351    1.044748153 -2.5310        0.011566 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Explicación

Los pasos de no corregido y corregido son importantes, ya que muestran la peculiaridad que los errores estandar corregidos son más grandes en comparación a los originales (no corregidos); caso contrario con los valores t, que en los corregidos son más pequeños en comparación a los no corregidos, mostrando un modelo robusto que puede reducir los intervalos de confianza, indicando finalmente el paso corregido que se puede confiar en estas estadísticas.

Presentación del modelo original y corregido

library(robustbase)
library(stargazer)
m_robusto<-sqrt(diag(estimacion_omega))
stargazer(modelo_lineal,modelo_lineal,se = list(NULL,m_robusto),column.labels = c("Modelo original", "Modelo corregido"),align =TRUE,type = "html",title = "Modelo sobre cigarrillos" )
Modelo sobre cigarrillos
Dependent variable:
cigs
Modelo original Modelo corregido
(1) (2)
cigpric 2.002 2.002
(1.493) (1.613)
lcigpric -115.273 -115.273
(85.424) (91.916)
income -0.00005 -0.00005
(0.0001) (0.0001)
lincome 1.404 1.404
(1.708) (1.237)
age 0.778*** 0.778***
(0.161) (0.138)
agesq -0.009*** -0.009***
(0.002) (0.001)
educ -0.495*** -0.495***
(0.168) (0.164)
white -0.531 -0.531
(1.461) (1.370)
restaurn -2.644** -2.644**
(1.130) (1.045)
Constant 340.804 340.804
(260.016) (280.307)
Observations 807 807
R2 0.055 0.055
Adjusted R2 0.044 0.044
Residual Std. Error (df = 797) 13.413 13.413
F Statistic (df = 9; 797) 5.169*** 5.169***
Note: p<0.1; p<0.05; p<0.01

Conclusión Final

Los estimadores HAC (Estimadores Consistentes de Heterocedasticidad y Autocorrelación), permiten obtener errores estándar robustos que son válidos incluso cuando las condiciones clásicas de homocedasticidad y no autocorrelación no se cumplen. También ayudan a asegurar que las inferencias estadísticas sean confiables, permitiendo un análisis más robusto y preciso.