Introducción

En este instructivo veremos cómo trabajar con información que está desagregada en unidades de análisis pequeñas, para agregarla en unidades de análisis mayores.

Para ello utilizaremos el Módulo 7 de la ENAHO sobre gasto en alimentos y bebidad del hogar. En este módulo se registra las compras que hace el hogar por cada item de alimentos y bebidas. La información está desagregada por tipo de item específico. El objetivo será agregar los datos por hogar.

Carga de datos

library(foreign)

modulo7 <- read.spss("Enaho01-2019-601.sav", to.data.frame = T)

names(modulo7)
##  [1] "AÑO"       "MES"       "NCONGLOME" "CONGLOME"  "VIVIENDA"  "HOGAR"    
##  [7] "UBIGEO"    "DOMINIO"   "ESTRATO"   "P601A"     "P601X"     "P601B"    
## [13] "P601A1"    "P601A2"    "P601A3"    "P601A4"    "P601A5"    "P601A6"   
## [19] "P601A7"    "P601B1"    "P601B2"    "P601B3"    "P601B4"    "P601C"    
## [25] "P601D1"    "P601D2"    "P601D3"    "I601B2"    "I601C"     "I601D2"   
## [31] "PRODUC61"  "TICUEST01" "D601C"     "BLIBRE19"  "T601A71"   "T601A72"  
## [37] "I601E"     "FACTOR07"

Selección de variables con las que vamos a trabajar

Vamos a agregar información para determinar qué porcentaje de las compras o gasto en alimentos de los hogares (variable I601C) se hace en los diferentes canales de compra (variable P601B4).

Trabajaremos con un subconjunto de las variables del módulo 7, además de las dos variables previamente mencionadas, necesitaremos aquellas que identificar el hogar (CONGLOME, VIVIENDA, HOGAR), el DOMINIO de residencia, y el factor de expansión del hogar (FACTOR07)

mis.vars <- c("CONGLOME", "VIVIENDA", "HOGAR", "DOMINIO","P601B4", 
              "I601C", "FACTOR07")

compras <- modulo7[mis.vars]

head(compras)
##   CONGLOME VIVIENDA HOGAR      DOMINIO    P601B4    I601C FACTOR07
## 1   005009      041    11 Sierra Norte      <NA> 157.0334 94.21821
## 2   005009      041    11 Sierra Norte      <NA>       NA 94.21821
## 3   005009      041    11 Sierra Norte      <NA>       NA 94.21821
## 4   005009      041    11 Sierra Norte      <NA>       NA 94.21821
## 5   005009      041    11 Sierra Norte      <NA>       NA 94.21821
## 6   005009      041    11 Sierra Norte Panadería 157.0334 94.21821

Agregar el monto de compras por canal de compra

Lo primero que haremos es sumar el monto de compras en alimentos por cada canal de compra. Utilizaremos las funciones del paquete dplyr para transformar y agregar los datos con los que vamos a trabajar. Para conocer el un poco más acerca de dplyr ver el siguiente enlace.

library(dplyr)
compras.t <-  compras %>%
  group_by(CONGLOME, VIVIENDA, HOGAR, FACTOR07, DOMINIO, P601B4) %>%
  summarise_all(funs(sum))

head(compras.t)
## # A tibble: 6 x 7
## # Groups:   CONGLOME, VIVIENDA, HOGAR, FACTOR07, DOMINIO [1]
##   CONGLOME VIVIENDA HOGAR FACTOR07 DOMINIO      P601B4                     I601C
##   <chr>    <chr>    <chr>    <dbl> <fct>        <fct>                      <dbl>
## 1 005001   007      11        79.7 Sierra Norte Ambulante (triciclo, etc.)  304.
## 2 005001   007      11        79.7 Sierra Norte Bodega (por menor)          836.
## 3 005001   007      11        79.7 Sierra Norte Bodega (por mayor)         2961.
## 4 005001   007      11        79.7 Sierra Norte Mercado (por mayor)        2506.
## 5 005001   007      11        79.7 Sierra Norte Feria                       953.
## 6 005001   007      11        79.7 Sierra Norte <NA>                         NA

Seguidamente vamos a calcular para cada hogar, el total de compras de alimentos, y luego el porcentaje de la compra que corresponde a cada canal de compra:

compras.t.pc <- na.omit(compras.t) %>%
  group_by(CONGLOME, VIVIENDA, HOGAR, FACTOR07, DOMINIO) %>%
  mutate(total.c = sum(I601C)) %>%                              #Suma de compras
  group_by(P601B4, add = T) %>%
  mutate(pct.compra = (round(100*I601C/total.c, 2)))                   # % de compras

head(compras.t.pc)
## # A tibble: 6 x 9
## # Groups:   CONGLOME, VIVIENDA, HOGAR, FACTOR07, DOMINIO, P601B4 [6]
##   CONGLOME VIVIENDA HOGAR FACTOR07 DOMINIO   P601B4     I601C total.c pct.compra
##   <chr>    <chr>    <chr>    <dbl> <fct>     <fct>      <dbl>   <dbl>      <dbl>
## 1 005001   007      11        79.7 Sierra N~ Ambulante~  304.   7560.       4.02
## 2 005001   007      11        79.7 Sierra N~ Bodega (p~  836.   7560.      11.1 
## 3 005001   007      11        79.7 Sierra N~ Bodega (p~ 2961.   7560.      39.2 
## 4 005001   007      11        79.7 Sierra N~ Mercado (~ 2506.   7560.      33.1 
## 5 005001   007      11        79.7 Sierra N~ Feria       953.   7560.      12.6 
## 6 005001   017      11        79.7 Sierra N~ Ambulante~  332.   7558.       4.39

Agregar información por DOMINIO

Supongamos que nos interesa saber, para cada dominio, cuál es el porcentaje promedio sobre el gasto en alimentos que se realiza en los supermercados, entre aquellos hogares que usan ese canal de compra.

Para ellos debemos agregar la información por dominio geográfico, calculando la media ponderada del porcentaje de compras por canal de compra, según el factor de ponderación:

library(Hmisc)

compras.t.pc.d <- compras.t.pc[, -c(1:3, 8)] %>%
  group_by(DOMINIO, P601B4) %>%
  summarise(prom.pct = wtd.mean(pct.compra, FACTOR07))

head(compras.t.pc.d)
## # A tibble: 6 x 3
## # Groups:   DOMINIO [1]
##   DOMINIO     P601B4                     prom.pct
##   <fct>       <fct>                         <dbl>
## 1 Costa Norte Ambulante (triciclo, etc.)    10.9 
## 2 Costa Norte Bodega (por menor)            29.5 
## 3 Costa Norte Bodega (por mayor)             8.47
## 4 Costa Norte Panadería                      5.11
## 5 Costa Norte Mercado (por menor)           52.9 
## 6 Costa Norte Mercado (por mayor)           21.7

A partir de la última base de datos podemos presentar la información en un gráfico:

library(ggplot2)

ggplot(subset(compras.t.pc.d, P601B4 == "Supermercado"),
       aes(x= reorder(DOMINIO, prom.pct), y=prom.pct)) +
  geom_bar(stat = "identity") + 
  xlab(" ") + ylab("% de las compras") +
  ggtitle("PERU 2019 - HOGARES QUE COMPRAN EN SUPERMERCADOS: \nPORCENTAJE DE LAS COMPRAS EN SUPERMERCADOS \nSOBRE EL TOTAL DE COMPRAS DE ALIMENTOS SEGÚN \nDOMINIO GEOGRÁFICO") + 
  coord_flip() +
  theme_bw()

Si nos interesa lo mismo respecto de las bodegas al por menor:

ggplot(subset(compras.t.pc.d, P601B4 == "Bodega (por menor)"),
       aes(x= reorder(DOMINIO, prom.pct), y=prom.pct)) +
  geom_bar(stat = "identity") + 
  xlab(" ") + ylab("% de las compras") +
  ggtitle("PERU 2019 - HOGARES QUE COMPRAN EN BODEGAS AL POR \nMENOR: PORCENTAJE DE LAS COMPRAS EN BODEGAS \nSOBRE EL TOTAL DE COMPRAS DE ALIMENTOS SEGÚN \nDOMINIO GEOGRÁFICO") + 
  coord_flip() +
  theme_bw()