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