Ejercicio Práctico N° 2
A partir de la última base de microdatos disponible de la Encuesta Permanente de Hogares (EPH) calcular para Total 31 Aglomerados Urbanos las siguientes tasas desagregadas del mercado laboral: 1. Tasa de Actividad para: a) Hombres entre 25 y 65 años. b) Mujeres entre 25 y 65 años. c) Hombres entre 16 y 24 años. d) Hombres/Mujeres de más de 65 años.
Ej.: \(CV(TasaDeDesempleo) = \sqrt{CV(PEA)^2+CV(desempleados)^2}\) \(DS(TasaDeDesempleo) = TasaDeDesempleo * CV(TasaDeDesempleo)/100\) \(LimInf(TasaDeDesempleo) = TasaDeDesempleo-DS(TasaDeDesempleo)*1.64\)
Hacer click en el botón para ver el código con comentarios
library(eph)
library(tidyverse)
# cargo la tabla con los errores muestrales de la EPH
error201403TotalAglom <- read_csv(file = "~/Descargas/EPH/error201403TotalAglom.csv")
# construyo una función para facilitar la seleccion del DS o CV de la tabla de errores muestrales
# la funcion selecciona el elemento del vector "resultado" que cumpla la condicion de que
# la distancia entre el valor de referencia y el valor estimado es la mínima para el conjunto de elementos
closest <- function(valor, referencia, resultado = referencia) {
resultado[which.min(abs(referencia-valor))]
}
#TP 2 CALCULO DE TASAS
#cargo la ultima eph individual disponible
eph202001 <- get_microdata(year = 2020, trimester = 1, type = "individual",
vars = c("CH04", "CH06", "ESTADO", "PONDERA"))
#etiqueto las variables
eph202001 <- organize_labels(eph202001)
# calculo de valores para varones y mujeres de 25 a 65 años
grupo25a65 <- eph202001 %>%
#filtro por edad y selecciono solo grupo etario deseado
filter(CH06 >= 25 & CH06<= 65) %>%
#divido por genero para calcular por separado cada grupo
group_by(genero = as_factor(CH04)) %>%
#summarise envuelve los calculos deseados
summarise(edad = "25 a 65", #creo una columna edad para tener a mano la referencia,
PEA = sum(PONDERA[ESTADO == 1 | ESTADO == 2]), #calculo PEA bruto como suma de la ponderacion de casos que
# cumplan ESTADO == ocupado ó ESTADO == desocupado
totalPoblacion = sum(PONDERA), #procedimiento analogo para el total
tasaActividad = round(PEA/totalPoblacion*100,2), #calculo la tasa y redondeo a 2 digitos
CVppPEA = closest(PEA,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp), #acá use la función definida arriba para alla el CV
# la funcion devuelve el CV que corresponde al valor de referencia más cercano a la estimación realizada
CVpptotal = closest(totalPoblacion,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp), #idem anterior
CVtasaActividad = round(sqrt((CVppPEA)^2+(CVpptotal)^2),2), #calculo el CV de la tasa como la
# raiz cuadrada de a suma de los cuadrados de los coeficientes de variacion de las estimaciones que componen la tasa
# según el manual de error de la EPH.
DStasaActividad = round(tasaActividad*CVtasaActividad/100,2)
#calculo la DS de la tasa como el producto entre la tasa de actividad y su CV, redondeo a 2 digits
)
#para el resto de los casos se repite el procedimiento
varon16a24 <- eph202001 %>%
filter(CH04 == 01,CH06 >= 16 & CH06<= 24) %>%
summarise(genero = "Varon",
edad = "16 a 24",
PEA = sum(PONDERA[ESTADO == 1 | ESTADO == 2]),
totalPoblacion = sum(PONDERA),
tasaActividad = round(PEA/totalPoblacion*100,2),
CVppPEA = closest(PEA,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVpptotal = closest(totalPoblacion,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVtasaActividad = round(sqrt((CVppPEA)^2+(CVpptotal)^2),2),
DStasaActividad = round(tasaActividad*CVtasaActividad/100,2))
grupo66ymas <- eph202001 %>%
filter(CH06 >= 66) %>%
summarise(genero = "Varon + Mujer" ,
edad = "66 y más",
PEA = sum(PONDERA[ESTADO == 1 | ESTADO == 2]),
totalPoblacion = sum(PONDERA),
tasaActividad = round(PEA/totalPoblacion*100,2),
CVppPEA = closest(PEA,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVpptotal = closest(totalPoblacion,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVtasaActividad = round(sqrt((CVppPEA)^2+(CVpptotal)^2),2),
DStasaActividad = round(tasaActividad*CVtasaActividad/100,2))
#esta tabla y la siguiente es para desempleo
varon18a30 <- eph202001 %>%
filter(CH06 >= 18 & CH06<=30, CH04 == 01) %>%
summarise(genero = "Varon",
edad = "18 a 30",
desempleo = sum(PONDERA[ESTADO == 2]),
PEA = sum(PONDERA[ESTADO == 1 | ESTADO == 2]),
tasaDesempleo = round(desempleo/PEA*100,2),
CVppdesempleo = closest(desempleo,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVppPEA = closest(PEA,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVtasaDesempleo = round(sqrt((CVppPEA)^2+(CVppdesempleo)^2),2),
DStasaDesempleo = round(tasaDesempleo*CVtasaDesempleo/100,2))
mujer25a40 <- eph202001 %>%
filter(CH06 >= 25 & CH06<=40, CH04 == 02) %>%
summarise(genero ="Mujer", edad = "25 a 40",
desempleo = sum(PONDERA[ESTADO == 2]),
PEA = sum(PONDERA[ESTADO == 1 | ESTADO == 2]),
tasaDesempleo = round(desempleo/PEA*100,2),
CVppdesempleo = closest(desempleo,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVppPEA = closest(PEA,
error201403TotalAglom$estimacion,
error201403TotalAglom$CVpp),
CVtasaDesempleo = round(sqrt((CVppPEA)^2+(CVppdesempleo)^2),2),
DStasaDesempleo = round(tasaDesempleo*CVtasaDesempleo/100,2))
#reuno en una sola tabla todo lo calculado para actividad
tablaResumenActividad <- bind_rows(grupo25a65, varon16a24, grupo66ymas)
#a partir de esa tabla calculo los limites inferio y superior para un 90% de confianza
tablaConfianzaActividad <- tablaResumenActividad %>%
select(genero, edad, DStasaActividad,tasaActividad) %>%
mutate(
LiTasaActividad = round(tasaActividad - DStasaActividad*1.64,2),
LsTasaActividad = round(tasaActividad + DStasaActividad*1.64,2)
)
#hago lo mismo para desempleo
tablaResumenDesempleo <- bind_rows(varon18a30, mujer25a40)
tablaConfianzaDesempleo <- tablaResumenDesempleo %>%
select(genero, edad, DStasaDesempleo,tasaDesempleo) %>%
mutate(
LiTasaDesempleo = round(tasaDesempleo - DStasaDesempleo *1.64,2),
LsTasaDesempleo = round(tasaDesempleo + DStasaDesempleo *1.64,2)
)
tablaResumenActividad %>%
knitr::kable(format = "html", format.args = list(big.mark = ",")) %>%
kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "responsive"))
| genero | edad | PEA | totalPoblacion | tasaActividad | CVppPEA | CVpptotal | CVtasaActividad | DStasaActividad |
|---|---|---|---|---|---|---|---|---|
| Varon | 25 a 65 | 6,093,076 | 6,829,463 | 89.22 | 1.5 | 1.5 | 2.12 | 1.89 |
| Mujer | 25 a 65 | 4,981,276 | 7,486,139 | 66.54 | 1.5 | 1.5 | 2.12 | 1.41 |
| Varon | 16 a 24 | 1,014,206 | 2,099,233 | 48.31 | 3.4 | 1.9 | 3.89 | 1.88 |
| Varon + Mujer | 66 y más | 540,541 | 3,498,623 | 15.45 | 5.3 | 1.5 | 5.51 | 0.85 |
tablaConfianzaActividad %>%
knitr::kable(format = "html", format.args = list(big.mark = ",")) %>%
kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "responsive"))
| genero | edad | DStasaActividad | tasaActividad | LiTasaActividad | LsTasaActividad |
|---|---|---|---|---|---|
| Varon | 25 a 65 | 1.89 | 89.22 | 86.12 | 92.32 |
| Mujer | 25 a 65 | 1.41 | 66.54 | 64.23 | 68.85 |
| Varon | 16 a 24 | 1.88 | 48.31 | 45.23 | 51.39 |
| Varon + Mujer | 66 y más | 0.85 | 15.45 | 14.06 | 16.84 |
tablaResumenDesempleo %>%
knitr::kable(format = "html", format.args = list(big.mark = ",")) %>%
kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "responsive"))
| genero | edad | desempleo | PEA | tasaDesempleo | CVppdesempleo | CVppPEA | CVtasaDesempleo | DStasaDesempleo |
|---|---|---|---|---|---|---|---|---|
| Varon | 18 a 30 | 371,223 | 2,135,098 | 17.39 | 7.5 | 1.9 | 7.74 | 1.35 |
| Mujer | 25 a 40 | 250,651 | 2,285,768 | 10.97 | 9.8 | 1.8 | 9.96 | 1.09 |
tablaConfianzaDesempleo %>%
knitr::kable(format = "html", format.args = list(big.mark = ",")) %>%
kableExtra::kable_styling(bootstrap_options = c("striped", "hover", "responsive"))
| genero | edad | DStasaDesempleo | tasaDesempleo | LiTasaDesempleo | LsTasaDesempleo |
|---|---|---|---|---|---|
| Varon | 18 a 30 | 1.35 | 17.39 | 15.18 | 19.60 |
| Mujer | 25 a 40 | 1.09 | 10.97 | 9.18 | 12.76 |