Consignas del trabajo final

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.

Consigna 1

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"))

Consigna 2

Elabore las condiciones lógicas a través de filtros (filter()), que permitan seleccionar a los siguientes universos:

  • Mayores de 60 años. (CH06)
  • Mujeres y Hombres desocupados, en edad de trabajar (14 a 60 años). (CH06)
  • Hombres jefes de hogar, mayores de 18 años que no trabajan o son inactivos. (CH06 + ESTADO)
  • Hombres y mujeres en edad escolar (de 6 a 14 años) que trabajan actualmente. (CH06 + ESTADO)
  • Mujeres jefas de hogar desocupadas, niños de 0 a 8 años y adultos mayores de 65 años. (CH03 + CH06 + ESTADO)
  • Inactivos mayores de 24 años y menores de 65 años. (CH06 + ESTADO)
#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

Consigna 3

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.

  • Menores de 15 años.
  • De 16 años a 30 años
  • De 31 años a 45 años.
  • De 45 años a 60 años
  • Más de 60 años
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

Consigna 4

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

  • Código de identificación de la vivienda (CODUSU)
  • Código del hogar (NRO_HOGAR)
  • Región del país (REGION)
  • Aglomerado (AGLOMERADO)
  • Número de integrantes del hogar (IX_TOT)
  • Promedio del ingreso (variable p47_t es Monto de ingreso total (sumatoria de los ingresos laborales y los no laborales del individuo)).
  • Suma de ingresos de los integrantes del hogar (P47T, ITF)
  • Porcentaje de individuos menores de 12 años (CH04)
  • Porcentaje mayor de 60 años (CH04)
  • Porcentaje de individuos económicamente activos en el hogar (ESTADO)
  • Porcentaje de individuos desocupados en el hogar (ESTADO)
  • Inactivos mayores de 24 años y menores de 65 años. (ESTADO - CH04)
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>

Consigna 5

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"

Consigna 6.A

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

Consigna 6.B

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