Limpieza ENAHO
El siguiente archivo prentende limpiar la data perteneciente al módulo 100 de la ENAHO 2024. A continuación iremos paso a paso.
Nuestras variables de interés son las siguientes:
ubigeo: Ubicación geográfica
estrato: Estrato geográfico (Rango: 1-8)
- De 500 000 a más habitantes
- De 100 000 a 499 999 habitantes
- De 50 000 a 99 999 habitantes
- De 20 000 a 49 999 habitantes
- De 2 000 a 19 999 habitantes
- De 500 a 1 999 habitantes
- Área de Empradonamiento Rural (AER) Compuesto
- Área de Empradonamiento Rural (AER) Simple
P110: El agua que utilizan en el hogar procede principalmente de: (Rango 1-8)
- Red pública, dentro de la vivienda
- Red pública, fuera de la vivienda pero dentro del edificio
- Pilón o pileta de uso público
- Camión-cisterna u otro similar
- Pozo (agua subterránea)
- Manantial o puquio
- Otra
- Río, acequia, lago, laguna
P110A1: ¿El agua es potable? (Rango 1-2)
- Sí
- No
P110A: Nivel de cloro residual del agua (Rango 1-3)
- Seguro
- Inadecuada dosificación de Cloro
- Sin Cloro
- Missing value
P110C: ¿El hogar tiene acceso al servicio de agua todos los días de la semana (Rango 1-2)
- Sí
- No
- Missing value
P110C1: ¿Cuántas horas al dia? (Rango 1-24)
P110C2: ¿Cuántos días a la semana tiene este servicio? (Rango 1-7)
P110C3: ¿Cuántas horas al día? (Rango 1-24)
P110F: ¿Pagan por el servicio de agua? (Rango 1-2)
- Sí
- No
P110G: ¿A qué empresa o entidad se paga por el servicio de agua? (Rango 1-5)
- Empresa prestadora del servicios (EPS-SEDA-EMAPA=)
- Municipalidad
- Organización Comunal
- Camión cisterna
- Otro
P1172$01: El último gasto mensual por consumo de: Agua, ¿pagado por algún miembro de este hogar?
P1173$01: El último gasto mensual por consumo de: Agua. ¿donado o regalado por algún miembro de otro hogar?
P1174$01: El último gasto mensual por consumo de: Agua, ¿autoconsumo o autosuministro?
D1172$01: El último gasto mensual de: Agua, pagado por mimebro de este hogar
T110: (Recodificado) El abastecimiento de agua en su hogar procede de: (Rango: 1-9)
- Red pública, dentro de la vivienda
- Red pública, fuera de la vivienda pero dentro del edificio
- Pilón o pileta de uso público
- Camión-cisterna u otro similar
- Pozo (agua subterránea)
- Manantial o puquio
- Otra
- Río, acequia, lago, laguna
- Agua potable del vecino
1. Instalación de paquetes
2. Carga de librerías
4. Limpieza de datos
# Seleccionamos variables
enaho_agua <- enaho %>%
select(ubigeo, estrato, p110, p110a1, p110a, p110c, p110c1, p110c2, p110c3,
p110f, p110g, p1172_01, p1173_01, p1174_01, d1172_01, t110)
enaho_agua_f <- enaho_agua %>%
# Renombrar variables
rename(
ubigeo = ubigeo,
estrato = estrato,
fuente_agua = p110,
agua_potable = p110a1,
cloro_residual = p110a,
agua_todos_dias = p110c,
horas_dia_diario = p110c1,
dias_semana = p110c2,
horas_dia_no_diario = p110c3,
paga_servicio = p110f,
entidad_pago = p110g,
gasto_agua_pagado = `p1172_01`,
gasto_agua_donado = `p1173_01`,
gasto_agua_autoconsumo = `p1174_01`,
gasto_agua_hogar = `d1172_01`,
abastecimiento_recod = t110
) %>%
# Construir región y aplicar etiquetas
mutate(
ubigeo = str_pad(as.character(ubigeo), width = 6, side = "left", pad = "0"),
cod_region = substr(ubigeo, 1, 2),
region = recode(cod_region,
"01"="Amazonas","02"="Áncash","03"="Apurímac","04"="Arequipa",
"05"="Ayacucho","06"="Cajamarca","07"="Callao","08"="Cusco",
"09"="Huancavelica","10"="Huánuco","11"="Ica","12"="Junín",
"13"="La Libertad","14"="Lambayeque","15"="Lima","16"="Loreto",
"17"="Madre de Dios","18"="Moquegua","19"="Pasco","20"="Piura",
"21"="Puno","22"="San Martín","23"="Tacna","24"="Tumbes",
"25"="Ucayali"
),
estrato = factor(estrato, levels = 1:8, labels = c(
"≥500k hab","100k–499,999","50k–99,999","20k–49,999",
"2k–19,999","500–1,999","AER Compuesto","AER Simple"
)),
fuente_agua = factor(fuente_agua, levels = 1:8, labels = c(
"Red dentro de la vivienda",
"Red fuera (dentro del edificio)",
"Pilón/pileta pública",
"Camión-cisterna u otro",
"Pozo (subterránea)",
"Manantial/puquio",
"Otra",
"Río/acequia/lago/laguna"
)),
agua_potable = factor(agua_potable, levels = 1:2, labels = c("Sí","No")),
cloro_residual = na_if(cloro_residual, 9) %>%
factor(levels = 1:3, labels = c("Seguro","Dosificación inadecuada","Sin cloro")),
agua_todos_dias = na_if(agua_todos_dias, 9) %>%
factor(levels = 1:2, labels = c("Sí","No")),
paga_servicio = factor(paga_servicio, levels = 1:2, labels = c("Sí","No")),
entidad_pago = factor(entidad_pago, levels = 1:5, labels = c(
"EPS/SEDA/EMAPA","Municipalidad","Organización comunal","Camión cisterna","Otro"
)),
abastecimiento_recod = factor(abastecimiento_recod, levels = 1:9, labels = c(
"Red dentro de la vivienda",
"Red fuera (dentro del edificio)",
"Pilón/pileta pública",
"Camión-cisterna u otro",
"Pozo (subterránea)",
"Manantial/puquio",
"Otra",
"Río/acequia/lago/laguna",
"Agua potable del vecino"
)),
horas_dia_diario = ifelse(horas_dia_diario %in% 1:24, horas_dia_diario, NA),
dias_semana = ifelse(dias_semana %in% 1:7, dias_semana, NA),
horas_dia_no_diario = ifelse(horas_dia_no_diario %in% 1:24, horas_dia_no_diario, NA),
gasto_agua_total = rowSums(across(c(gasto_agua_pagado, gasto_agua_donado, gasto_agua_autoconsumo)), na.rm = TRUE)
)
5. Graficamos
# Ordenamos regiones por % Sí para lectura
orden_regiones <- enaho_agua_f %>%
filter(!is.na(region), !is.na(agua_potable)) %>%
group_by(region) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(region)
enaho_agua_f %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
filter(!is.na(region), !is.na(agua_potable)) %>%
ggplot(aes(x = region, fill = agua_potable)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Agua potable por región",
subtitle= "% de hogares dentro de cada región",
x = "Región",
y = "Participación (%)",
fill = "¿Agua potable?",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
legend.position = "bottom",
panel.grid.minor = element_blank()
)
enaho_agua_f %>%
filter(paga_servicio == "Sí", !is.na(entidad_pago)) %>%
count(entidad_pago) %>%
mutate(pct = n / sum(n)) %>%
ggplot(aes(x = fct_reorder(entidad_pago, pct), y = pct)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Entidad a la que se paga por el servicio de agua",
subtitle= "Distribución nacional (% entre hogares que pagan)",
x = "Entidad",
y = "Porcentaje de hogares",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
orden_regiones <- enaho_agua_f %>%
filter(paga_servicio == "Sí", !is.na(region)) %>%
count(region) %>% arrange(n) %>% pull(region)
enaho_agua_f %>%
filter(paga_servicio == "Sí", !is.na(entidad_pago), !is.na(region)) %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
ggplot(aes(x = region, fill = entidad_pago)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Entidad a la que se paga por región",
subtitle= "Participación (%) dentro de los hogares que pagan en cada región",
x = "Región",
y = "Participación (%)",
fill = "Entidad",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
legend.position = "bottom",
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
enaho_agua_f %>%
filter(!is.na(fuente_agua)) %>%
count(fuente_agua) %>%
mutate(pct = n / sum(n)) %>%
ggplot(aes(x = fct_reorder(fuente_agua, pct), y = pct)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Fuente principal de agua",
subtitle= "Distribución nacional (%)",
x = "Fuente de agua",
y = "Porcentaje de hogares",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
orden_regiones <- enaho_agua_f %>%
filter(!is.na(region)) %>% count(region) %>% arrange(n) %>% pull(region)
enaho_agua_f %>%
filter(!is.na(region), !is.na(fuente_agua)) %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
ggplot(aes(x = region, fill = fuente_agua)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Fuente principal de agua por región",
subtitle= "Participación (%) dentro de cada región",
x = "Región",
y = "Participación (%)",
fill = "Fuente",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
legend.position = "bottom",
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
enaho_agua_f %>%
filter(!is.na(cloro_residual)) %>%
count(cloro_residual) %>%
mutate(pct = n / sum(n)) %>%
ggplot(aes(x = fct_reorder(cloro_residual, pct), y = pct)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Nivel de cloro residual en el agua",
subtitle= "Distribución nacional (%)",
x = "Nivel de cloro",
y = "Porcentaje de hogares",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
enaho_agua_f %>%
filter(!is.na(cloro_residual), !is.na(region)) %>%
count(region, cloro_residual) %>%
group_by(region) %>%
mutate(pct = n / sum(n)) %>%
ungroup() %>%
filter(str_to_lower(cloro_residual) == "dosificación inadecuada") %>%
ggplot(aes(y = fct_reorder(region, pct), x = pct)) +
geom_col() +
scale_x_continuous(labels = percent_format(accuracy = 1)) +
labs(
title = "Dosificación inadecuada del cloro residual por región",
subtitle = "Distribución dentro de cada región (%)",
x = "Porcentaje de hogares",
y = "Región",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption = element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
orden_regiones <- enaho_agua_f %>%
filter(!is.na(region), !is.na(agua_todos_dias)) %>%
group_by(region) %>%
summarise(pct_si = mean(agua_todos_dias == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(region)
enaho_agua_f %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
filter(!is.na(region), !is.na(agua_todos_dias)) %>%
ggplot(aes(x = region, fill = agua_todos_dias)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Acceso al servicio de agua todos los días",
subtitle= "% de hogares dentro de cada región",
x = "Región",
y = "Participación (%)",
fill = "¿Todos los días?",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
legend.position = "bottom",
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
orden_regiones <- enaho_agua_f %>%
filter(!is.na(region), !is.na(horas_dia_diario)) %>%
group_by(region) %>%
summarise(med = median(horas_dia_diario, na.rm = TRUE), .groups = "drop") %>%
arrange(med) %>% pull(region)
enaho_agua_f %>%
filter(!is.na(region), !is.na(horas_dia_diario)) %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
ggplot(aes(x = region, y = horas_dia_diario)) +
geom_boxplot(outlier.alpha = 0.25) +
coord_flip() +
labs(
title = "Horas de servicio al día",
subtitle= "Distribución por región (entre quienes reportan)",
x = "Región",
y = "Horas por día",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
orden_regiones <- enaho_agua_f %>%
filter(!is.na(region), !is.na(paga_servicio)) %>%
group_by(region) %>%
summarise(pct_paga = mean(paga_servicio == "Sí"), .groups = "drop") %>%
arrange(pct_paga) %>% pull(region)
enaho_agua_f %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
filter(!is.na(region), !is.na(paga_servicio)) %>%
ggplot(aes(x = region, fill = paga_servicio)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Hogares que pagan por el servicio de agua",
subtitle= "% de hogares dentro de cada región",
x = "Región",
y = "Participación (%)",
fill = "¿Paga?",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
legend.position = "bottom",
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
enaho_agua_f %>%
filter("gasto_agua_total" %in% names(enaho_agua_f)) %>%
filter(!is.na(gasto_agua_total), gasto_agua_total >= 0) %>%
ggplot(aes(x = gasto_agua_total)) +
geom_histogram(bins = 40) +
scale_x_continuous(labels = label_number(big.mark = ",")) +
labs(
title = "Distribución del gasto mensual en agua",
subtitle= "Hogares a nivel nacional",
x = "Gasto mensual (moneda local)",
y = "Número de hogares",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(base_size = 11) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
plot.caption= element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank()
)
enaho_agua_f <- enaho_agua_f %>%
mutate(
ambito = case_when(
estrato %in% c("AER Compuesto","AER Simple") ~ "Rural",
TRUE ~ "Urbano"
) %>% factor(levels = c("Urbano","Rural"))
)
enaho_agua_f %>%
filter(!is.na(ambito), !is.na(agua_potable)) %>%
count(ambito, agua_potable) %>%
group_by(ambito) %>% mutate(pct = n / sum(n)) %>% ungroup() %>%
ggplot(aes(x = ambito, y = pct, fill = agua_potable)) +
geom_col(position = "fill") +
scale_y_continuous(labels = percent) +
labs(
title = "Agua potable por ámbito",
subtitle = "% de hogares dentro de cada ámbito",
x = "Ámbito",
y = "Participación (%)",
fill = "¿Agua potable?",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(11) +
theme(plot.title = element_text(hjust = .5, face = "bold"),
plot.subtitle = element_text(hjust = .5),
plot.caption = element_text(hjust = 1),
plot.caption.position = "plot",
legend.position = "bottom",
panel.grid.minor = element_blank())
orden_regiones <- enaho_agua_f %>%
filter(!is.na(region), !is.na(agua_potable)) %>%
group_by(region) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(region)
enaho_agua_f %>%
filter(!is.na(region), !is.na(ambito), !is.na(agua_potable)) %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
ggplot(aes(x = region, fill = agua_potable)) +
geom_bar(position = "fill") +
coord_flip() +
facet_wrap(~ ambito, nrow = 1) +
scale_y_continuous(labels = percent) +
labs(
title = "Agua potable por región y ámbito",
subtitle = "Participación (%) dentro de cada región",
x = "Región",
y = "Participación (%)",
fill = "¿Agua potable?",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(11) +
theme(plot.title = element_text(hjust = .5, face = "bold"),
plot.subtitle = element_text(hjust = .5),
plot.caption = element_text(hjust = 1),
plot.caption.position = "plot",
legend.position = "bottom",
panel.grid.minor = element_blank())
brecha <- enaho_agua_f %>%
filter(!is.na(region), !is.na(ambito), !is.na(agua_potable)) %>%
group_by(region, ambito) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
pivot_wider(names_from = ambito, values_from = pct_si)
orden_regiones <- brecha %>%
mutate(brecha = Urbano - Rural) %>%
arrange(brecha) %>% pull(region)
brecha %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
ggplot() +
geom_segment(aes(x = 1, xend = 2, y = Rural, yend = Urbano)) +
geom_point(aes(x = 1, y = Rural), size = 2) +
geom_point(aes(x = 2, y = Urbano), size = 2) +
scale_y_continuous(labels = percent) +
scale_x_continuous(breaks = c(1,2), labels = c("Rural","Urbano")) +
coord_flip() +
facet_wrap(~ region, ncol = 4, scales = "free_y") +
labs(
title = "Brecha urbano–rural en agua potable por región",
subtitle = "% de hogares con agua potable (línea une Rural→Urbano)",
x = "",
y = "% de hogares con agua potable",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(11) +
theme(plot.title = element_text(hjust = .5, face = "bold"),
plot.subtitle = element_text(hjust = .5),
plot.caption = element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank())
enaho_agua_f %>%
filter(!is.na(ambito), !is.na(fuente_agua)) %>%
count(ambito, fuente_agua) %>%
group_by(ambito) %>% mutate(pct = n / sum(n)) %>% ungroup() %>%
ggplot(aes(x = fuente_agua, y = pct, fill = ambito)) +
geom_col(position = "dodge") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(
title = "Fuente principal de agua por ámbito",
subtitle = "Distribución nacional (%)",
x = "Fuente de agua",
y = "Porcentaje de hogares",
fill = "Ámbito",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(11) +
theme(plot.title = element_text(hjust = .5, face = "bold"),
plot.subtitle = element_text(hjust = .5),
legend.position = "bottom",
plot.caption = element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank())
orden_regiones <- enaho_agua_f %>%
filter(!is.na(region), !is.na(paga_servicio)) %>%
group_by(region) %>%
summarise(pct_paga = mean(paga_servicio == "Sí"), .groups = "drop") %>%
arrange(pct_paga) %>% pull(region)
enaho_agua_f %>%
filter(!is.na(region), !is.na(ambito), !is.na(paga_servicio)) %>%
mutate(region = factor(region, levels = orden_regiones)) %>%
ggplot(aes(x = region, fill = paga_servicio)) +
geom_bar(position = "fill") +
coord_flip() +
facet_wrap(~ ambito, nrow = 1) +
scale_y_continuous(labels = percent) +
labs(
title = "Hogares que pagan por el servicio por región y ámbito",
subtitle = "Participación (%) dentro de cada región",
x = "Región",
y = "Participación (%)",
fill = "¿Paga?",
caption = "Fuente: ENAHO 2024"
) +
theme_minimal(11) +
theme(plot.title = element_text(hjust = .5, face = "bold"),
plot.subtitle = element_text(hjust = .5),
legend.position = "bottom",
plot.caption = element_text(hjust = 1),
plot.caption.position = "plot",
panel.grid.minor = element_blank())