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
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:
¿Se observan “síntomas” de colinealidad? ¿En qué modelo se observan problemas de colinealidad?
En caso haya encontrado "síntomas de colinealidad, descríbalos con precisión
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
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"
Observe cuidadosamente los modelos que se muestran en la “tabla 3” e intente identificar problemas de colinealidad entre variables independientes:
Desarrolle los siguientes puntos:
¿En qué modelos se observan problemas de colinealidad?
¿En qué consisten los problemas de colinealidad observados?
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