Diagnóstico de Colinealidad

César Córdova

28/4/2021

Ejercicios: primera parte

Vamos a calcular 01 modelo de regresión lineal y luego realizar un diagnóstico de sus residuos. Para ello utilizaremos datos compilados por el proyecto Gapminder (https://www.gapminder.org/). La data final, luego de adecuación, se puede descargar en el siguiente enlace o en el classroom de la práctica:

https://www.dropbox.com/sh/fbeyyikum4i0m8p/AADDk_VHnqsdcRoGE7Q509zUa?dl=0

Antes de empezar debemos cargar un par de paquetes de R con la función “library” y luego cargamos la data (“load”) para explorarla (“names”, “head”).

Carga de paquetes


library(stargazer)
library(olsrr)

Carga de datos


load("dataWorld_q.rda")

Selección de casos


data1519 <- dataWorld_q[dataWorld_q$quinq=="2015-2019",]

Exploración de “dataWorld”


names(data1519)
##  [1] "country"    "quinq"      "tfr"        "yearSchF"   "contracep" 
##  [6] "age1mar"    "sanitat"    "water"      "birthSkill" "childMort" 
## [11] "deathRate"  "extPov"     "famWorkFem" "femWork"    "incomePp"  
## [16] "income10p"  "gini"       "lifExpFem"  "lifExpTot"  "maleWork"  
## [21] "materMort"  "vaccMeas"   "schGenEq"   "doctor"     "teenFert"

head(data1519)
##                  country     quinq    tfr yearSchF contracep age1mar sanitat
## 2523         Afghanistan 2015-2019 4.5625      NaN      22.5     NaN    39.2
## 2524             Albania 2015-2019 1.7100      NaN       NaN     NaN    97.7
## 2525             Algeria 2015-2019 2.7425      NaN       NaN     NaN    87.5
## 2526              Angola 2015-2019 5.6575      NaN      13.7     NaN    39.4
## 2527 Antigua and Barbuda 2015-2019 2.0450      NaN       NaN     NaN    87.5
## 2528           Argentina 2015-2019 2.2850      NaN       NaN     NaN    94.8
##      water birthSkill childMort deathRate extPov famWorkFem femWork incomePp
## 2523  63.0       50.5   69.4250    6.6750    NaN        NaN  19.275   1790.0
## 2524  91.4        NaN   13.4250    7.4675    NaN      33.30  47.325  11675.0
## 2525  93.5        NaN   24.4250    4.7600    NaN       2.41  15.200  13800.0
## 2526  41.0       46.9   83.4250    8.4500    NaN        NaN  75.325   6012.5
## 2527  96.7        NaN    8.3125    5.7925    NaN        NaN     NaN  20700.0
## 2528  99.6       99.6   11.0500    7.5625    0.6       0.97  47.350  18800.0
##      income10p gini lifExpFem lifExpTot maleWork materMort vaccMeas schGenEq
## 2523       NaN  NaN    65.200    58.250   86.700       NaN      NaN     23.7
## 2524       NaN  NaN    80.525    77.800   64.975       NaN      NaN    103.0
## 2525       NaN  NaN    77.450    77.550   67.325       NaN      NaN     90.8
## 2526       NaN  NaN    64.525    64.700   80.150       NaN      NaN     73.3
## 2527       NaN  NaN    78.800    77.375      NaN       NaN      NaN    110.0
## 2528      30.9 42.4    80.375    76.750   73.275       NaN      NaN    108.0
##      doctor teenFert
## 2523 0.2985      NaN
## 2524    NaN      NaN
## 2525    NaN      NaN
## 2526    NaN      NaN
## 2527    NaN      NaN
## 2528    NaN      NaN

Ejercicio 1

Observe cuidadosamente los modelos que se muestran en la “tabla 1”. Estos modelos han sido calculados con la estrategia de “escalonamiento” para evaluar problemas potenciales de colinealidad.

Desarrolle los siguientes puntos:


modelo1 <- lm(lifExpTot ~ femWork, data = data1519)


modelo2 <- lm(lifExpTot ~ maleWork, data = data1519)


modelo3 <- lm(lifExpTot ~ femWork + maleWork, data = data1519)


stargazer(modelo1 , modelo2, modelo3, type = "text",  
          title="Tabla 1. Modelos de Regresión",
          omit.stat=c("ser", "f"), 
          dep.var.labels = "Expectativa de vida",
          dep.var.caption = "Variable dependiente:",
          star.cutoffs = c(0.05, 0.01, 0.001))
## 
## Tabla 1. Modelos de Regresión
## ============================================
##                   Variable dependiente:     
##              -------------------------------
##                    Expectativa de vida      
##                 (1)        (2)        (3)   
## --------------------------------------------
## femWork       -0.105**              -0.084* 
##               (0.034)               (0.037) 
##                                             
## maleWork                 -0.159**   -0.107  
##                          (0.061)    (0.064) 
##                                             
## Constant     77.810***  83.951***  84.528***
##               (1.867)    (4.479)    (4.433) 
##                                             
## --------------------------------------------
## Observations    179        179        179   
## R2             0.050      0.037      0.065  
## Adjusted R2    0.045      0.032      0.054  
## ============================================
## Note:          *p<0.05; **p<0.01; ***p<0.001

Factor de Inflación de Varianza(VIF) y Tolerancia

Para determinar con mayor precisión es necesario calcular al menos dos medidas: el Factor de Inflación de Varianza (VIF) y la Tolerancia. A continuación, se presenta el cálculo de ambas medidas:


ols_vif_tol(modelo3)
##   Variables Tolerance      VIF
## 1   femWork 0.8769255 1.140348
## 2  maleWork 0.8769255 1.140348

Propuesta de solución

En este caso se propone como solución la construcción de un índice que resume lo dos indicadores propuestos en el “modelo 3”.


#Cálculo de índice

data1519$index.work <- (data1519$femWork + data1519$maleWork)/2

Luego, calculamos un último “modelo 4” que solo incluya el índice de resúmen como variable independiente:


modelo4 <- lm(lifExpTot ~ index.work, data = data1519)

stargazer(modelo1 , modelo2, modelo3, modelo4, type = "text",  
          title="Tabla 2. Modelos de Regresión",
          omit.stat=c("ser", "f"), 
          dep.var.labels = "Expectativa de vida",
          dep.var.caption = "Variable dependiente:",
          star.cutoffs = c(0.05, 0.01, 0.001))
## 
## Tabla 2. Modelos de Regresión
## ====================================================
##                       Variable dependiente:         
##              ---------------------------------------
##                        Expectativa de vida          
##                 (1)       (2)       (3)       (4)   
## ----------------------------------------------------
## femWork      -0.105**             -0.084*           
##               (0.034)             (0.037)           
##                                                     
## maleWork               -0.159**   -0.107            
##                         (0.061)   (0.064)           
##                                                     
## index.work                                 -0.181***
##                                             (0.052) 
##                                                     
## Constant     77.810*** 83.951*** 84.528*** 83.703***
##               (1.867)   (4.479)   (4.433)   (3.295) 
##                                                     
## ----------------------------------------------------
## Observations    179       179       179       179   
## R2             0.050     0.037     0.065     0.064  
## Adjusted R2    0.045     0.032     0.054     0.059  
## ====================================================
## Note:                  *p<0.05; **p<0.01; ***p<0.001

Ejercicios: segunda parte

Vamos a calcular 01 modelo de regresión lineal y luego realizar un diagnóstico de sus residuos. Para ello utilizaremos datos compilados por el Global Health Observatory (GHO) sobre la expectativa de vida. La data final, luego de adecuación, se puede descargar en el siguiente enlace o en el classroom de la práctica:

https://www.dropbox.com/sh/4spyixxujjsfiag/AACdsdVzZq7BEpuqzp2GycC6a?dl=0

Antes de empezar debemos de cargar la data (“load”) para explorarla (“names”, “head”).

load("lifewho.Rdata")
names(lifewho)
##  [1] "Country"                         "Year"                           
##  [3] "Status"                          "Life.expectancy"                
##  [5] "Adult.Mortality"                 "infant.deaths"                  
##  [7] "Alcohol"                         "percentage.expenditure"         
##  [9] "Hepatitis.B"                     "Measles"                        
## [11] "BMI"                             "under.five.deaths"              
## [13] "Polio"                           "Total.expenditure"              
## [15] "Diphtheria"                      "HIV.AIDS"                       
## [17] "GDP"                             "Population"                     
## [19] "thinness..1.19.years"            "thinness.5.9.years"             
## [21] "Income.composition.of.resources" "Schooling"

Ejercicio 2

Observe cuidadosamente los modelos que se muestran en la “tabla 3” e intente identificar problemas de colinealidad entre variables independientes:

Desarrolle los siguientes puntos:


modelo1.1 <- lm(Life.expectancy ~ Adult.Mortality, data = lifewho)


modelo1.2 <- lm(Life.expectancy ~ Adult.Mortality + infant.deaths , data =
lifewho)


modelo1.3 <- lm(Life.expectancy~ Adult.Mortality + infant.deaths +
under.five.deaths , data = lifewho)

Formato

Con la función “stargazer” le damos formato a la presentación:


stargazer(modelo1.1 , modelo1.2, modelo1.3, type = "text",  
          title="Tabla 3. Modelos de Regresión",
          omit.stat=c("ser", "f"), 
          dep.var.labels = "Expectativa de vida",
          dep.var.caption = "Variable dependiente:",
          star.cutoffs = c(0.05, 0.01, 0.001))
## 
## Tabla 3. Modelos de Regresión
## =================================================
##                        Variable dependiente:     
##                   -------------------------------
##                         Expectativa de vida      
##                      (1)        (2)        (3)   
## -------------------------------------------------
## Adult.Mortality   -0.053***  -0.052***  -0.050***
##                    (0.001)    (0.001)    (0.001) 
##                                                  
## infant.deaths                -0.011***  0.185*** 
##                               (0.001)    (0.012) 
##                                                  
## under.five.deaths                       -0.145***
##                                          (0.009) 
##                                                  
## Constant          78.018***  78.226***  77.883***
##                    (0.210)    (0.207)    (0.199) 
##                                                  
## -------------------------------------------------
## Observations        2,928      2,928      2,928  
## R2                  0.485      0.505      0.544  
## Adjusted R2         0.485      0.505      0.544  
## =================================================
## Note:               *p<0.05; **p<0.01; ***p<0.001

Factor de Inflación de Varianza(VIF) y Tolerancia


ols_vif_tol(modelo1.2)
##         Variables Tolerance      VIF
## 1 Adult.Mortality 0.9937975 1.006241
## 2   infant.deaths 0.9937975 1.006241
ols_vif_tol(modelo1.3)
##           Variables   Tolerance        VIF
## 1   Adult.Mortality 0.957391090   1.044505
## 2     infant.deaths 0.006503115 153.772465
## 3 under.five.deaths 0.006485702 154.185310