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(ggplot2)
library(stargazer)
library(lm.beta)
library(ggfortify)
Carga de datos
load("dataWorld_q.rda")
Exploración de “dataWorld”
names(dataWorld_q)
## [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(dataWorld_q)
## country quinq tfr yearSchF contracep age1mar sanitat water
## 1 Afghanistan 1950-1954 7.550 NaN NaN NaN NaN NaN
## 2 Albania 1950-1954 6.122 NaN NaN NaN NaN NaN
## 3 Algeria 1950-1954 7.448 NaN NaN 19.6 NaN NaN
## 4 Angola 1950-1954 7.152 NaN NaN NaN NaN NaN
## 5 Antigua and Barbuda 1950-1954 4.492 NaN NaN NaN NaN NaN
## 6 Argentina 1950-1954 3.156 NaN NaN NaN NaN NaN
## birthSkill childMort deathRate extPov famWorkFem femWork incomePp income10p
## 1 NaN 413.40 37.140 NaN NaN NaN 1084 NaN
## 2 NaN 258.80 16.280 NaN NaN NaN 2034 NaN
## 3 NaN 257.60 23.200 NaN NaN NaN 4104 NaN
## 4 NaN 325.80 35.040 NaN NaN NaN 3298 NaN
## 5 NaN 135.80 10.760 NaN NaN NaN 3648 NaN
## 6 NaN 88.26 9.146 NaN NaN NaN 8152 NaN
## gini lifExpFem lifExpTot maleWork materMort vaccMeas schGenEq doctor teenFert
## 1 NaN 29.22 33.10 NaN NaN NaN NaN NaN NaN
## 2 NaN 55.88 55.34 NaN NaN NaN NaN NaN NaN
## 3 NaN 43.36 47.66 NaN NaN NaN NaN NaN NaN
## 4 NaN 32.72 37.56 NaN NaN NaN NaN NaN NaN
## 5 NaN 60.56 59.04 NaN NaN NaN NaN NaN NaN
## 6 NaN 64.92 61.50 NaN NaN NaN NaN NaN 62.4
Adecuación de data
Para este ejercicio vamos a trabajar con la data que corresponde al quinquenio 2000-2004.
data0004 <- dataWorld_q[dataWorld_q$quinq=="2000-2004",]
En esta ocasión, vamos a realizar un diagnóstico del comportamiento de los residuos de un modelo de regresión lineal simple. Considere las siguientes variables:
- Dependiente: Expectativa de vida femenina ("lifExpFem")
- Independiente 1: Médicos por 1000 habitantes ("doctor")
Primer paso: cálculo del modelo
modelo1 <- lm(lifExpFem ~ doctor, data = data0004)
summary(modelo1)
##
## Call:
## lm(formula = lifExpFem ~ doctor, data = data0004)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.053 -5.513 1.614 6.222 14.067
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 61.6726 0.8568 71.98 <2e-16 ***
## doctor 5.3042 0.4314 12.29 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.771 on 170 degrees of freedom
## (22 observations deleted due to missingness)
## Multiple R-squared: 0.4706, Adjusted R-squared: 0.4675
## F-statistic: 151.1 on 1 and 170 DF, p-value: < 2.2e-16
Segundo paso: Diagnóstico de residuos: exploración gráfica
autoplot(modelo1)
Tercer paso: Evaluación de supuestos
Linealidad: ¿Cumple o no cumple?
Normalidad: ¿Cumple o no cumple?
Homocedasticidad: ¿Cumple o no cumple?
Casos extremos influyentes: ¿Se observan?
Cuarto: paso: Propuesta de solución
Como propuesta de solución, vamos a tratar de especificar mejor el modelo 1. Para ello, incgresamos una segunda variable independiente: Cobertura de servicios básicos(%)(“sanitat”).
modelo2 <- lm(lifExpFem ~ doctor + sanitat, data = data0004)
stargazer(modelo1 , modelo2 , type = "text",
omit.stat=c("ser", "f"),
dep.var.labels = "Expectativa de vida femenina",
dep.var.caption = "Variable dependiente:",
star.cutoffs = c(0.05, 0.01, 0.001))
##
## ===========================================
## Variable dependiente:
## ------------------------------
## Expectativa de vida femenina
## (1) (2)
## -------------------------------------------
## doctor 5.304*** 1.197**
## (0.431) (0.411)
##
## sanitat 0.253***
## (0.018)
##
## Constant 61.673*** 50.403***
## (0.857) (0.968)
##
## -------------------------------------------
## Observations 172 168
## R2 0.471 0.765
## Adjusted R2 0.468 0.762
## ===========================================
## Note: *p<0.05; **p<0.01; ***p<0.001
autoplot(modelo2)
knitr::include_app("https://cesarcordova.shinyapps.io/residuos/", height = "1250px")
En este segundo ejercicio, Ud. debe calcular, por su cuenta, un “modelo3” de regresión lineal múltiple con las variables que se describen a continuación. Seguidamente, realice un diagnóstico ára los residuos del modelo:
Considere las siguientes variables:
- Dependiente: Tasa de fecundidad ("tfr")
- Independiente 1: Uso de anticonceptivos ("contracep")
- Independiente 2: Promedio de años de educación ("yearSchF")
Desarrolle los siguientes puntos
Diagnóstico de residuos: exploración gráfica
Evaluación de los supuesto del modelo
– Linealidad: ¿Cumple o no cumple?
– Normalidad: ¿Cumple o no cumple?
– Homocedasticidad: ¿Cumple o no cumple?
– Casos extremos influyentes: ¿Se observan?
En este último ejercicio, Ud. debe incomporar una variable adicional al “modelo4” que pueda resolver los problemas de falta de linealidad, homocedasticidad, normalidad y efecto palanca que se observan en el gráfico de diagnóstico de residuos.
Seguidamente, realice un diagnóstico para evaluar el comportamiento de los residuos de su modelo (“modelo5”):
modelo4 <- lm(tfr~incomePp , dataWorld_q)
summary(modelo4)
##
## Call:
## lm(formula = tfr ~ incomePp, data = dataWorld_q)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4369 -1.6677 -0.1994 1.6067 10.0085
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.865e+00 4.454e-02 109.22 <2e-16 ***
## incomePp -5.139e-05 2.273e-06 -22.61 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.866 on 2574 degrees of freedom
## (140 observations deleted due to missingness)
## Multiple R-squared: 0.1657, Adjusted R-squared: 0.1654
## F-statistic: 511.3 on 1 and 2574 DF, p-value: < 2.2e-16
autoplot(modelo4)