Skip to contents

Introducción

Esta vignette analiza las condiciones habitacionales usando los datos de viviendas del CPV-2024. La tabla de viviendas se descarga como un único archivo (~100 MB) que incluye todos los departamentos.

# Descargar viviendas con variables de habitabilidad
# (se filtra por Oruro después de descargar el archivo completo)
viviendas <- get_viviendas_2024(
  departamento = "Oruro",
  variables    = c("urbrur", "v03_pared", "v05_techo", "v06_piso",
                   "v07_aguapro", "v09_energia", "v11_basura",
                   "v14_dormit", "tot_pers")
) |>
  collect() |>
  etiquetar_valores(columnas = c("urbrur", "v03_pared", "v05_techo", "v06_piso",
                                  "v07_aguapro", "v09_energia", "v11_basura"))
#>  Usando caché: vivienda.parquet

nrow(viviendas)
#> [1] 271078

Fuente de agua potable

agua <- viviendas |>
  filter(!is.na(v07_aguapro), !is.na(urbrur)) |>
  count(urbrur, v07_aguapro) |>
  group_by(urbrur) |>
  mutate(pct = n / sum(n) * 100)

ggplot(agua, aes(x = urbrur, y = pct, fill = v07_aguapro)) +
  geom_col() +
  scale_fill_brewer(palette = "Blues", direction = -1) +
  labs(
    title   = "Fuente de agua potable por área — Oruro, CPV-2024",
    x       = "Área",
    y       = "Porcentaje de viviendas (%)",
    fill    = "Fuente de agua",
    caption = "Fuente: INE Bolivia, CPV-2024"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom",
        legend.text = element_text(size = 8))

Energía eléctrica

energia <- viviendas |>
  filter(!is.na(v09_energia), !is.na(urbrur)) |>
  count(urbrur, v09_energia) |>
  group_by(urbrur) |>
  mutate(pct = n / sum(n) * 100)

ggplot(energia, aes(x = urbrur, y = pct, fill = v09_energia)) +
  geom_col() +
  scale_fill_brewer(palette = "Oranges", direction = -1) +
  labs(
    title   = "Fuente de energía eléctrica — Oruro, CPV-2024",
    x       = "Área",
    y       = "Porcentaje de viviendas (%)",
    fill    = "Tipo de energía",
    caption = "Fuente: INE Bolivia, CPV-2024"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom",
        legend.text = element_text(size = 8))

Índice de hacinamiento

hacinamiento <- viviendas |>
  filter(!is.na(tot_pers), !is.na(v14_dormit), v14_dormit > 0, tot_pers > 0,
         !is.na(urbrur)) |>
  mutate(
    ppp = tot_pers / v14_dormit,
    nivel = case_when(
      ppp <= 2 ~ "Sin hacinamiento (≤2 p/dormitorio)",
      ppp <= 3 ~ "Hacinamiento medio (2–3)",
      TRUE     ~ "Hacinamiento severo (>3)"
    )
  ) |>
  count(urbrur, nivel) |>
  group_by(urbrur) |>
  mutate(pct = n / sum(n) * 100)

ggplot(hacinamiento, aes(x = urbrur, y = pct, fill = nivel)) +
  geom_col() +
  scale_fill_manual(values = c(
    "Sin hacinamiento (≤2 p/dormitorio)" = "#003087",
    "Hacinamiento medio (2–3)"           = "#F4C430",
    "Hacinamiento severo (>3)"           = "#d7191c"
  )) +
  labs(
    title   = "Hacinamiento habitacional — Oruro, CPV-2024",
    x       = "Área",
    y       = "Porcentaje de viviendas (%)",
    fill    = NULL,
    caption = "Fuente: INE Bolivia, CPV-2024"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")

Material de paredes

paredes <- viviendas |>
  filter(!is.na(v03_pared)) |>
  count(v03_pared, sort = TRUE) |>
  mutate(pct = n / sum(n) * 100)

ggplot(paredes, aes(x = reorder(v03_pared, pct), y = pct)) +
  geom_col(fill = "#003087") +
  geom_text(aes(label = paste0(round(pct, 1), "%")), hjust = -0.1, size = 3.2) +
  coord_flip() +
  ylim(0, max(paredes$pct) * 1.2) +
  labs(
    title   = "Material predominante de paredes — Oruro, CPV-2024",
    x       = NULL,
    y       = "Porcentaje de viviendas (%)",
    caption = "Fuente: INE Bolivia, CPV-2024"
  ) +
  theme_minimal(base_size = 12)

Join personas–viviendas con DuckDB

library(DBI)

con <- DBI::dbConnect(duckdb::duckdb(), dbdir = ":memory:")

duckdb::duckdb_register_arrow(
  con, "personas",
  get_personas_2024(departamento = "Oruro",
               variables = c("idep","iprov","imun","i00","p25_sexo","p26_edad","nivel_edu"))
)
#>  Descargando persona_dep04.parquet (~14 MB)...
#>  Descargado persona_dep04.parquet [356ms]
#> 
duckdb::duckdb_register_arrow(
  con, "viviendas",
  get_viviendas_2024(departamento = "Oruro",
                variables = c("idep","iprov","imun","i00","v07_aguapro","urbrur","tot_pers"))
)
#>  Usando caché: vivienda.parquet

# Personas en viviendas sin acceso a red pública de agua, por área
resultado <- DBI::dbGetQuery(con, "
  SELECT
    v.urbrur,
    COUNT(*)            AS personas,
    ROUND(AVG(p.p26_edad), 1) AS edad_promedio
  FROM personas p
  JOIN viviendas v
    ON p.idep = v.idep AND p.iprov = v.iprov
   AND p.imun = v.imun AND p.i00  = v.i00
  WHERE v.v07_aguapro != 1
  GROUP BY v.urbrur
  ORDER BY personas DESC
")

DBI::dbDisconnect(con)

resultado |> etiquetar_valores()
#>   urbrur personas edad_promedio
#> 1  Rural   129099          33.6
#> 2 Urbana    30466          26.8