Vamos a trabajar con dos set de datos. El primero, es un dataset
(.wb_bank_data_2019.csv) con información construida por el
Banco Mundial acerca de la distribución de la población ocupada según
grandes sectores de actividad y categoría ocupacional:
SL.AGR.EMPL.ZS: % total el empleo en agricultura:
consistente en las actividades de agricultura, silvicultura, caza y
pescaSL.IND.EMPL.ZS: % total de empleo en industria: en
actividades de minas y canteras, manufacturas, construcción y energía,
gas y agua.SL.SERV.EMPL.ZS % total de empleo el servicios
comprende comercio al por mayor y menor y restaurantes y hoteles,
transporte, almacenamiento y comunicaciones, finanzas, seguros,
servicios inmobiliarios y a las empresas y servicios personales,
sociales y comunales.SL.FAM.WORK.ZS: % total de trabajadores familiaresSL.EMP.MPYR.ZS: % total de empleadoresSL.EMP.SELF.ZS: % total de independientes (cuenta
propias)SL.EMP.WORK.ZS: % total de trabajadores
asalariadosEl segundo (HDI_HDR2020_040722.csv) son las componentes
del Human Development Index (HDI) elaborado por UNDP para el período
1992-2019. El HDI es un promedio a nivel país de cuatro variables
fundamentales:
En el dataset va a encontrarlas llamadas de la siguiente forma: -
le_2019: expectativa de vida al nacer de la población -
eys_2019: años “esperados” de escolaridad de la población -
mys_2019: años promedios de escolaridad -
gnipc_2019: producto bruto interno per cápita -
hdi_2019: HDI para el país
En ambos datasets van a encontrar los códigos de país
(iso3c) y las etiquetas de país (country)
Cargue los dos datasets. ¿Cuál es la estructura de los datos? ¿Qué formato tienen? ¿Cuál es la unidad de análisis y cuáles las variables? ¿Cuál es el alcance temporal y geográfico?
> df <- read_csv('./data/wb_bank_data_2019.csv')
> hdi <- read_csv('./data/HDI_HDR2020_040722.csv')
>
> df <- df %>%
+ pivot_wider(id_cols = c(iso3c, iso2c, country), names_from = indicatorID, values_from = value)
Seleccione del dataset del HDI solamente las columnas que corresponden al año 2019.
> hdi <- hdi %>%
+ select(iso3c, country, contains("_2019"))
>
Con el dataset recortado, realice un join para tener todas las variables en una sola tabla. ¿Qué variable debería usar para vincular ambas tablas?
> final <- hdi %>%
+ left_join(
+ df %>% select(-country)
+ )
>
> final <- final %>% drop_na()
>
’¿Qué relacion existe (si es que existe) entre el HDI y la proporción de población asalariada? ¿Y entre el HDI y la proporción de población en el sector agropecuario?
> final %>%
+ ggplot() +
+ geom_point(aes(x=SL.EMP.WORK.ZS, y=hdi_2019)) +
+ ylim(0,1) +
+ xlim(0,100) +
+ theme_minimal()
> final %>%
+ ggplot() +
+ geom_point(aes(x=SL.AGR.EMPL.ZS, y=hdi_2019)) +
+ ylim(0,1) +
+ xlim(0,100) +
+ theme_minimal()
Correlación
> final %>%
+ select(SL.AGR.EMPL.ZS,SL.EMP.WORK.ZS, hdi_2019) %>%
+ cor(., method='pearson')
## SL.AGR.EMPL.ZS SL.EMP.WORK.ZS hdi_2019
## SL.AGR.EMPL.ZS 1.0000000 -0.9044272 -0.8401293
## SL.EMP.WORK.ZS -0.9044272 1.0000000 0.8735794
## hdi_2019 -0.8401293 0.8735794 1.0000000
Queremos construir información sobre la relación entre el PBI per
cápita (gnipc_2019) y variables relativas a la educación, a
la salud y al grado de desarrollo capitalista del país. Entrenar una
regresión lineal múltiple con las variables que considere
relevantes.
> final <- final %>%
+ mutate(gnipc_2019_log = log10(gnipc_2019))
>
> lm_1 <- final %>%
+ lm(gnipc_2019_log ~ le_2019 + mys_2019 + SL.AGR.EMPL.ZS + SL.SRV.EMPL.ZS + SL.EMP.WORK.ZS -gnipc_2019_log, data = .)
>
> summary(lm_1)
##
## Call:
## lm(formula = gnipc_2019_log ~ le_2019 + mys_2019 + SL.AGR.EMPL.ZS +
## SL.SRV.EMPL.ZS + SL.EMP.WORK.ZS - gnipc_2019_log, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.52606 -0.09054 0.00492 0.11069 0.80886
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.860987 0.295885 6.290 2.57e-09 ***
## le_2019 0.020951 0.003577 5.857 2.36e-08 ***
## mys_2019 0.039773 0.008888 4.475 1.39e-05 ***
## SL.AGR.EMPL.ZS -0.002743 0.002492 -1.101 0.272569
## SL.SRV.EMPL.ZS 0.001323 0.002404 0.550 0.582827
## SL.EMP.WORK.ZS 0.005265 0.001518 3.468 0.000664 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2003 on 171 degrees of freedom
## Multiple R-squared: 0.8477, Adjusted R-squared: 0.8432
## F-statistic: 190.3 on 5 and 171 DF, p-value: < 2.2e-16
Chequeen los residuos del modelo. ¿Qué herramienta gráfica pueden usar para eso? ¿Son aleatorios?
> resids <- tibble(
+ iso3c = final$iso3c,
+ gnipc = final$gnipc_2019_log,
+ gnipc_log_pred = predict(lm_1, final),
+ resid = gnipc - gnipc_log_pred
+ )
>
> resids %>%
+ ggplot(aes(x=gnipc_log_pred, y=resid, color=resid)) +
+ geom_point() +
+ scale_color_viridis_c() +
+ geom_hline(yintercept = 0, linetype='dashed') +
+ theme_minimal()
Realicen un histograma de los residuos. ¿Qué forma tienen?
> resids %>%
+ ggplot() +
+ geom_histogram(aes(x=resid)) +
+ theme_minimal()
> plot(lm_1)
¿Parece que la condición de variabilidad constante del modelo es respetada? ¿Por qué?
> ###
¿Hay multicolinealidad en el modelo? ¿De qué grado? ¿Es un problema?
> vif(lm_1)
## le_2019 mys_2019 SL.AGR.EMPL.ZS SL.SRV.EMPL.ZS SL.EMP.WORK.ZS
## 3.166152 3.442897 12.643221 7.636922 7.335243
¿Cuál es el ajuste del modelo?
> summary(lm_1)$adj.r.squared
## [1] 0.8432293
¿Cómo interpreta los resultados del modelo? ¿Cuál es, en su opinion, la variable más importante?
> lm_scaled <- final %>%
+ select(gnipc_2019_log, le_2019, mys_2019, SL.AGR.EMPL.ZS, SL.SRV.EMPL.ZS, SL.EMP.WORK.ZS) %>%
+ mutate(across(everything(), scale)) %>%
+ lm(gnipc_2019_log ~ ., data=.)
> tidy(lm_scaled)
## # A tibble: 6 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -4.73e-16 0.0298 -1.59e-14 1.000
## 2 le_2019 3.11e- 1 0.0531 5.86e+ 0 0.0000000236
## 3 mys_2019 2.48e- 1 0.0554 4.47e+ 0 0.0000139
## 4 SL.AGR.EMPL.ZS -1.17e- 1 0.106 -1.10e+ 0 0.273
## 5 SL.SRV.EMPL.ZS 4.54e- 2 0.0825 5.50e- 1 0.583
## 6 SL.EMP.WORK.ZS 2.80e- 1 0.0808 3.47e+ 0 0.000664