El siguiente trabajo práctico es condición obligatoria para la promoción de la materia Introducción al Software Estadístico de la Maestría en Generación y Analisis de Información Estadística de la UNTREF. El mismo es de resolución individual.
Descarga la base de datos de EPH del segundo trimestre del 2020 de personas y hogares con la función get_microdata().
En el argumento vars de la función selecciona las siguientes variables:
INDIVIDUAL: CODUSU, NRO_HOGAR, REGION, AGLOMERADO, CH03, CH04, CH06, ESTADO, P47T, PONDERA
HOGAR: CODUSU, NRO_HOGAR, IX_TOT, II1 (También agregué ITF para realizar la consigna 4.)
#Carga de librerías
library(tidyverse)
library(eph)
library(kableExtra)
library(viridis)
#Carga de tabla individual
individuos <- get_microdata(year = 2020,
trimester = 2,
type = "individual",
vars = c("CODUSU","NRO_HOGAR","REGION","AGLOMERADO", "CH03",
"CH04", "CH06", "ESTADO", "P47T", "PONDERA"))
#Carga de tabla hogar
hogar <- get_microdata(year = 2020,
trimester = 2,
type = "hogar",
vars = c("CODUSU", "NRO_HOGAR","IX_TOT","II1", "ITF", "REGION", "AGLOMERADO"))
Elabore las condiciones lógicas a través de filtros (filter()), que permitan seleccionar a los siguientes universos:
#Mayores de 60 años
caso1 <- individuos %>%
filter(CH06 >= 60)
#Verifico mayores de 60
arrange(caso1, CH06) %>%
head()
## # A tibble: 6 x 10
## CODUSU NRO_HOGAR REGION AGLOMERADO CH03 CH04 CH06 ESTADO P47T PONDERA
## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 TQRMNOSUPH~ 1 42 27 1 1 60 3 2000 212
## 2 TQRMNORQVH~ 1 42 27 1 1 60 3 0 120
## 3 TQRMNORTYH~ 1 42 26 1 1 60 3 10000 346
## 4 TQRMNOSUYH~ 1 42 27 1 1 60 1 26000 137
## 5 TQRMNOTTQH~ 1 40 25 2 2 60 1 22000 148
## 6 TQRMNOQWRH~ 1 40 25 2 2 60 1 29000 108
#Mujeres y Hombres desocupados, en edad de trabajar (14 a 60 años).
caso2 <- individuos %>%
filter(CH06 < 61 & CH06 > 13, ESTADO == "2")
unique(caso2$ESTADO)
## [1] 2
arrange(caso2, CH06) %>%
head()
## # A tibble: 6 x 10
## CODUSU NRO_HOGAR REGION AGLOMERADO CH03 CH04 CH06 ESTADO P47T PONDERA
## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 TQSMNOPRPH~ 1 41 8 3 1 15 2 0 329
## 2 TQSMNOQWXH~ 1 43 30 3 2 16 2 0 327
## 3 TQRMNORPVH~ 1 40 23 3 1 16 2 0 305
## 4 TQRMNOQYPH~ 1 43 30 3 1 17 2 9800 172
## 5 TQRMNORXXH~ 1 43 6 3 1 17 2 0 214
## 6 TQRMNOSSXH~ 1 40 23 5 2 17 2 0 309
arrange(caso2, CH06) %>%
tail()
## # A tibble: 6 x 10
## CODUSU NRO_HOGAR REGION AGLOMERADO CH03 CH04 CH06 ESTADO P47T PONDERA
## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 TQRMNOPRWH~ 1 43 5 1 1 60 2 0 440
## 2 TQRMNOPXWH~ 1 43 4 1 1 60 2 5000 544
## 3 TQRMNORQYH~ 1 42 10 1 1 60 2 0 663
## 4 TQRMNOPVVH~ 1 41 8 1 1 60 2 30000 199
## 5 TQRMNOQWWH~ 1 43 13 1 1 60 2 0 1084
## 6 TQRMNOPRRH~ 1 40 19 2 1 60 2 10000 224
#Hombres jefes de hogar, mayores de 18 años que no trabajan o son inactivos.
str(individuos)
## tibble [37,132 x 10] (S3: tbl_df/tbl/data.frame)
## $ CODUSU : Factor w/ 11841 levels "TQRMNOPPQHJKKRCDEGPDJ00658291",..: 8987 8987 3478 3478 3478 3478 3478 3840 3840 6056 ...
## $ NRO_HOGAR : int [1:37132] 1 1 1 1 1 1 1 1 1 1 ...
## $ REGION : int [1:37132] 42 42 42 42 42 42 42 42 42 42 ...
## $ AGLOMERADO: int [1:37132] 26 26 26 26 26 26 26 26 26 26 ...
## $ CH03 : int [1:37132] 2 3 1 2 3 3 3 1 8 1 ...
## $ CH04 : int [1:37132] 2 1 1 2 2 1 1 1 1 2 ...
## $ CH06 : int [1:37132] 37 1 38 35 19 15 11 56 58 65 ...
## $ ESTADO : int [1:37132] 3 4 1 1 3 3 3 1 3 3 ...
## $ P47T : int [1:37132] 0 0 38000 40000 0 0 0 8000 11000 16000 ...
## $ PONDERA : int [1:37132] 316 316 120 120 120 120 120 120 120 101 ...
caso3 <- individuos %>%
filter(CH04 == 1 & CH03 == 1 & CH06 >= 18) %>%
filter(ESTADO == 2 | ESTADO == 3)
unique(caso3$CH04)
## [1] 1
unique(caso3$CH03)
## [1] 1
arrange(caso3, CH06) %>%
head()
## # A tibble: 6 x 10
## CODUSU NRO_HOGAR REGION AGLOMERADO CH03 CH04 CH06 ESTADO P47T PONDERA
## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 TQRMNOPTUH~ 1 41 7 1 1 18 2 6000 548
## 2 TQRMNOPTXH~ 1 43 14 1 1 18 3 12000 214
## 3 TQRMNORTTH~ 1 43 13 1 1 18 3 25000 426
## 4 TQRMNOPUYH~ 1 40 19 1 1 18 3 0 109
## 5 TQRMNOQTTH~ 1 41 15 1 1 19 3 0 135
## 6 TQRMNOSURH~ 2 43 13 1 1 19 3 30000 537
unique(caso3$ESTADO)
## [1] 3 2
#Hombres y mujeres en edad escolar (de 6 a 14 años) que trabajan actualmente.
caso4 <- individuos %>%
filter(CH06 >= 6, CH06 <= 14, ESTADO == 1)
unique(caso4$CH06)
## [1] 14
unique(caso4$ESTADO)
## [1] 1
#Mujeres jefas de hogar desocupadas, niños de 0 a 8 años y adultos mayores de 65 años.
str(individuos)
## tibble [37,132 x 10] (S3: tbl_df/tbl/data.frame)
## $ CODUSU : Factor w/ 11841 levels "TQRMNOPPQHJKKRCDEGPDJ00658291",..: 8987 8987 3478 3478 3478 3478 3478 3840 3840 6056 ...
## $ NRO_HOGAR : int [1:37132] 1 1 1 1 1 1 1 1 1 1 ...
## $ REGION : int [1:37132] 42 42 42 42 42 42 42 42 42 42 ...
## $ AGLOMERADO: int [1:37132] 26 26 26 26 26 26 26 26 26 26 ...
## $ CH03 : int [1:37132] 2 3 1 2 3 3 3 1 8 1 ...
## $ CH04 : int [1:37132] 2 1 1 2 2 1 1 1 1 2 ...
## $ CH06 : int [1:37132] 37 1 38 35 19 15 11 56 58 65 ...
## $ ESTADO : int [1:37132] 3 4 1 1 3 3 3 1 3 3 ...
## $ P47T : int [1:37132] 0 0 38000 40000 0 0 0 8000 11000 16000 ...
## $ PONDERA : int [1:37132] 316 316 120 120 120 120 120 120 120 101 ...
caso5 <- individuos %>%
filter((CH04 == 2 & ESTADO == 2 & CH03 == 1)| (CH04 == 1 & CH06 >= 0 & CH06 < 9) | (CH04 == 1 & CH06 > 64))
arrange(caso5, CH06) %>%
head()
## # A tibble: 6 x 10
## CODUSU NRO_HOGAR REGION AGLOMERADO CH03 CH04 CH06 ESTADO P47T PONDERA
## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 TQRMNORYPH~ 1 42 26 3 1 1 4 0 316
## 2 TQRMNORTYH~ 1 42 27 3 1 1 4 0 283
## 3 TQRMNORQQH~ 1 42 26 5 1 1 4 0 147
## 4 TQRMNOQRPH~ 1 42 27 3 1 1 4 0 275
## 5 TQRMNOSRRH~ 1 42 26 3 1 1 4 0 279
## 6 TQSMNOTVUH~ 2 42 27 3 1 1 4 0 295
#Chequeo filtro de mujeres, jefas de hogar, desocupadas.
chequear<- caso5 %>%
filter(CH04 == 2)
unique(chequear$ESTADO)
## [1] 2
unique(chequear$CH03)
## [1] 1
#Inactivos mayores de 24 años y menores de 65 años.
caso6 <- individuos %>%
filter(ESTADO == 3 & CH06 > 23 & CH06 < 65)
unique(caso6$ESTADO)
## [1] 3
arrange(caso6, CH06) %>%
head()
## # A tibble: 6 x 10
## CODUSU NRO_HOGAR REGION AGLOMERADO CH03 CH04 CH06 ESTADO P47T PONDERA
## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 TQRMNORRYH~ 1 42 27 2 2 24 3 20000 485
## 2 TQRMNOQYTH~ 1 42 27 3 2 24 3 16000 578
## 3 TQRMNORQPH~ 1 40 25 1 2 24 3 23000 240
## 4 TQRMNOSSYH~ 1 40 25 3 2 24 3 19500 140
## 5 TQRMNORXWH~ 1 40 25 3 1 24 3 0 155
## 6 TQRMNOPRSH~ 1 42 26 3 2 24 3 10000 316
arrange(caso6, CH06) %>%
tail()
## # A tibble: 6 x 10
## CODUSU NRO_HOGAR REGION AGLOMERADO CH03 CH04 CH06 ESTADO P47T PONDERA
## <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int>
## 1 TQRMNORYPH~ 1 40 23 1 1 64 3 25000 403
## 2 TQRMNOQXYH~ 1 40 23 2 2 64 3 8000 233
## 3 TQRMNOPPYH~ 1 40 23 8 2 64 3 13000 278
## 4 TQRMNOQQXH~ 1 40 25 2 2 64 3 17000 155
## 5 TQRMNORTPH~ 1 44 20 1 1 64 3 30000 140
## 6 TQRMNOSSSH~ 1 44 93 1 1 64 3 -9 130
Recodifique la variable edad usando la función mutate(), teniendo en cuenta los siguientes grandes agrupamientos usando la función (case_when()). Crea un objeto: base_rec.
base_rec <- individuos %>%
mutate(rango_etario = case_when( CH06 >= 0 & CH06 < 15 ~ 'Menores de 15',
CH06 >= 16 & CH06 < 31 ~ 'De 16 a 30',
CH06 >= 31 & CH06 < 46 ~ 'De 31 a 45',
CH06 >= 45 & CH06 < 61 ~ 'De 45 a 60',
CH06 >= 61 ~ 'Más de 60')) %>% filter (!is.na (rango_etario))
unique(base_rec$rango_etario)
## [1] "De 31 a 45" "Menores de 15" "De 16 a 30" "De 45 a 60"
## [5] "Más de 60"
verifico <- base_rec %>%
select(CH06, rango_etario) %>%
head()
kable(verifico) %>%
kable_styling(bootstrap_options = "striped",
full_width = T,
position = "left")
| CH06 | rango_etario |
|---|---|
| 37 | De 31 a 45 |
| 1 | Menores de 15 |
| 38 | De 31 a 45 |
| 35 | De 31 a 45 |
| 19 | De 16 a 30 |
| 11 | Menores de 15 |
Elabore una base de datos agregada, a partir de los datos del objeto base_rec, que describan las siguientes características de los hogares usando group_by() y summarise(). Mantené el CODUSU y el NRO_HOGAR
base_completa <- left_join(hogar, base_rec, by = c("CODUSU", "NRO_HOGAR", "REGION", "AGLOMERADO"))
base_agregada <- base_completa %>%
group_by(CODUSU, NRO_HOGAR, REGION, AGLOMERADO) %>%
summarize(NUM_INT_HOGAR = n(),
PONDERA = sum(PONDERA),
INGRESO_HOGAR = sum(P47T [P47T>0], na.rm = T),
PROMEDIO_INGRESO = INGRESO_HOGAR/NUM_INT_HOGAR,
MENORES_12 = sum(CH06<12, na.rm = T)/NUM_INT_HOGAR*100,
MAYORES_60 = sum(CH06 >= 60, na.rm = T)/NUM_INT_HOGAR*100,
PORC_EA = sum(ESTADO == 1| ESTADO == 2, na.rm = T)/NUM_INT_HOGAR*100,
PORC_DES = sum(ESTADO == 2, na.rm = T)/NUM_INT_HOGAR*100,
INAC = (sum (ESTADO == 3 & CH06 >= 24 & CH06 < 65, na.rm = T))) %>%
ungroup()
base_agregada
## # A tibble: 11,976 x 13
## CODUSU NRO_HOGAR REGION AGLOMERADO NUM_INT_HOGAR PONDERA INGRESO_HOGAR
## <fct> <int> <int> <int> <int> <int> <int>
## 1 TQRMN~ 1 40 19 1 234 67000
## 2 TQRMN~ 1 44 17 2 442 27000
## 3 TQRMN~ 1 40 19 6 2040 89500
## 4 TQRMN~ 1 44 17 1 229 83000
## 5 TQRMN~ 1 42 10 1 389 25000
## 6 TQRMN~ 1 42 10 6 2640 60000
## 7 TQRMN~ 1 43 36 3 558 78600
## 8 TQRMN~ 1 1 33 3 15135 103000
## 9 TQRMN~ 1 42 10 1 405 10000
## 10 TQRMN~ 1 43 30 1 118 130000
## # ... with 11,966 more rows, and 6 more variables: PROMEDIO_INGRESO <dbl>,
## # MENORES_12 <dbl>, MAYORES_60 <dbl>, PORC_EA <dbl>, PORC_DES <dbl>,
## # INAC <int>
Unir las características del hogar a la base de datos anterior y agrupar por REGION y AGLOMERADO. ¿Qué porcentaje vive en condiciones de hacinamiento en los AGLOMERADOS? Recorda usar el PONDERA.
base_completa <- left_join(base_agregada, hogar, by = c("CODUSU", "NRO_HOGAR", "AGLOMERADO", "REGION"))
consigna5 <- base_completa %>%
filter( II1 >= 1, II1 < 99) %>%
group_by(REGION, AGLOMERADO) %>%
mutate(
hacinamiento = IX_TOT/II1,
grado_hacinamiento = if_else(hacinamiento >= 3,
"+3 personas",
"-2.9 personas"))
hacinamiento_5 <- consigna5 %>%
group_by(AGLOMERADO) %>%
summarise(ind_hac = sum(PONDERA[grado_hacinamiento =="+3 personas"]),
ind_tot = sum(PONDERA),
porcentaje_hacinamiento= ind_hac/ind_tot * 100) %>%
organize_labels("hogar")
kable(hacinamiento_5) %>%
kable_styling(bootstrap_options = "striped",
full_width = T,
position = "left")
| AGLOMERADO | ind_hac | ind_tot | porcentaje_hacinamiento |
|---|---|---|---|
| 2 | 94500 | 866233 | 10.909305 |
| 3 | 16759 | 310898 | 5.390514 |
| 4 | 64193 | 1291816 | 4.969206 |
| 5 | 34576 | 517136 | 6.686056 |
| 6 | 17259 | 275366 | 6.267658 |
| 7 | 0 | 352471 | 0.000000 |
| 8 | 23150 | 402257 | 5.755027 |
| 9 | 53576 | 230324 | 23.261145 |
| 10 | 90355 | 995534 | 9.076034 |
| 12 | 27185 | 366532 | 7.416815 |
| 13 | 168193 | 1526610 | 11.017418 |
| 14 | 19331 | 156407 | 12.359421 |
| 15 | 31138 | 244247 | 12.748570 |
| 17 | 28325 | 292819 | 9.673211 |
| 18 | 30672 | 391231 | 7.839869 |
| 19 | 18239 | 335900 | 5.429890 |
| 20 | 4617 | 119113 | 3.876151 |
| 22 | 24459 | 217314 | 11.255142 |
| 23 | 68044 | 616474 | 11.037611 |
| 25 | 15481 | 215412 | 7.186693 |
| 26 | 21442 | 228830 | 9.370275 |
| 27 | 53493 | 514581 | 10.395448 |
| 29 | 100087 | 867478 | 11.537699 |
| 30 | 11597 | 125728 | 9.223880 |
| 31 | 8187 | 160676 | 5.095347 |
| 32 | 137010 | 2950814 | 4.643126 |
| 33 | 1053509 | 12010052 | 8.771894 |
| 34 | 20360 | 627957 | 3.242260 |
| 36 | 23569 | 173163 | 13.610875 |
| 38 | 8202 | 190169 | 4.313006 |
| 91 | 12780 | 142703 | 8.955663 |
| 93 | 6061 | 80317 | 7.546348 |
#Verifico posadas (aglomerado 7)
ver <- consigna5 %>%
filter(AGLOMERADO == 7)
unique(ver$grado_hacinamiento)
## [1] "-2.9 personas"
Realice un gráfico de cajas boxplot, mostrando la distribución de la variable de la suma de los ingresos del hogar por cada región.
consigna6 <- base_agregada %>%
organize_labels(type = "hogar")
options(scipen = 999)
boxplot <- consigna6 %>%
group_by(REGION) %>%
ggplot(aes(x = factor(REGION),
y = INGRESO_HOGAR,
fill=factor(REGION))) +
geom_boxplot() +
theme_bw()+
theme(plot.title = element_text(size=12, face = "bold.italic", color = "#2e2959"),
axis.text.y = element_text(size = 8, color = "#2e2959"),
axis.text.x = element_text(size = 8, color = "#2e2959"),
axis.title.x = element_text(color = "#2e2959"),
axis.title.y = element_text(color = "#2e2959"),
plot.caption = element_text(color = "#2e2959"),
legend.text = element_text(color = "#2e2959"),
legend.title = element_text(color = "#2e2959"),
plot.subtitle = element_text(color = "#2e2959")) +
ylab("Ingresos por hogar")+
xlab("Regiones")+
labs(title = "Distribución de suma de ingresos por Región.",
subtitle = "Argentina, 2° trimestre del 2020.",
caption = "Fuente: elaborado en base a datos de INDEC")+
coord_flip()+
scale_fill_brewer("Región", palette = "Paired")+
scale_y_continuous(limits = c(0, 400000),
breaks = waiver())
boxplot
Volviendo a la tabla de individuos, calcúle el procentaje de desocupación por aglomerados y realice un gráfico de barras o columnas con el porcentaje de desocupación por cada aglomerado.
desocupacion <- individuos %>%
filter(ESTADO == 1 | ESTADO == 2) %>%
group_by(AGLOMERADO, REGION) %>%
summarise(DESO = sum(PONDERA[ESTADO == 2], na.rm = T),
TOTAL = sum(PONDERA),
PORCENTAJE = (DESO/TOTAL)*100)
desocupacion <- desocupacion %>%
organize_labels(type = "hogar")
desocupacion$PORCENTAJE <- round(desocupacion$PORCENTAJE, 2)
barras <- ggplot(data = desocupacion) +
aes(x=reorder(AGLOMERADO,-PORCENTAJE),
y=PORCENTAJE,
fill= as.factor(REGION)) +
geom_bar (stat="identity",
position = "dodge",
group =1,
width= 0.50) +
geom_text(aes(label=PORCENTAJE),
vjust= -0.6,
color="#2e2959",
size= 2.5,
face = "bold",
angle = 20) +
labs(title="Porcentaje de desocupados por aglomerado.",
subtitle="Argentina, 2º trimestre del 2020.",
x="Aglomerados",
y="% de desocupados",
caption = "Fuente: elaborado en base a datos de INDEC") +
theme_bw() +
theme(axis.text.x = element_text(angle = 90,
hjust= 1,
vjust = 0.2,
size = 8,
colour = "#2e2959"),
plot.title = element_text(size=12, face = "bold.italic", color = "#2e2959"),
axis.text.y = element_text(size = 8, color = "#2e2959"),
axis.title.x = element_text(color = "#2e2959"),
axis.title.y = element_text(color = "#2e2959"),
plot.caption = element_text(color = "#2e2959"),
plot.subtitle = element_text(color = "#2e2959"),
legend.position = "null") +
scale_fill_viridis(discrete = TRUE,
option = "C", "Región" ) +
scale_y_continuous(limits = c(0, 30),
breaks = seq(0, 30, by = 5),
labels = sprintf("%.2f%%", seq(0,30, by = 5)))
barras