# Instalación de paquetes
#install.packages("haven")
#install.packages("rio)
#install.packages("dplyr")
#install.packages("stringr")
#install.packages("tidyr")
#install.packages("forcats")
#install.packages("scales")
#install.packages("ggplot2")
#install.packages("readxl")
# Carga de librerías
library(haven)
library(rio)
library(dplyr)
library(stringr)
library(tidyr)
library(forcats)
library(scales)
library(ggplot2)
library(readxl)
library(rlang)
# Paleta y tema
pal_si_no <- c("No" = "#D73027", "Sí" = "#1F78B4")
scale_fill_si_no <- function(...) scale_fill_manual(values = pal_si_no, ...)
tema_apoyo <- function(base_size = 11) {
theme_minimal(base_size = base_size) +
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()
)
}
El presente archivo pretende analizar aquellas variables relacionadas al agua a nivel hogar entre los años 2020 y 2024. Toda la información forma parte de la Encuesta Nacional de Hogares (ENAHO), la cual se realiza anualmente en el Perú.
orden_dep <- enaho2020 %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2020 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_potable = fct_relevel(agua_potable, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
ggplot(aes(x = departamento, fill = agua_potable)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = pal_si_no, name = "¿Agua potable?") +
labs(title="Acceso a agua potable por departamento",
subtitle="% de hogares (ENAHO 2020)",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
enaho2020 %>%
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 (%) – ENAHO 2020",
x="Entidad", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
orden_dep <- enaho2020 %>%
filter(paga_servicio == "Sí", !is.na(departamento)) %>%
count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2020 %>%
filter(paga_servicio == "Sí", !is.na(entidad_pago), !is.na(departamento)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = entidad_pago)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Entidad de pago por departamento",
subtitle="% dentro de hogares que pagan – ENAHO 2020",
x="Departamento", y="Participación (%)",
fill="Entidad", caption="Fuente: ENAHO 2020") +
tema_apoyo()
enaho2020 %>%
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 abastecimiento de agua",
subtitle="Distribución nacional (%) – ENAHO 2020",
x="Fuente de agua", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
orden_dep <- enaho2020 %>%
filter(!is.na(departamento)) %>% count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2020 %>%
filter(!is.na(departamento), !is.na(fuente_agua)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = fuente_agua)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Fuente principal de agua por departamento",
subtitle="Participación dentro de cada departamento – ENAHO 2020",
x="Departamento", y="Participación (%)",
fill="Fuente", caption="Fuente: ENAHO 2020") +
tema_apoyo()
orden_dep <- enaho2020 %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_todos_dias == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2020 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_todos_dias = fct_relevel(agua_todos_dias, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
ggplot(aes(x = departamento, fill = agua_todos_dias)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = pal_si_no, name = "¿Todos los días?") +
labs(title="Acceso al servicio de agua todos los días",
subtitle="% de hogares dentro de cada departamento – ENAHO 2020",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
orden_dep <- enaho2020 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
group_by(departamento) %>%
summarise(med = median(horas_dia_diario, na.rm = TRUE), .groups = "drop") %>%
arrange(med) %>% pull(departamento)
enaho2020 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, y = horas_dia_diario)) +
geom_boxplot(outlier.alpha = 0.25) +
coord_flip() +
labs(title="Horas de servicio de agua al día",
subtitle="Distribución por departamento (entre quienes reportan) – ENAHO 2020",
x="Departamento", y="Horas por día",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
orden_dep <- enaho2020 %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
group_by(departamento) %>%
summarise(pct_paga = mean(paga_servicio == "Sí"), .groups = "drop") %>%
arrange(pct_paga) %>% pull(departamento)
enaho2020 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
paga_servicio = fct_relevel(paga_servicio, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
ggplot(aes(x = departamento, fill = paga_servicio)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = pal_si_no, name = "¿Paga?") +
labs(title="Hogares que pagan por el servicio de agua",
subtitle="% de hogares dentro de cada departamento – ENAHO 2020",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
enaho2020 %>%
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 – ENAHO 2020",
x="Gasto mensual (S/)", y="Número de hogares",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
enaho2020 %>%
mutate(riesgo = ifelse(agua_potable == "No", "En riesgo (sin potable)", "Seguro")) %>%
count(riesgo) %>%
mutate(pct = n / sum(n)) %>%
ggplot(aes(x = fct_reorder(riesgo, pct), y = pct, fill = riesgo)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = c("En riesgo (sin potable)" = "#D73027",
"Seguro" = "#1F78B4")) +
labs(title="Condición del agua en los hogares (definida por potabilidad)",
subtitle="ENAHO 2020",
x="", y="Porcentaje de hogares",
fill="Condición", caption="Fuente: ENAHO 2020") +
tema_apoyo()
riesgo_dep <- enaho2020 %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
mutate(riesgo = agua_potable == "No") %>%
group_by(departamento) %>%
summarise(pct_riesgo = mean(riesgo), .groups = "drop") %>%
arrange(desc(pct_riesgo))
riesgo_dep %>%
ggplot(aes(x = pct_riesgo, y = fct_reorder(departamento, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Departamentos con mayor proporción de hogares sin agua potable",
subtitle="% de hogares en riesgo – ENAHO 2020",
x="Porcentaje de hogares sin potable", y="Departamento",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
enaho2020 %>%
mutate(riesgo = ifelse(agua_potable == "No", "En riesgo (sin potable)", "Seguro")) %>%
filter(!is.na(gasto_agua_total), gasto_agua_total >= 0) %>%
ggplot(aes(x = gasto_agua_total, fill = riesgo)) +
geom_histogram(bins = 40, position = "identity", alpha = 0.6) +
scale_x_continuous(labels = label_number(big.mark = ",")) +
scale_fill_manual(values = c("En riesgo (sin potable)"="#D73027","Seguro"="#1F78B4")) +
labs(title="Gasto mensual en agua por condición de potabilidad",
subtitle="ENAHO 2020",
x="Gasto mensual en agua (S/)", y="Número de hogares",
fill="Condición", caption="Fuente: ENAHO 2020") +
tema_apoyo()
top_prov <- enaho2020 %>%
filter(!is.na(provincia), !is.na(agua_potable)) %>%
group_by(provincia) %>%
summarise(pct_riesgo = mean(agua_potable == "No"), .groups = "drop") %>%
arrange(desc(pct_riesgo)) %>%
slice_head(n = 10)
ggplot(top_prov, aes(x = pct_riesgo, y = fct_reorder(provincia, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Top 10 provincias con mayor exposición (sin agua potable)",
subtitle="% de hogares – ENAHO 2020",
x="Porcentaje de hogares sin agua potable", y="Provincia",
caption="Fuente: ENAHO 2020") +
tema_apoyo()
orden_dep <- enaho2021 %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2021 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_potable = fct_relevel(agua_potable, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
ggplot(aes(x = departamento, fill = agua_potable)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Agua potable?") +
labs(title="Acceso a agua potable por departamento",
subtitle="% de hogares (ENAHO 2021)",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
enaho2021 %>%
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 (%) – ENAHO 2021",
x="Entidad", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
orden_dep <- enaho2021 %>%
filter(paga_servicio == "Sí", !is.na(departamento)) %>%
count(departamento) %>%
arrange(n) %>% pull(departamento)
enaho2021 %>%
filter(paga_servicio == "Sí", !is.na(entidad_pago), !is.na(departamento)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = entidad_pago)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Entidad de pago por departamento",
subtitle="% dentro de hogares que pagan – ENAHO 2021",
x="Departamento", y="Participación (%)",
fill="Entidad", caption="Fuente: ENAHO 2021") +
tema_apoyo()
enaho2021 %>%
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 abastecimiento de agua",
subtitle="Distribución nacional (%) – ENAHO 2021",
x="Fuente de agua", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
orden_dep <- enaho2021 %>%
filter(!is.na(departamento)) %>%
count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2021 %>%
filter(!is.na(departamento), !is.na(fuente_agua)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = fuente_agua)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Fuente principal de agua por departamento",
subtitle="Participación dentro de cada departamento – ENAHO 2021",
x="Departamento", y="Participación (%)",
fill="Fuente", caption="Fuente: ENAHO 2021") +
tema_apoyo()
enaho2021 %>%
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 (%) – ENAHO 2021",
x="Nivel de cloro", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
enaho2021 %>%
filter(!is.na(cloro_residual), !is.na(departamento)) %>%
count(departamento, cloro_residual) %>%
group_by(departamento) %>%
mutate(pct = n/sum(n)) %>%
ungroup() %>%
filter(cloro_residual == "Dosificación inadecuada") %>%
ggplot(aes(y = fct_reorder(departamento, pct), x = pct)) +
geom_col() +
scale_x_continuous(labels = percent_format(accuracy = 1)) +
labs(title="Dosificación inadecuada del cloro por departamento",
subtitle="% de hogares dentro de cada departamento – ENAHO 2021",
x="Porcentaje de hogares", y="Departamento",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
orden_dep <- enaho2021 %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_todos_dias == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2021 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_todos_dias = fct_relevel(agua_todos_dias, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
ggplot(aes(x = departamento, fill = agua_todos_dias)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Todos los días?") +
labs(title="Acceso al servicio de agua todos los días",
subtitle="% de hogares dentro de cada departamento – ENAHO 2021",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
orden_dep <- enaho2021 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
group_by(departamento) %>%
summarise(med = median(horas_dia_diario, na.rm = TRUE), .groups = "drop") %>%
arrange(med) %>% pull(departamento)
enaho2021 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, y = horas_dia_diario)) +
geom_boxplot(outlier.alpha = 0.25) +
coord_flip() +
labs(title="Horas de servicio de agua al día",
subtitle="Distribución por departamento (entre quienes reportan) – ENAHO 2021",
x="Departamento", y="Horas por día",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
orden_dep <- enaho2021 %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
group_by(departamento) %>%
summarise(pct_paga = mean(paga_servicio == "Sí"), .groups = "drop") %>%
arrange(pct_paga) %>% pull(departamento)
enaho2021 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
paga_servicio = fct_relevel(paga_servicio, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
ggplot(aes(x = departamento, fill = paga_servicio)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Paga?") +
labs(title="Hogares que pagan por el servicio de agua",
subtitle="% de hogares dentro de cada departamento – ENAHO 2021",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
enaho2021 %>%
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 – ENAHO 2021",
x="Gasto mensual (S/)", y="Número de hogares",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
enaho2021 %>%
mutate(
riesgo = case_when(
agua_potable == "No" ~ "Sin agua potable",
cloro_residual %in% c("Dosificación inadecuada","Sin cloro") ~ "Con agua insegura",
TRUE ~ "Segura"
)
) %>%
count(riesgo) %>%
mutate(pct = n/sum(n)) %>%
ggplot(aes(x = fct_reorder(riesgo, pct), y = pct, fill = riesgo)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = c("Sin agua potable" = "#D73027",
"Con agua insegura" = "#FC8D59",
"Segura" = "#1F78B4")) +
labs(title="Condición de seguridad del agua en los hogares",
subtitle="No potable OR cloro inadecuado/sin cloro – ENAHO 2021",
x="", y="Porcentaje de hogares",
fill="Condición", caption="Fuente: ENAHO 2021") +
tema_apoyo()
riesgo_dep <- enaho2021 %>%
filter(!is.na(departamento)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(departamento) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo))
riesgo_dep %>%
ggplot(aes(x = pct_riesgo, y = fct_reorder(departamento, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Departamentos con mayor exposición a agua insegura",
subtitle="% de hogares sin potable o con cloro inadecuado/sin cloro – ENAHO 2021",
x="Porcentaje de hogares en riesgo", y="Departamento",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
top_prov <- enaho2021 %>%
filter(!is.na(provincia)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(provincia) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo)) %>%
slice_head(n = 10)
ggplot(top_prov, aes(x = pct_riesgo, y = fct_reorder(provincia, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Top 10 provincias con mayor exposición a agua insegura",
subtitle="% de hogares en riesgo – ENAHO 2021",
x="Porcentaje de hogares en riesgo", y="Provincia",
caption="Fuente: ENAHO 2021") +
tema_apoyo()
orden_dep <- enaho2022 %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2022 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_potable = fct_relevel(agua_potable, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
ggplot(aes(x = departamento, fill = agua_potable)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Agua potable?") +
labs(title="Acceso a agua potable por departamento",
subtitle="% de hogares (ENAHO 2022)",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
enaho2022 %>%
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 (%) – ENAHO 2022",
x="Entidad", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
orden_dep <- enaho2022 %>%
filter(paga_servicio == "Sí", !is.na(departamento)) %>%
count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2022 %>%
filter(paga_servicio == "Sí", !is.na(entidad_pago), !is.na(departamento)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = entidad_pago)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Entidad de pago por departamento",
subtitle="% dentro de hogares que pagan – ENAHO 2022",
x="Departamento", y="Participación (%)",
fill="Entidad", caption="Fuente: ENAHO 2022") +
tema_apoyo()
enaho2022 %>%
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 abastecimiento de agua",
subtitle="Distribución nacional (%) – ENAHO 2022",
x="Fuente de agua", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
orden_dep <- enaho2022 %>%
filter(!is.na(departamento)) %>% count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2022 %>%
filter(!is.na(departamento), !is.na(fuente_agua)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = fuente_agua)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Fuente principal de agua por departamento",
subtitle="Participación dentro de cada departamento – ENAHO 2022",
x="Departamento", y="Participación (%)",
fill="Fuente", caption="Fuente: ENAHO 2022") +
tema_apoyo()
enaho2022 %>%
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 (%) – ENAHO 2022",
x="Nivel de cloro", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
enaho2022 %>%
filter(!is.na(cloro_residual), !is.na(departamento)) %>%
count(departamento, cloro_residual) %>%
group_by(departamento) %>%
mutate(pct = n/sum(n)) %>%
ungroup() %>%
filter(cloro_residual == "Dosificación inadecuada") %>%
ggplot(aes(y = fct_reorder(departamento, pct), x = pct)) +
geom_col() +
scale_x_continuous(labels = percent_format(accuracy = 1)) +
labs(title="Dosificación inadecuada del cloro por departamento",
subtitle="% de hogares dentro de cada departamento – ENAHO 2022",
x="Porcentaje de hogares", y="Departamento",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
orden_dep <- enaho2022 %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_todos_dias == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2022 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_todos_dias = fct_relevel(agua_todos_dias, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
ggplot(aes(x = departamento, fill = agua_todos_dias)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Todos los días?") +
labs(title="Acceso al servicio de agua todos los días",
subtitle="% de hogares dentro de cada departamento – ENAHO 2022",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
orden_dep <- enaho2022 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
group_by(departamento) %>%
summarise(med = median(horas_dia_diario, na.rm = TRUE), .groups = "drop") %>%
arrange(med) %>% pull(departamento)
enaho2022 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, y = horas_dia_diario)) +
geom_boxplot(outlier.alpha = 0.25) +
coord_flip() +
labs(title="Horas de servicio de agua al día",
subtitle="Distribución por departamento (entre quienes reportan) – ENAHO 2022",
x="Departamento", y="Horas por día",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
orden_dep <- enaho2022 %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
group_by(departamento) %>%
summarise(pct_paga = mean(paga_servicio == "Sí"), .groups = "drop") %>%
arrange(pct_paga) %>% pull(departamento)
enaho2022 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
paga_servicio = fct_relevel(paga_servicio, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
ggplot(aes(x = departamento, fill = paga_servicio)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Paga?") +
labs(title="Hogares que pagan por el servicio de agua",
subtitle="% de hogares dentro de cada departamento – ENAHO 2022",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
enaho2022 %>%
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 – ENAHO 2022",
x="Gasto mensual (S/)", y="Número de hogares",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
enaho2022 %>%
mutate(
riesgo = case_when(
agua_potable == "No" ~ "Sin agua potable",
cloro_residual %in% c("Dosificación inadecuada","Sin cloro") ~ "Con agua insegura",
TRUE ~ "Segura"
)
) %>%
count(riesgo) %>%
mutate(pct = n/sum(n)) %>%
ggplot(aes(x = fct_reorder(riesgo, pct), y = pct, fill = riesgo)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = c("Sin agua potable" = "#D73027",
"Con agua insegura" = "#FC8D59",
"Segura" = "#1F78B4")) +
labs(title="Condición de seguridad del agua en los hogares",
subtitle="No potable o cloro inadecuado/sin cloro – ENAHO 2022",
x="", y="Porcentaje de hogares",
fill="Condición", caption="Fuente: ENAHO 2022") +
tema_apoyo()
riesgo_dep <- enaho2022 %>%
filter(!is.na(departamento)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(departamento) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo))
riesgo_dep %>%
ggplot(aes(x = pct_riesgo, y = fct_reorder(departamento, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Departamentos con mayor exposición a agua insegura",
subtitle="% de hogares sin potable o con cloro inadecuado/sin cloro – ENAHO 2022",
x="Porcentaje de hogares en riesgo", y="Departamento",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
top_prov <- enaho2022 %>%
filter(!is.na(provincia)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(provincia) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo)) %>%
slice_head(n = 10)
ggplot(top_prov, aes(x = pct_riesgo, y = fct_reorder(provincia, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Top 10 provincias con mayor exposición a agua insegura",
subtitle="% de hogares en riesgo – ENAHO 2022",
x="Porcentaje de hogares en riesgo", y="Provincia",
caption="Fuente: ENAHO 2022") +
tema_apoyo()
orden_dep <- enaho2023 %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2023 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_potable = fct_relevel(agua_potable, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
ggplot(aes(x = departamento, fill = agua_potable)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Agua potable?") +
labs(title="Acceso a agua potable por departamento",
subtitle="% de hogares (ENAHO 2023)",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
enaho2023 %>%
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 (%) – ENAHO 2023",
x="Entidad", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
orden_dep <- enaho2023 %>%
filter(paga_servicio == "Sí", !is.na(departamento)) %>%
count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2023 %>%
filter(paga_servicio == "Sí", !is.na(entidad_pago), !is.na(departamento)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = entidad_pago)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Entidad de pago por departamento",
subtitle="% dentro de hogares que pagan – ENAHO 2023",
x="Departamento", y="Participación (%)",
fill="Entidad", caption="Fuente: ENAHO 2023") +
tema_apoyo()
enaho2023 %>%
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 abastecimiento de agua",
subtitle="Distribución nacional (%) – ENAHO 2023",
x="Fuente de agua", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
orden_dep <- enaho2023 %>%
filter(!is.na(departamento)) %>% count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2023 %>%
filter(!is.na(departamento), !is.na(fuente_agua)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = fuente_agua)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Fuente principal de agua por departamento",
subtitle="Participación dentro de cada departamento – ENAHO 2023",
x="Departamento", y="Participación (%)",
fill="Fuente", caption="Fuente: ENAHO 2023") +
tema_apoyo()
enaho2023 %>%
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 (%) – ENAHO 2023",
x="Nivel de cloro", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
enaho2023 %>%
filter(!is.na(cloro_residual), !is.na(departamento)) %>%
count(departamento, cloro_residual) %>%
group_by(departamento) %>%
mutate(pct = n/sum(n)) %>%
ungroup() %>%
filter(cloro_residual == "Dosificación inadecuada") %>%
ggplot(aes(y = fct_reorder(departamento, pct), x = pct)) +
geom_col() +
scale_x_continuous(labels = percent_format(accuracy = 1)) +
labs(title="Dosificación inadecuada del cloro por departamento",
subtitle="% de hogares dentro de cada departamento – ENAHO 2023",
x="Porcentaje de hogares", y="Departamento",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
orden_dep <- enaho2023 %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_todos_dias == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
enaho2023 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_todos_dias = fct_relevel(agua_todos_dias, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
ggplot(aes(x = departamento, fill = agua_todos_dias)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Todos los días?") +
labs(title="Acceso al servicio de agua todos los días",
subtitle="% de hogares dentro de cada departamento – ENAHO 2023",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
orden_dep <- enaho2023 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
group_by(departamento) %>%
summarise(med = median(horas_dia_diario, na.rm = TRUE), .groups = "drop") %>%
arrange(med) %>% pull(departamento)
enaho2023 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, y = horas_dia_diario)) +
geom_boxplot(outlier.alpha = 0.25) +
coord_flip() +
labs(title="Horas de servicio de agua al día",
subtitle="Distribución por departamento (entre quienes reportan) – ENAHO 2023",
x="Departamento", y="Horas por día",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
orden_dep <- enaho2023 %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
group_by(departamento) %>%
summarise(pct_paga = mean(paga_servicio == "Sí"), .groups = "drop") %>%
arrange(pct_paga) %>% pull(departamento)
enaho2023 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
paga_servicio = fct_relevel(paga_servicio, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
ggplot(aes(x = departamento, fill = paga_servicio)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Paga?") +
labs(title="Hogares que pagan por el servicio de agua",
subtitle="% de hogares dentro de cada departamento – ENAHO 2023",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
enaho2023 %>%
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 – ENAHO 2023",
x="Gasto mensual (S/)", y="Número de hogares",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
enaho2023 %>%
mutate(
riesgo = case_when(
agua_potable == "No" ~ "Sin agua potable",
cloro_residual %in% c("Dosificación inadecuada","Sin cloro") ~ "Con agua insegura",
TRUE ~ "Segura"
)
) %>%
count(riesgo) %>%
mutate(pct = n/sum(n)) %>%
ggplot(aes(x = fct_reorder(riesgo, pct), y = pct, fill = riesgo)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = c("Sin agua potable" = "#D73027",
"Con agua insegura" = "#FC8D59",
"Segura" = "#1F78B4")) +
labs(title="Condición de seguridad del agua en los hogares",
subtitle="No potable OR cloro inadecuado/sin cloro – ENAHO 2023",
x="", y="Porcentaje de hogares",
fill="Condición", caption="Fuente: ENAHO 2023") +
tema_apoyo()
riesgo_dep <- enaho2023 %>%
filter(!is.na(departamento)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(departamento) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo))
riesgo_dep %>%
ggplot(aes(x = pct_riesgo, y = fct_reorder(departamento, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Departamentos con mayor exposición a agua insegura",
subtitle="% de hogares sin potable o con cloro inadecuado/sin cloro – ENAHO 2023",
x="Porcentaje de hogares en riesgo", y="Departamento",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
top_prov <- enaho2023 %>%
filter(!is.na(provincia)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(provincia) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo)) %>%
slice_head(n = 10)
ggplot(top_prov, aes(x = pct_riesgo, y = fct_reorder(provincia, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Top 10 provincias con mayor exposición a agua insegura",
subtitle="% de hogares en riesgo – ENAHO 2023",
x="Porcentaje de hogares en riesgo", y="Provincia",
caption="Fuente: ENAHO 2023") +
tema_apoyo()
orden_dep <- enaho2024 %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_potable == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
aguapotdep <- enaho2024 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_potable = fct_relevel(agua_potable, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_potable)) %>%
ggplot(aes(x = departamento, fill = agua_potable)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Agua potable?") +
labs(title="Acceso a agua potable por departamento",
subtitle="% de hogares (ENAHO 2024)",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
aguapotdep
enaho2024 %>%
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 (%) – ENAHO 2024",
x="Entidad", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
orden_dep <- enaho2024 %>%
filter(paga_servicio == "Sí", !is.na(departamento)) %>%
count(departamento) %>% arrange(n) %>% pull(departamento)
enaho2024 %>%
filter(paga_servicio == "Sí", !is.na(entidad_pago), !is.na(departamento)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = entidad_pago)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Entidad de pago por departamento",
subtitle="% dentro de hogares que pagan – ENAHO 2024",
x="Departamento", y="Participación (%)",
fill="Entidad", caption="Fuente: ENAHO 2024") +
tema_apoyo()
enaho2024 %>%
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 abastecimiento de agua",
subtitle="Distribución nacional (%) – ENAHO 2024",
x="Fuente de agua", y="Porcentaje de hogares",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
orden_dep <- enaho2024 %>%
filter(!is.na(departamento)) %>%
count(departamento) %>% arrange(n) %>% pull(departamento)
fuentedep <- enaho2024 %>%
filter(!is.na(departamento), !is.na(fuente_agua)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, fill = fuente_agua)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
labs(title="Fuente principal de agua por departamento",
subtitle="Participación dentro de cada departamento",
x="Departamento", y="Participación (%)",
fill="Fuente", caption="Fuente: ENAHO 2024") +
tema_apoyo()
fuentedep
enaho2024 %>%
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") +
tema_apoyo()
enaho2024 %>%
filter(!is.na(cloro_residual), !is.na(departamento)) %>%
count(departamento, cloro_residual) %>%
group_by(departamento) %>%
mutate(pct = n/sum(n)) %>%
ungroup() %>%
filter(cloro_residual == "Dosificación inadecuada") %>%
ggplot(aes(y = fct_reorder(departamento, pct), x = pct)) +
geom_col() +
scale_x_continuous(labels = percent_format(accuracy = 1)) +
labs(title="Dosificación inadecuada del cloro por departamento",
subtitle="% de hogares dentro de cada departamento",
x="Porcentaje de hogares", y="Departamento",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
orden_dep <- enaho2024 %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
group_by(departamento) %>%
summarise(pct_si = mean(agua_todos_dias == "Sí"), .groups = "drop") %>%
arrange(pct_si) %>% pull(departamento)
accesodep <- enaho2024 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
agua_todos_dias = fct_relevel(agua_todos_dias, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(agua_todos_dias)) %>%
ggplot(aes(x = departamento, fill = agua_todos_dias)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Todos los días?") +
labs(title="Acceso al servicio de agua todos los días",
subtitle="% de hogares dentro de cada departamento",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
accesodep
orden_dep <- enaho2024 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
group_by(departamento) %>%
summarise(med = median(horas_dia_diario, na.rm = TRUE), .groups = "drop") %>%
arrange(med) %>% pull(departamento)
enaho2024 %>%
filter(!is.na(departamento), !is.na(horas_dia_diario)) %>%
mutate(departamento = factor(departamento, levels = orden_dep)) %>%
ggplot(aes(x = departamento, y = horas_dia_diario)) +
geom_boxplot(outlier.alpha = 0.25) +
coord_flip() +
labs(title="Horas de servicio de agua al día",
subtitle="Distribución por departamento (entre quienes reportan) – ENAHO 2024",
x="Departamento", y="Horas por día",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
orden_dep <- enaho2024 %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
group_by(departamento) %>%
summarise(pct_paga = mean(paga_servicio == "Sí"), .groups = "drop") %>%
arrange(pct_paga) %>% pull(departamento)
enaho2024 %>%
mutate(departamento = factor(departamento, levels = orden_dep),
paga_servicio = fct_relevel(paga_servicio, "No", "Sí")) %>%
filter(!is.na(departamento), !is.na(paga_servicio)) %>%
ggplot(aes(x = departamento, fill = paga_servicio)) +
geom_bar(position = "fill") +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_si_no(name = "¿Paga?") +
labs(title="Hogares que pagan por el servicio de agua",
subtitle="% de hogares dentro de cada departamento – ENAHO 2024",
x="Departamento", y="Participación (%)",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
enaho2024 %>%
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 – ENAHO 2024",
x="Gasto mensual (S/)", y="Número de hogares",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
condicion <- enaho2024 %>%
mutate(
riesgo = case_when(
agua_potable == "No" ~ "Sin agua potable",
cloro_residual %in% c("Dosificación inadecuada","Sin cloro") ~ "Con agua insegura",
TRUE ~ "Segura"
)
) %>%
count(riesgo) %>%
mutate(pct = n/sum(n)) %>%
ggplot(aes(x = fct_reorder(riesgo, pct), y = pct, fill = riesgo)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = percent) +
scale_fill_manual(values = c("Sin agua potable" = "#D73027",
"Con agua insegura" = "#FC8D59",
"Segura" = "#1F78B4")) +
labs(title="Condición de seguridad del agua en los hogares",
subtitle="Agua no potable o cloro inadecuado/sin cloro",
x="", y="Porcentaje de hogares",
fill="Condición", caption="Fuente: ENAHO 2024") +
tema_apoyo()
condicion
riesgo_dep <- enaho2024 %>%
filter(!is.na(departamento)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(departamento) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo))
depmaxexpo <- riesgo_dep %>%
ggplot(aes(x = pct_riesgo, y = fct_reorder(departamento, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Departamentos con mayor exposición a agua insegura",
subtitle="% de hogares sin agua potable o con cloro inadecuado/sin cloro",
x="Porcentaje de hogares en riesgo", y="Departamento",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
depmaxexpo
top_prov <- enaho2024 %>%
filter(!is.na(provincia)) %>%
mutate(riesgo = (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro"))) %>%
group_by(provincia) %>%
summarise(pct_riesgo = mean(riesgo, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(pct_riesgo)) %>%
slice_head(n = 10)
topriesgoprov <- ggplot(top_prov, aes(x = pct_riesgo, y = fct_reorder(provincia, pct_riesgo))) +
geom_col(fill = "#D73027") +
scale_x_continuous(labels = percent) +
labs(title="Top 10 provincias con mayor exposición a agua insegura",
subtitle="% de hogares en riesgo",
x="Porcentaje de hogares en riesgo", y="Provincia",
caption="Fuente: ENAHO 2024") +
tema_apoyo()
topriesgoprov
# ---- Librerías ----
library(dplyr)
library(tidyr)
library(ggplot2)
library(forcats)
library(scales)
library(stringr)
library(rlang)
# ---- Paleta Sí/No y tema ----
pal_si_no <- c("No" = "#D73027", "Sí" = "#1F78B4")
scale_fill_si_no <- function(...) scale_fill_manual(values = pal_si_no, ...)
tema_apoyo <- function(base_size = 11) {
theme_minimal(base_size = base_size) +
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 = "right",
panel.grid.minor = element_blank()
)
}
# Función para tipar y añadir año
prep_anio <- function(df, anio) {
nm <- names(df)
df %>%
mutate(
anio = as.integer(anio),
# asegurar tipos
agua_potable = if ("agua_potable" %in% nm) as.character(agua_potable) else NA_character_,
agua_todos_dias = if ("agua_todos_dias" %in% nm) as.character(agua_todos_dias) else NA_character_,
paga_servicio = if ("paga_servicio" %in% nm) as.character(paga_servicio) else NA_character_,
cloro_residual = if ("cloro_residual" %in% nm) as.character(cloro_residual) else NA_character_,
departamento = if ("departamento" %in% nm) as.character(departamento) else NA_character_,
provincia = if ("provincia" %in% nm) as.character(provincia) else NA_character_,
distrito = if ("distrito" %in% nm) as.character(distrito) else NA_character_,
horas_dia_diario = if ("horas_dia_diario" %in% nm)
ifelse(horas_dia_diario %in% 1:24, horas_dia_diario, NA_integer_)
else NA_integer_,
gasto_agua_total = if ("gasto_agua_total" %in% nm) as.numeric(gasto_agua_total) else NA_real_
)
}
# Une todas las bases
enaho_all <- bind_rows(
prep_anio(enaho2020, 2020),
prep_anio(enaho2021, 2021),
prep_anio(enaho2022, 2022),
prep_anio(enaho2023, 2023),
prep_anio(enaho2024, 2024)
)
# Define "riesgo":
# 2020: solo No potable
# 2021+: No potable OR cloro inadecuado/sin cloro
enaho_all <- enaho_all %>%
mutate(
riesgo = case_when(
anio == 2020 ~ agua_potable == "No",
anio >= 2021 ~ (agua_potable == "No") | (cloro_residual %in% c("Dosificación inadecuada","Sin cloro")),
TRUE ~ NA
)
)
# geo: "departamento" | "provincia" | "distrito"
indicadores_por_geo <- function(df, geo = c("departamento","provincia","distrito")) {
geo <- match.arg(geo)
stopifnot(geo %in% names(df))
out <- df %>%
group_by(anio, .data[[geo]]) %>%
summarise(
n = n(),
pct_potable = mean(agua_potable == "Sí", na.rm = TRUE),
pct_todos_dias = mean(agua_todos_dias == "Sí", na.rm = TRUE),
pct_paga = mean(paga_servicio == "Sí", na.rm = TRUE),
pct_riesgo = mean(riesgo, na.rm = TRUE),
med_horas_dia = median(horas_dia_diario, na.rm = TRUE),
med_gasto_total = median(gasto_agua_total, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(across(where(is.numeric), ~ ifelse(is.finite(.x), .x, NA_real_))) %>%
rename(geo = !!geo) %>%
mutate(geo = as.character(geo), anio = as.integer(anio))
out
}
# Tablas por departamento y provincia (agrega distrito si lo necesitas)
ind_depto <- indicadores_por_geo(enaho_all, "departamento")
ind_prov <- indicadores_por_geo(enaho_all, "provincia")
# ind_dist <- indicadores_por_geo(enaho_all, "distrito")
plot_linea_departamentos <- function(ind_df,
indicador = c("pct_potable","pct_riesgo","pct_todos_dias","pct_paga",
"med_horas_dia","med_gasto_total"),
top_n = 8, ordenar_por = c("ultimo","prom"), formato_pct = TRUE) {
indicador <- match.arg(indicador)
ordenar_por <- match.arg(ordenar_por)
# Ranking para elegir destacados
rank_df <- ind_df %>%
group_by(geo) %>%
arrange(anio, .by_group = TRUE) %>%
summarise(
val_ultimo = dplyr::last(!!sym(indicador)),
val_prom = mean(!!sym(indicador), na.rm = TRUE),
.groups = "drop"
) %>%
mutate(orden = ifelse(ordenar_por == "prom", val_prom, val_ultimo)) %>%
arrange(desc(orden))
sel_geos <- head(rank_df$geo, top_n)
# Promedio nacional por año
prom_nac <- ind_df %>%
group_by(anio) %>%
summarise(val = mean(!!sym(indicador), na.rm = TRUE), .groups = "drop")
# Base con todos + flag destacados
base <- ind_df %>%
mutate(destacado = geo %in% sel_geos,
geo = fct_reorder(geo, rank_df$orden[match(geo, rank_df$geo)]))
ggplot() +
# todas las líneas en gris
geom_line(
data = dplyr::filter(base, !destacado),
aes(x = anio, y = !!sym(indicador), group = geo),
linewidth = 0.6, color = "grey80"
) +
# top_n en color
geom_line(
data = dplyr::filter(base, destacado),
aes(x = anio, y = !!sym(indicador), color = geo),
linewidth = 1
) +
geom_point(
data = dplyr::filter(base, destacado),
aes(x = anio, y = !!sym(indicador), color = geo),
size = 2
) +
# promedio nacional
geom_line(
data = prom_nac,
aes(x = anio, y = val),
color = "black", linewidth = 0.9, linetype = 3
) +
scale_x_continuous(breaks = sort(unique(ind_df$anio))) +
{ if (formato_pct) scale_y_continuous(labels = percent) else scale_y_continuous() } +
labs(
title = paste0("Evolución de ", switch(indicador,
pct_potable = "% de hogares con agua potable",
pct_riesgo = "% de hogares en riesgo (2020=No potable; 2021+ añade cloro)",
pct_todos_dias = "% con servicio todos los días",
pct_paga = "% que pagan por el servicio",
med_horas_dia = "Mediana de horas de servicio al día",
med_gasto_total= "Mediana del gasto mensual en agua (S/)")),
subtitle = paste0("Todos los departamentos (gris) • Top ", top_n,
" destacados (color) • Línea punteada: promedio nacional"),
x = NULL, y = ifelse(formato_pct, "Porcentaje", NULL), color = NULL,
caption = "Fuente: ENAHO 2020–2024"
) +
tema_apoyo()
}
plot_linea_departamentos_facetas <- function(ind_df,
indicador = c("pct_potable","pct_riesgo","pct_todos_dias","pct_paga",
"med_horas_dia","med_gasto_total"),
ncol = 5, formato_pct = TRUE) {
indicador <- match.arg(indicador)
ggplot(ind_df, aes(x = anio, y = !!sym(indicador), group = geo)) +
geom_line(linewidth = 0.8, color = "steelblue") +
geom_point(size = 1.5, color = "steelblue") +
facet_wrap(~ geo, ncol = ncol) +
scale_x_continuous(breaks = sort(unique(ind_df$anio))) +
{ if (formato_pct) scale_y_continuous(labels = percent) else scale_y_continuous() } +
labs(
title = paste0("Evolución por departamento: ", switch(indicador,
pct_potable = "% con agua potable",
pct_riesgo = "% en riesgo",
pct_todos_dias = "% con servicio todos los días",
pct_paga = "% que pagan por el servicio",
med_horas_dia = "Mediana horas/día",
med_gasto_total= "Mediana gasto mensual (S/)")),
x = NULL, y = ifelse(formato_pct, "Porcentaje", NULL),
caption = "Fuente: ENAHO 2020–2024"
) +
tema_apoyo() +
theme(legend.position = "none")
}
plot_heatmap_delta_2020 <- function(ind_df,
indicador = c("pct_potable","pct_riesgo","pct_todos_dias","pct_paga"),
top_n = Inf) {
indicador <- match.arg(indicador)
base <- ind_df %>%
group_by(geo) %>%
mutate(base2020 = (!!sym(indicador))[anio == 2020][1],
delta = (!!sym(indicador)) - base2020) %>%
ungroup()
# ordenar por mejora 2020→último año
ultimo <- max(ind_df$anio, na.rm = TRUE)
orden <- base %>%
filter(anio == ultimo) %>%
arrange(desc(delta)) %>%
slice_head(n = top_n) %>%
pull(geo)
dfp <- base %>%
filter(geo %in% orden) %>%
mutate(geo = factor(geo, levels = rev(orden)),
anio = factor(anio, levels = sort(unique(ind_df$anio))))
ggplot(dfp, aes(x = anio, y = geo, fill = delta)) +
geom_tile(color = "white", linewidth = 0.3) +
scale_fill_gradient2(low = "#D73027", mid = "white", high = "#1F78B4",
midpoint = 0, labels = percent) +
labs(
title = paste0("Cambio vs 2020: ", switch(indicador,
pct_potable = "% con agua potable",
pct_riesgo = "% en riesgo (↓ mejor si negativo)",
pct_todos_dias = "% con servicio todos los días",
pct_paga = "% que pagan por el servicio")),
subtitle = "Positivo: mejora respecto a 2020 | Negativo: deterioro respecto a 2020",
x = "Año", y = NULL, fill = "Δ vs 2020", caption = "Fuente: ENAHO 2020–2024"
) +
tema_apoyo() +
theme(panel.grid = element_blank())
}
# Línea estándar: % con agua potable (Top 10 por último año)
plot_linea_departamentos(ind_depto, indicador = "pct_potable",
top_n = 10, ordenar_por = "ultimo", formato_pct = TRUE)
# Línea estándar: % en riesgo (Top 10 por promedio 2020–24)
plot_linea_departamentos(ind_depto, indicador = "pct_riesgo",
top_n = 10, ordenar_por = "prom", formato_pct = TRUE)
# Facetas: % con servicio todos los días (todos los departamentos)
plot_linea_departamentos_facetas(ind_depto, indicador = "pct_todos_dias", ncol = 5)
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
# Heatmap cambio vs 2020: % con agua potable (todos)
plot_heatmap_delta_2020(ind_depto, indicador = "pct_potable", top_n = Inf)
ggsave("aguapotdep.png",
plot = aguapotdep, width = 12, height = 8, units = "cm",
dpi = 300, bg = "white")
ggsave("fuentedep.png",
plot = fuentedep, width = 12, height = 8, units = "cm",
dpi = 300, bg = "white")
ggsave("accesodep.png",
plot = accesodep, width = 12, height = 8, units = "cm",
dpi = 300, bg = "white")
ggsave("condicion.png",
plot = condicion, width = 12, height = 8, units = "cm",
dpi = 300, bg = "white")
ggsave("topriesgoprov.png",
plot = topriesgoprov, width = 12, height = 8, units = "cm",
dpi = 300, bg = "white")
ggsave("depmaxexpo.png",
plot = depmaxexpo, width = 12, height = 8, units = "cm",
dpi = 300, bg = "white")