Multicolinealidad

Multicolinealidad

Vamos a abordar, a nivel básico el concepto de colinealidad desde una perspectiva práctica. Usaremos la base de datos mtcars para ilustrar los ejemplos.

Colinealidad

Es el problema que resulta de tener regresores con alto grado de correlación entre ellos, es decir, el resultado de que sean combinación lineal de otros regresores. Según el grado de colinealidad se pueden tener dos problemas fundamentales:

  1. Cuando existe colinealidad perfecta no habría estimación para los parámetros, ya que, según la forma matricial de MCO \(\beta = (X'X)^{-1} X' y\), no habría manera de invertrir la matriz \((X'X)^{-1}\) puesto que el determinante sería cero.

  2. En un caso de colinealidad menos extremo, sí habría estimación de los parámetros, sin embargo, la consecuencia inmediata sería en el deterioro de los niveles de significancia estadística, medidos por las razones t (\(t-stat = \hat{\beta}/ ee(\hat{\beta})\), siendo \(ee(\hat{\beta})\) el error estándar asociado a cada parámetro estimado.)

# preparando librerías
data(mtcars)
library(dplyr)

En sesión pasada (en el aula de clases) vimos unos ejemplos de colinealidad. Para indagar visualmente si contamos con regresores colineales podemos usar la función pairs y así, inspeccionar, si existe relación lineal entre ellos.

Antes que nada, recordemos cómo luce la base de datos mtcars

#?mtcars
mtcars %>% 
  head

Vamos a estimar diferentes modelos de regresión, según estas especificaciones:

  1. Modelo 1 (reg1): \(mpg_i = \beta_0 + \beta_1 hp_i + u_i\)
  2. Modelo 2 (reg2): \(mpg_i = \beta_0 + \beta_1 hp_i + \beta_2 disp_i + u_i\)
  3. Modelo 3 (reg3): \(mpg_i = \beta_0 + \beta_1 hp_i + \beta_2 disp_i + \beta_3 cyl_i + u_i\)

Lo que estaríamos relacionando en cada regresión es el rendimiento de cada vehículo, en términos del recorrido de millas por cada galón de combustible, en función de diversas variables que miden la potencia del motor.

La pregunta natural sería: ¿cuán colineales son esas variables?

mtcars %>% 
  select(hp, disp, cyl) %>% 
  pairs(pch=19)

Una vez observado un patrón de colinealidad, será necesario medir dicho efecto, para ello obtenemos la matriz de correlaciones entre los regresores:

mtcars %>% 
  select(hp, disp, cyl) %>% 
cor
##             hp      disp       cyl
## hp   1.0000000 0.7909486 0.8324475
## disp 0.7909486 1.0000000 0.9020329
## cyl  0.8324475 0.9020329 1.0000000

Desde ya nos vamos haciendo una idea de lo que podríamos esperar con cada modelo estimado, ¿no es así?

Estimación y comparación de modelos.

Estimen los modelos, comparen y analicen los resultados.

reg1 <- lm(mpg ~ hp, data=mtcars) # ~ = Alt + 126 en windows.
reg2 <- lm(mpg ~ hp + disp, data = mtcars)
reg3 <- lm(mpg ~ hp + disp + cyl, data = mtcars)

Comparemos los modelos y veamos si es lo que esperábamos

library(stargazer)
stargazer::stargazer(reg1, reg2, reg3, 
                     title = "Comparación entre regresiones",
                     type = "html",
                     align = TRUE)
Comparación entre regresiones
Dependent variable:
mpg
(1) (2) (3)
hp -0.068*** -0.025* -0.015
(0.010) (0.013) (0.015)
disp -0.030*** -0.019*
(0.007) (0.010)
cyl -1.227
(0.797)
Constant 30.099*** 30.736*** 34.185***
(1.634) (1.332) (2.591)
Observations 32 32 32
R2 0.602 0.748 0.768
Adjusted R2 0.589 0.731 0.743
Residual Std. Error 3.863 (df = 30) 3.127 (df = 29) 3.055 (df = 28)
F Statistic 45.460*** (df = 1; 30) 43.095*** (df = 2; 29) 30.877*** (df = 3; 28)
Note: p<0.1; p<0.05; p<0.01

¿Podemos medir el impacto en cada regresión del hecho de incluir un regresor colineal? Claro! usemos el Factor Inflador de la Varianza (FIV), el cual se define como,

\[ FIV = \dfrac{1}{1-R^2} \] NOTA Incrementos en el FIV indica presencia de regresores colineales.

Una vez que tenemos los modelos y sus respectivos \(R^2\), podemos evaluar el efecto de la colinealidad a través de:

  1. El FIV
  2. La significancia individual de cada parámetro estimado comparado con el \(R^2\), es decir, altos varlores del \(R^2\) con razones t bajas es indicio de presencia de regresores colineales.

La colinealidad, detectada por cualquiera de los métodos anteriores, indica que estamos incluyendo información redundante en el modelo. Por tanto, tenga en cuenta que el incluir más variables, no necesariamente implica más y mejor información en el modelo. También podría indicar que los regresores no son del todo exógenos y eso lo veremos en los temas relacionados con la exogenedidad y variables instrumentales.

Obteniendo el FIV de cada modelo

#str(summary(reg1))

# FIV reg1
fiv1 <- 1/(1-summary(reg1)$r.squared )

# FIV reg2
fiv2 <- 1/(1-summary(reg2)$r.squared )

# FIV reg3
fiv3 <-1/(1-summary(reg3)$r.squared )

cbind(fiv1, fiv2, fiv3)
##          fiv1    fiv2    fiv3
## [1,] 2.515327 3.97204 4.30826

Con todo lo anterior concluimos que hay colinealidad entre los regresores.

Discutamos sobre posibles soluciones al respecto: Si todos los regresores te dan la misma información, escojamos, entonces el mejor de ellos.

reg_a <- lm(mpg ~ hp, data = mtcars)
reg_b <- lm(mpg ~ disp, data = mtcars)
reg_c <- lm(mpg ~ cyl, data = mtcars)

stargazer::stargazer(reg_a, reg_b, reg_c, 
                     title = "Comparación entre regresiones simples",
                     type = "html", 
                     align = TRUE)
Comparación entre regresiones simples
Dependent variable:
mpg
(1) (2) (3)
hp -0.068***
(0.010)
disp -0.041***
(0.005)
cyl -2.876***
(0.322)
Constant 30.099*** 29.600*** 37.885***
(1.634) (1.230) (2.074)
Observations 32 32 32
R2 0.602 0.718 0.726
Adjusted R2 0.589 0.709 0.717
Residual Std. Error (df = 30) 3.863 3.251 3.206
F Statistic (df = 1; 30) 45.460*** 76.513*** 79.561***
Note: p<0.1; p<0.05; p<0.01

Podemos basarnos en el valor de la verosimilitud para seleccionar el mejor modelo.

sapply(list(reg_a, reg_b, reg_c), logLik)
## [1] -87.61931 -82.10469 -81.65321

Por otro lado, podemos utilizar también el Error Cuadrático Medio (ECM), el criterio de selección es que el mejor modelo es aquel que tiene menor ECM.

mean(resid(reg_a)^2)
## [1] 13.98982
mean(resid(reg_b)^2)
## [1] 9.911209
mean(resid(reg_c)^2)
## [1] 9.635445
sapply(list(reg_a, reg_b, reg_c), function(reg) mean(resid(reg)^2))
## [1] 13.989822  9.911209  9.635445

Podemos aprovechar la comparación que hace glance del paquete `broom para comprar el rendimiento de cada modelo en función de los criterior AIC y BIC.

library(purrr)
library(broom)
library(tidyr)

list(reg_a, reg_b, reg_c) %>% 
  map(., glance) %>% 
  do.call(rbind, .) %>% 
  select(adj.r.squared, logLik, AIC, BIC) %>% 
  mutate(Modelo = paste0("reg_", letters[1:3])) %>% 
  relocate(Modelo, .before = adj.r.squared)

Según los resultados de la tabla anterior, la mejor regresión, con base en los indicadores listados en ella, corresponde a la reg_c.

BONO Predicción de modelos dentro de muestra

tibble(observado=mtcars$mpg,
      predicho_a=round(reg_a$fitted.values, 1),
      predicho_b=round(reg_b$fitted.values, 1),
      predicho_c=round(reg_c$fitted.values, 1)) %>% head(10)

Ejercicios:

Se recomienda al estudiante realizar las siguientes variantes, interpretar el resultado, seleccionar el mejor modelo y explicar sus criterios de selección. Recuerde que en esta etapa sólo hemos lidiado con colinealidad, por lo cual, su “mejor modelo” aún puede padecer de otros problemas (heteroscedasticidad y autocorrelación) por lo cual no debe ser considerado como el “mejor modelo” aún.

  1. Realice una regresión agregando las variables siguientes:
  1. \(mpg_i = \beta_0 + \beta_1 hp_i + \beta_2 wt_i\)
  2. \(mpg_i = \beta_0 + \beta_1 hp_i + \beta_2 drat_i\)
  3. \(mpg_i = \beta_0 + \beta_1 hp_i + \beta_2 wt_i + \beta_3 drat_i\)
  1. Determine si existe presencia de multicolinealidad.
  2. Determine cuál es el ‘mejor modelo’.

No hay comentarios:

Publicar un comentario