Agregación de Datos del Censo de Población y Vivienda 2012 por Municipio

Author

JTRO43

Published

May 15, 2025

Introducción

El censo de población y vivienda 2012 (CPV 2012) fue un censo de hecho con cobertura nacional y absoluta, es decir que se visitaron todas las viviendas, independientemente de que esta haya estado ocupada o no. Los datos de cada vivienda del CPV 2012 se agregaron en una base de datos única donde cada fila representa una vivienda y cada columna representa o un valor de localización de la vivienda o una de las respuestas a cada una de las preguntas del censo referidas a la vivienda. La base de datos original está en formato “.sav” el cual es nativo y propio de SPSS.
La intención del presente script es la de extraer los valores de una o varias preguntas de interés del CPV 2012 y agregar los datos a nivel de localidad y/o municipal en función de un archivo (csv, tsv, xls, xlsx o txt) que contenga la codificación de los municipios a ser utilizada, optimizando el manejo de la memoria por parte de R. El script eventualmente podría ser utilizado para todas las preguntas de este censo u otros censos con estructuración de datos similar. Los datos de viviendas del Censo de Población y Vivienda 2012 disponibles en: https://censo.ine.gob.bo/cuestionarios-censales/.

Preprocesamiento

Importación de librerías requeridas:

Code
# Preprocesamiento  # Sección de preparación inicial.
# Cargar paquetes necesarios.
library(tidyverse) # Carga el conjunto de paquetes 'tidyverse' (incluye dplyr, ggplot2, etc.) para manipulación y visualización de datos.
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.2     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.4     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Code
library(writexl) # Carga el paquete 'writexl' para escribir archivos Excel (.xlsx).
library(arrow) # Carga el paquete 'arrow' para leer archivos Parquet (.parquet).

Attaching package: 'arrow'

The following object is masked from 'package:lubridate':

    duration

The following object is masked from 'package:utils':

    timestamp

Librerías Utilizadas.

Lectura de la base de datos de boletas censales:

Code
## Read the parquet file  # Leer el archivo de datos de viviendas.
dtib2 <- read_parquet("CENSO_2012_VIV_corr_com_local_code.parquet") # Lee el archivo Parquet especificado y lo guarda en la variable 'dtib2'. Asume que el archivo está en esa ruta.

## Get a glimpse of dtib  # Obtener un resumen rápido de los datos.
summary(dtib2) # Muestra un resumen estadístico de cada columna en el dataframe 'dtib2'.
  I02_DEPTO           I03_PROV           I04_SECC          I06_CIUCOM       
 Length:3172321     Length:3172321     Length:3172321     Length:3172321    
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
   I05_DIST          I07_ZONAC         I22_LOCALIDAD       I08_SECTOR       
 Length:3172321     Length:3172321     Length:3172321     Length:3172321    
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
   I09_SEGM           I10_MANZ           ID_UNICO          I00_FOLIO        
 Length:3172321     Length:3172321     Length:3172321     Length:3172321    
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
   I_BC_VIV        
 Length:3172321    
 Class :character  
 Mode  :character  
                   
                   
                   
                   
                                                             P01_TIPOVIV     
 Casa / Choza / Pahuichi                                           :2544747  
 Cuarto(s) o habitación(es) suelta(s)                              : 365384  
 Departamento                                                      : 154584  
 Vivienda colectiva (Hoteles, Hospitales, Asilos, Cuarteles, Otros):  34182  
 Local no destinado para vivienda                                  :  32739  
 Vivienda improvisada                                              :  27714  
 (Other)                                                           :  12971  
                                              P02_CONDOCUPA    
 0                                                   :  25285  
 Vivienda ocupada con personas presentes             :2778697  
 Vivienda ocupada con personas temporalmente ausentes: 178694  
 Vivienda desocupada para alquilar y/o vender        :  19153  
 Vivienda desocupada  en construcción o reparación   :  36732  
 Vivienda abandonada                                 :  86607  
 NA's                                                :  47153  
                                 P03_PARED       P04_REVOQ     
 Ladrillo, bloque de cemento, hormigón:1462533   Si  :2123375  
 Adobe, tapial                        :1048395   No  : 680607  
 Madera                               : 167806   NA's: 368339  
 Tabique,quinche                      :  36657                 
 Piedra                               :  33095                 
 (Other)                              :  55496                 
 NA's                                 : 368339                 
                                          P05_TECHO             P06_PISOS      
 Calamina o plancha metálica                   :1488363   Cemento    :1041333  
 Teja de arcilla, teja de cemento, fibrocemento: 781503   Tierra     : 839651  
 Losa de hormigón armado                       : 173447   Cerámica   : 437277  
 Paja, palma, caña, barro                      : 305738   Machihembre: 142585  
 Otro                                          :  54931   Ladrillo   : 128597  
 NA's                                          : 368339   (Other)    : 214539  
                                                          NA's       : 368339  
                          P07_AGUAPRO     
 Cañería de red                 :1915226  
 Lluvia, río, vertiente, acequia: 242962  
 Pileta pública                 : 240983  
 Pozo o noria sin bomba         : 193998  
 Pozo o noria con bomba         : 101378  
 (Other)                        : 109435  
 NA's                           : 368339  
                                                            P08_AGUADIST    
 Por cañería dentro la vivienda                                   :1362581  
 Por cañería fuera de la vivienda , pero dentro del lote o terreno: 823386  
 Por cañería fuera de la vivienda, del lote o terreno             :  65986  
 No se distribuye por cañería                                     : 552029  
 Ignorado                                                         :      0  
 NA's                                                             : 368339  
                                                                            
               P09_SERVSANIT                         P10_DESAGUE     
 Si, de uso privado   :1076725   Al alcantarillado         :1129113  
 Si, de uso compartido: 882089   A una cámara séptica      : 226215  
 No tiene             : 845168   A un pozo ciego           : 590709  
 NA's                 : 368339   A la calle                :   5373  
                                 A la quebrada, río        :   6581  
                                 A un lago, laguna, curichi:    823  
                                 NA's                      :1213507  
                                      P11_ENERGIA     
 Red de empresa eléctrica (servicio público):2225608  
 Motor propio                               :  25971  
 Panel solar                                :  31544  
 Otra                                       :  24196  
 No tiene                                   : 496663  
 NA's                                       : 368339  
                                                      
                          P12_COMBUS      P13_COCINA      P14_HABITAC    
 Gas en garrafa                :1698602   Sí  :2100252   1      :898479  
 Leña                          : 664304   No  : 703730   2      :700567  
 Gas domiciliario (por cañería): 312869   NA's: 368339   3      :512537  
 Guano, bosta o taquia         :  56472                  4      :338100  
 No cocina                     :  49295                  5      :158037  
 (Other)                       :  22440                  (Other):196262  
 NA's                          : 368339                  NA's   :368339  
   P15_DORMIT     
 1      :1502846  
 2      : 698315  
 3      : 374423  
 4      : 146183  
 5      :  46750  
 (Other):  35465  
 NA's   : 368339  
                                                        P16_BASURA     
 Utilizan el servicio público de recolección (carro basurero):1239713  
 La queman                                                   : 640357  
 La depositan en el basurero público o contenedor            : 376688  
 La botan en un terreno baldío o en la calle                 : 196625  
 La botan al río                                             : 195794  
 (Other)                                                     : 154805  
 NA's                                                        : 368339  
 P17A_RADIO     P17B_TV        P17C_COMPUT    P17D_INTERNET  P17E_TELEF    
 Si  :2117300   Si  :1864461   Si  : 662683   Si  : 268334   Si  :1825374  
 No  : 686682   No  : 939521   No  :2141299   No  :2535648   No  : 978608  
 NA's: 368339   NA's: 368339   NA's: 368339   NA's: 368339   NA's: 368339  
                                                                           
                                                                           
                                                                           
                                                                           
 P18A_VEHIC     P18B_BICIC     P18C_MOTO      P18D_CARRETA   P18E_BOTE     
 Si  : 614383   Si  : 854404   Si  : 319813   Si  : 112619   Si  :  23826  
 No  :2189599   No  :1949578   No  :2484169   No  :2691363   No  :2780156  
 NA's: 368339   NA's: 368339   NA's: 368339   NA's: 368339   NA's: 368339  
                                                                           
                                                                           
                                                                           
                                                                           
                          P19_TENENCIA     P20A_EMIGRA    P20B_EMIGPERS    
 Propia                         :1954913   Si  : 310182   Min.   :1.00     
 Alquilada                      : 455081   No  :2493800   1st Qu.:1.00     
 Prestada por parientes o amigos: 189015   NA's: 368339   Median :1.00     
 En contrato anticrético        :  87068                  Mean   :1.58     
 Cedida por servicios           :  65443                  3rd Qu.:2.00     
 (Other)                        :  52462                  Max.   :4.00     
 NA's                           : 368339                  NA's   :2862139  
 P21A_MORTA     P21B_MORTPERS    P22A_DISCAPACIDAD         URBRUR       
 Si  : 127327   Min.   :0.00     Si  : 287667      Área Urbana:2024299  
 No  :2676655   1st Qu.:0.00     No  :2516315      Área Rural :1148022  
 NA's: 368339   Median :0.00     NA's: 368339                           
                Mean   :0.05                                            
                3rd Qu.:0.00                                            
                Max.   :4.00                                            
                NA's   :368339                                          
  TOTPERS_VIV     TOT_HOMBRES_VIV  TOT_MUJERES_VIV  NOMBRE_COMUNIDAD  
 Min.   :  1.00   Min.   :  1.00   Min.   :  1.00   Length:3172321    
 1st Qu.:  2.00   1st Qu.:  1.00   1st Qu.:  1.00   Class :character  
 Median :  3.00   Median :  2.00   Median :  2.00   Mode  :character  
 Mean   :  3.53   Mean   :  2.04   Mean   :  2.14                     
 3rd Qu.:  5.00   3rd Qu.:  3.00   3rd Qu.:  3.00                     
 Max.   :544.00   Max.   :491.00   Max.   :253.00                     
 NA's   :321186   NA's   :716279   NA's   :812876                     
                      PROV                              MUN         
 Murillo                : 548554   Santa Cruz de la Sierra: 396565  
 Andrés Ibañez          : 449009   El Alto                : 280321  
 Cercado                : 195775   La Paz                 : 249120  
 Cercado_duplicated_0401: 104637   Cochabamba             : 195775  
 Quillacollo            :  99272   Oruro                  :  88609  
 Chapare                :  94229   Sucre                  :  77759  
 (Other)                :1680845   (Other)                :1884172  
    Agua_OK       Saneamiento_OK   Electricidad_OK  Num_Serv_Basic 
 Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.000  
 1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.000  
 Median :1.0000   Median :0.0000   Median :1.0000   Median :2.000  
 Mean   :0.6037   Mean   :0.3559   Mean   :0.7021   Mean   :1.662  
 3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:3.000  
 Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :3.000  
                                                                   
         filter_$           ElecOK           AguaOK           SanOK       
 Not Selected: 346471   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
 Selected    :2778697   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
 NA's        :  47153   Median :1.0000   Median :1.0000   Median :1.0000  
                        Mean   :0.7273   Mean   :0.7117   Mean   :0.6134  
                        3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000  
                        Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
                                                                          
  NumServicios     PERS_DORM      DUM_HACINAMIENTO    PERS_HAB     
 Min.   :0.000   Min.   : 0.12    Min.   :0.0000   Min.   : 0.12   
 1st Qu.:1.000   1st Qu.: 1.00    1st Qu.:0.0000   1st Qu.: 1.00   
 Median :3.000   Median : 2.00    Median :0.0000   Median : 1.33   
 Mean   :2.052   Mean   : 2.31    Mean   :0.2203   Mean   : 1.78   
 3rd Qu.:3.000   3rd Qu.: 3.00    3rd Qu.:0.0000   3rd Qu.: 2.00   
 Max.   :3.000   Max.   :25.00    Max.   :1.0000   Max.   :25.00   
                 NA's   :372820                    NA's   :368339  
    DEP_CODE     DEP_CODE_CHAR       LOCAL_CODE       
 Min.   :1.000   Length:3172321     Length:3172321    
 1st Qu.:2.000   Class :character   Class :character  
 Median :3.000   Mode  :character   Mode  :character  
 Mean   :4.076                                        
 3rd Qu.:7.000                                        
 Max.   :9.000                                        
                                                      

Extracción de datos para las preguntas 7, 8 y 9 del CPV 2012:

Code
# Data Extraction for Questions 7, 8, 9 and 10 of 2012 Census  # Sección para extraer datos relevantes.
## Water Access  # Subsección para datos de acceso a agua.
### Water Tibble # Crear tabla (tibble) con datos de agua.
water_tib <- dtib2 %>% # Inicia una cadena de operaciones sobre 'dtib2'.
  select(I02_DEPTO, # Selecciona la columna código de departamento. 
         DEP_CODE, # Selecciona la columna código de departamento (parece duplicado o alternativo). 
         I03_PROV, # Selecciona la columna código de provincia. 
         I04_SECC, # Selecciona la columna código de sección municipal. 
         I06_CIUCOM, # Selecciona la columna código de ciudad/comunidad.
         LOCAL_CODE, # Selecciona la columna código de localidad (probablemente un identificador único). 
         NOMBRE_COMUNIDAD, # Selecciona la columna nombre de la comunidad/localidad. 
         P07_AGUAPRO, # Selecciona la columna con la respuesta a la pregunta 7 (procedencia del agua). 
         P08_AGUADIST, # Selecciona la columna con la respuesta a la pregunta 7 (procedencia del agua)
         TOT_HOMBRES_VIV, # Selecciona la columna con el valor de la cantidad de hombres en la vivienda)
         TOT_MUJERES_VIV, # Selecciona la columna con el valor de la cantidad de mujeres en la vivienda)
         TOTPERS_VIV) # Selecciona la columna con el valor de la cantidad total de personas en la vivienda).  # El resultado se guarda en 'water_tib'.

### Water Tibble Summary  # Resumen de la tabla de agua.
summary(water_tib) # Muestra un resumen estadístico de la tabla 'water_tib'.
  I02_DEPTO            DEP_CODE       I03_PROV           I04_SECC        
 Length:3172321     Min.   :1.000   Length:3172321     Length:3172321    
 Class :character   1st Qu.:2.000   Class :character   Class :character  
 Mode  :character   Median :3.000   Mode  :character   Mode  :character  
                    Mean   :4.076                                        
                    3rd Qu.:7.000                                        
                    Max.   :9.000                                        
                                                                         
  I06_CIUCOM         LOCAL_CODE        NOMBRE_COMUNIDAD  
 Length:3172321     Length:3172321     Length:3172321    
 Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character  
                                                         
                                                         
                                                         
                                                         
                          P07_AGUAPRO     
 Cañería de red                 :1915226  
 Lluvia, río, vertiente, acequia: 242962  
 Pileta pública                 : 240983  
 Pozo o noria sin bomba         : 193998  
 Pozo o noria con bomba         : 101378  
 (Other)                        : 109435  
 NA's                           : 368339  
                                                            P08_AGUADIST    
 Por cañería dentro la vivienda                                   :1362581  
 Por cañería fuera de la vivienda , pero dentro del lote o terreno: 823386  
 Por cañería fuera de la vivienda, del lote o terreno             :  65986  
 No se distribuye por cañería                                     : 552029  
 Ignorado                                                         :      0  
 NA's                                                             : 368339  
                                                                            
 TOT_HOMBRES_VIV  TOT_MUJERES_VIV   TOTPERS_VIV    
 Min.   :  1.00   Min.   :  1.00   Min.   :  1.00  
 1st Qu.:  1.00   1st Qu.:  1.00   1st Qu.:  2.00  
 Median :  2.00   Median :  2.00   Median :  3.00  
 Mean   :  2.04   Mean   :  2.14   Mean   :  3.53  
 3rd Qu.:  3.00   3rd Qu.:  3.00   3rd Qu.:  5.00  
 Max.   :491.00   Max.   :253.00   Max.   :544.00  
 NA's   :716279   NA's   :812876   NA's   :321186  

Tibble de Saneamiento:

Code
## Sanitation Access  # Subsección para datos de saneamiento.
### Sanitation Tibble  # Crear tabla (tibble) con datos de saneamiento.
sanitation_tib <- dtib2 %>% # Inicia una cadena de operaciones sobre 'dtib2'.
  select(I02_DEPTO, # Selecciona código de departamento. 
         DEP_CODE, # Selecciona código de departamento alternativo/duplicado. 
         I03_PROV, # Selecciona código de provincia. 
         I04_SECC, # Selecciona código de sección municipal. 
         I06_CIUCOM, # Selecciona código de ciudad/comunidad. 
         LOCAL_CODE, # Selecciona código de localidad. 
         NOMBRE_COMUNIDAD, # Selecciona nombre de la comunidad/localidad. 
         P09_SERVSANIT, # Selecciona la respuesta a la pregunta 9 (tenencia de servicio sanitario). 
         P10_DESAGUE) # Selecciona la respuesta a la pregunta 10 (tipo de desagüe).  # El resultado se guarda en 'sanitation_tib'.

Agregación de Datos

Extracción de las respuestas existentes a la pregunta 7 del CPV.

Code
# Aggregation of Data at a Municipality Level  # Sección para agregar datos (aunque el código agrupa por LOCAL_CODE, no municipio).
## Aggregation of Data for Question 7  # Agregar datos de la Pregunta 7.
### Extraction of all Unique Values for Question 7  # Obtener respuestas únicas de P7.
water_tib %>% # Usa la tabla de agua.
  distinct(P07_AGUAPRO) %>% # Obtiene filas con valores únicos en la columna P07_AGUAPRO. 
  pull(P07_AGUAPRO) # Extrae esos valores únicos como un vector.  # El resultado se imprime en la consola.
[1] Cañería de red                  Pileta pública                 
[3] <NA>                            Lluvia, río, vertiente, acequia
[5] Carro repartidor (aguatero)     Pozo o noria con bomba         
[7] Lago, laguna, curichi           Pozo o noria sin bomba         
7 Levels: Cañería de red Pileta pública ... Lago, laguna, curichi

Pregunta 7 del CPV-2012

Agregación de los datos a nivel municipal:

Code
### Creation of the Aggregated data frame for Question 7  # Crear tabla agregada para P7.
P07_L_aggregated_tib <- water_tib %>% # Usa la tabla de agua.
  mutate(P07_AGUAPRO_CHAR = as.character(P07_AGUAPRO)) %>% # Crea una nueva columna convirtiendo P07 a texto. 
  group_by(LOCAL_CODE) %>%  # Agrupa las filas por el código de localidad. 
  summarise( # Calcula resúmenes para cada grupo (localidad).
    Nombre_Localidad = first(NOMBRE_COMUNIDAD), # Toma el primer nombre de comunidad encontrado en el grupo. 
    Cañería_de_red = sum(P07_AGUAPRO_CHAR == "Cañería de red", na.rm = TRUE), # Cuenta cuántas viviendas respondieron "Cañería de red", ignorando NAs. 
    Pileta_pública = sum(P07_AGUAPRO_CHAR == "Pileta pública", na.rm = TRUE), # Cuenta cuántas respondieron "Pileta pública".
    carro_repartidor_aguatero = sum(P07_AGUAPRO_CHAR == "Carro repartidor (aguatero)", na.rm = TRUE), # Cuenta cuántas respondieron "Carro repartidor (aguatero)". 
    pozo_o_noria_con_bomba = sum(P07_AGUAPRO_CHAR == "Pozo o noria con bomba", na.rm = TRUE), # Cuenta cuántas respondieron "Pozo o noria con bomba". 
    pozo_o_noria_sin_bomba = sum(P07_AGUAPRO_CHAR == "Pozo o noria sin bomba", na.rm = TRUE), # Cuenta cuántas respondieron "Pozo o noria sin bomba". 
    lluvia_río_vertiente_acequia = sum(P07_AGUAPRO_CHAR == "Lluvia, río, vertiente, acequia", na.rm = TRUE), # Cuenta cuántas respondieron "Lluvia, río, vertiente, acequia". 
    lago_laguna_curichi = sum(P07_AGUAPRO_CHAR == "Lago, laguna, curichi", na.rm = TRUE), # Cuenta cuántas respondieron "Lago, laguna, curichi". 
    n_missing_aguapro = sum(is.na(P07_AGUAPRO_CHAR)), # Cuenta cuántos valores NA (faltantes) hay en P07 para esa localidad. 
    n_observations = n() # Cuenta el número total de filas (viviendas) en ese grupo (localidad).
  ) # El resultado se guarda en 'P07_aggregated_tib'.

Guardar los datos extraídos en formato csv y xlsx:

Code
### Save the data frame as csv  # Guardar la tabla agregada como CSV.
#write_csv(P07_L_aggregated_tib, "P07_aggregated.csv") # Escribe el contenido de 'P07_L_aggregated_tib' en un archivo CSV. 


### Save the data frame as xlsx  # Guardar la tabla agregada como XLSX.
#write_xlsx(P07_L_aggregated_tib, "P07_aggregated.xlsx") # Escribe el contenido de 'P07_L_aggregated_tib' en un archivo Excel. 

Pregunta 8 del CPV 2012

Extracción de las respuestas únicas existentes a la pregunta 8 del CPV.

Code
## Aggregation of Data for Question 8  # Agregar datos de la Pregunta 8.
### Extraction of all Unique Values for Question 8  # Obtener respuestas únicas de P8.
water_tib %>% # Usa la tabla de agua.
  distinct(P08_AGUADIST) %>% # Obtiene valores únicos de la columna P08_AGUADIST. 
  pull(P08_AGUADIST) # Extrae esos valores como vector.  # El resultado se imprime en la consola.
[1] Por cañería dentro la vivienda                                   
[2] Por cañería fuera de la vivienda , pero dentro del lote o terreno
[3] No se distribuye por cañería                                     
[4] Por cañería fuera de la vivienda, del lote o terreno             
[5] <NA>                                                             
5 Levels: Por cañería dentro la vivienda ...

Pregunta 8 del CPV-2012

Agregación de los datos a nivel de localidad:

Code
### Creation of the Aggregated data frame for Question 8  # Crear tabla agregada para P8.
P08_L_aggregated_tib <- water_tib %>% # Usa la tabla de agua.
  mutate(P08_AGUADIST_CHAR = as.character(P08_AGUADIST)) %>% # Convierte P08 a texto. 
  group_by(LOCAL_CODE) %>%  # Agrupa por localidad. 
  summarise( # Calcula resúmenes por localidad.
    Nombre_Localidad = first(NOMBRE_COMUNIDAD), # Toma el primer nombre de la localidad. 
    Cañería_dentro_vivienda_dentro_lote = sum(P08_AGUADIST_CHAR  == "Por cañería dentro la vivienda", na.rm = TRUE), # Cuenta respuestas "Por cañería dentro la vivienda". 
    Cañería_fuera_vivienda_dentro_lote = sum(P08_AGUADIST_CHAR  == "Por cañería fuera de la vivienda , pero dentro del lote o terreno", na.rm = TRUE), # Cuenta respuestas "Por cañería fuera de la vivienda , pero dentro del lote o terreno". [cite: 5, 6]
    Cañería_fuera_vivienda_fuera_lote = sum(P08_AGUADIST_CHAR  == "Por cañería fuera de la vivienda, del lote o terreno", na.rm = TRUE), # Cuenta respuestas "Por cañería fuera de la vivienda, del lote o terreno". 
    n_missing_aguaviv = sum(is.na(P08_AGUADIST_CHAR)), # Cuenta los NAs en P08 para la localidad. 
    n_observations = n() # Cuenta el total de viviendas en la localidad. 
  ) # El resultado se guarda en 'P08_aggregated_tib'.

Guardar los datos extraídos en formato csv y xlsx:

Code
### Guardar como CSV.
#write_csv(P08_L_aggregated_tib, "P08_L_aggregated.csv") # Escribe la tabla agregada P08 a CSV. 


### Guardar como XLSX.
#write_xlsx(P08_L_aggregated_tib, "P08_L_aggregated.xlsx") # Escribe la tabla agregada P08 a Excel. 

Pregunta 9 del CPV 2012

Extracción de las respuestas existentes a la pregunta 9 del CPV.

Code
## Aggregation for Question 9  # Agregar datos de la Pregunta 9.
### Extraction of all Unique Values for Question 9  # Obtener respuestas únicas de P9.
sanitation_tib %>% # Usa la tabla de saneamiento.
  distinct(P09_SERVSANIT) %>% # Obtiene valores únicos de P09_SERVSANIT. 
  pull(P09_SERVSANIT) # Extrae como vector.  # El resultado se imprime en la consola.
[1] Si, de uso compartido No tiene              Si, de uso privado   
[4] <NA>                 
Levels: Si, de uso privado Si, de uso compartido No tiene

Pregunta 9 del CPV-2012

Agregación de los datos a nivel de localidad:

Code
### Creation of the Aggregated data frame for Question 9  # Crear tabla agregada para P9.
P09_L_aggregated_tib <- sanitation_tib %>% # Usa la tabla de saneamiento.
  mutate(P09_SERVSANIT_CHAR = as.character(P09_SERVSANIT)) %>% # Convierte P09 a texto. 
  group_by(LOCAL_CODE) %>%  # Agrupa por localidad. 
  summarise( # Calcula resúmenes por localidad.
    Nombre_Localidad = first(NOMBRE_COMUNIDAD), # Toma el primer nombre de la localidad. 
    Baño_compartido = sum(P09_SERVSANIT_CHAR  == "Si, de uso compartido", na.rm = TRUE), # Cuenta respuestas "Si, de uso compartido". 
    Baño_privado = sum(P09_SERVSANIT_CHAR  == "Si, de uso privado", na.rm = TRUE), # Cuenta respuestas "Si, de uso privado". 
    Sin_baño = sum(P09_SERVSANIT_CHAR  == "No tiene", na.rm = TRUE), # Cuenta respuestas "No tiene". 
    n_missing_baños = sum(is.na(P09_SERVSANIT_CHAR)), # Cuenta los NAs en P09 para la localidad. 
    n_observations = n() # Cuenta el total de viviendas en la localidad.
  ) # El resultado se guarda en 'P09_L_aggregated_tib'.

Guardar los datos extraídos en formato csv y xlsx:

Code
### Guardar como CSV.
#write_csv(P09_L_aggregated_tib, "P09_L_aggregated.csv") # Escribe la tabla agregada P09 a CSV. 


### Guardar como XLSX.
#write_xlsx(P09_L_aggregated_tib, "P09_Laggregated.xlsx") # Escribe la tabla agregada P09 a Excel. 

Pregunta 10 del CPV 2012

Extracción de las respuestas existentes a la pregunta 10 del CPV.

Code
## Aggregation for Question 10  # Agregar datos de la Pregunta 10.
### Extraction of all Unique Values for Question 10  # Obtener respuestas únicas de P10.
sanitation_tib %>% # Usa la tabla de saneamiento.
  distinct(P10_DESAGUE) %>% # Obtiene valores únicos de P10_DESAGUE. 
  pull(P10_DESAGUE) # Extrae como vector.  # El resultado se imprime en la consola.
[1] Al alcantarillado          <NA>                      
[3] A un pozo ciego            A la calle                
[5] A la quebrada, río         A una cámara séptica      
[7] A un lago, laguna, curichi
6 Levels: Al alcantarillado A una cámara séptica ... A un lago, laguna, curichi

Pregunta 10 del CPV-2012

Agregación de los datos a nivel de localidad:

Code
### Creation of the Aggregated data frame for Question 10  # Crear tabla agregada para P10.
P10_L_aggregated_tib <- sanitation_tib %>% # Usa la tabla de saneamiento.
  mutate(P10_DESAGUE_CHAR = as.character(P10_DESAGUE)) %>% # Convierte P10 a texto. 
  group_by(LOCAL_CODE) %>%  # Agrupa por localidad. 
  summarise( # Calcula resúmenes por localidad.
    Nombre_Localidad = first(NOMBRE_COMUNIDAD), # Toma el primer nombre de la localidad. 
    Conexion_Alcantarillado = sum(P10_DESAGUE_CHAR  == "Al alcantarillado", na.rm = TRUE), # Cuenta respuestas "Al alcantarillado". 
    Pozo_Ciego = sum(P10_DESAGUE_CHAR  == "A un pozo ciego", na.rm = TRUE), # Cuenta respuestas "A un pozo ciego". 
    A_Calle = sum(P10_DESAGUE_CHAR  == "A la calle", na.rm = TRUE), # Cuenta respuestas "A la calle". 
    A_Rio = sum(P10_DESAGUE_CHAR  == "A la quebrada, río", na.rm = TRUE), # Cuenta respuestas "A la quebrada, río". 
    A_Camara_Septica = sum(P10_DESAGUE_CHAR  == "A una cámara séptica", na.rm = TRUE), # Cuenta respuestas "A una cámara séptica". 
    A_lago_laguna_curichi = sum(P10_DESAGUE_CHAR  == "A un lago, laguna, curichi", na.rm = TRUE), # Cuenta respuestas "A un lago, laguna, curichi". 
    n_missing_sanitation = sum(is.na(P10_DESAGUE_CHAR)), # Cuenta los NAs en P10 para la localidad. 
    n_observations = n(), # Cuenta el total de viviendas en la localidad. 
    COD = first(I06_CIUCOM)
  ) # El resultado se guarda en 'P10_L_aggregated_tib'.

Guardar los datos extraídos en formato csv y xlsx:

Code
### Guardar como CSV.
#write_csv(P10_L_aggregated_tib, "P10_L_aggregated.csv") # Escribe la tabla agregada P10 a CSV. 


### Guardar como XLSX.
#write_xlsx(P10_L_aggregated_tib, "P10_L_aggregated.xlsx") # Escribe la tabla agregada P10 a Excel. 

Cruce de Información con la base de datos de 343 Municipios

A nivel Localidad

Lectura de la base de datos de localidades de los 343 municipios:

Code
# Matching from SDSN localities data set  # Sección para cruzar con datos de SDSN.
## Importation the SDSN Localities data set  # Importar datos de localidades de SDSN.
sdsn_localities <- read_csv("R:/SDSN/Datasets/Internal Sources/RO BASE DE DATOS DE POBLACIONES.csv") # Lee un archivo CSV externo y lo guarda en 'sdsn_localities'. 
Rows: 19413 Columns: 13
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (7): Departamento, Provincia, Municipio, Nom_Comunidad, DEPARTAMENTO_343...
dbl (6): Cod_Comunidad, id_unico_r, poblacion_, viviendas_, CODIGO_MUNI, Cod...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Code
## Renombrar la variable para la unión.
sdsn_localities <- sdsn_localities %>%  # Usa la tabla de SDSN.
  rename(LOCAL_CODE = Cod_Comunidad) %>% # Renombra la columna 'Cod_Comunidad' a 'LOCAL_CODE'. 
  mutate(LOCAL_CODE = as.character(LOCAL_CODE)) # Convierte la nueva columna 'LOCAL_CODE' a texto. 

Unión de las bases de datos generadas y las de SDSN a nivel de localidad:

Code
#Unión para Pregunta 7
merged_L_P07_tib <- left_join(P07_L_aggregated_tib, sdsn_localities, by = join_by(LOCAL_CODE))
#Unión para Pregunta 8
merged_L_P08_tib <- left_join(P08_L_aggregated_tib, sdsn_localities, by = join_by(LOCAL_CODE))
#Unión para Pregunta 9
merged_L_P09_tib <- left_join(P09_L_aggregated_tib, sdsn_localities, by = join_by(LOCAL_CODE))
#Unión para Pregunta 10
merged_L_P10_tib <- left_join(P10_L_aggregated_tib, sdsn_localities, by = join_by(LOCAL_CODE))

Detección de errores en la extracción:

Code
## Error Detection
### Missing Entries P07
missing_entries <- merged_L_P07_tib %>%
  filter(is.na(MUNICI_343)) %>%
  select(LOCAL_CODE, Nombre_Localidad, DEPARTAMENTO_343, MUNICI_343)

# Entries present in INE DB and not in GeoBolivia DB
missing_2 <- anti_join(P07_L_aggregated_tib,sdsn_localities, by = 'LOCAL_CODE')

# Entries present in GeoBolivia DB and not in INE DB
anti_join(sdsn_localities, P07_L_aggregated_tib, by = 'LOCAL_CODE')
# A tibble: 0 × 13
# ℹ 13 variables: Departamento <chr>, Provincia <chr>, Municipio <chr>,
#   LOCAL_CODE <chr>, Nom_Comunidad <chr>, id_unico_r <dbl>, poblacion_ <dbl>,
#   viviendas_ <dbl>, CODIGO_MUNI <dbl>, DEPARTAMENTO_343 <chr>,
#   PROVINCI_343 <chr>, MUNICI_343 <chr>, Codigo_343 <dbl>

Agregación a Nivel Municipal

Agregación Municipal de la Pregunta 7:

Code
## P07 Municipal Aggregation 
merged_M343_P07_tib <- merged_L_P07_tib %>% 
  group_by(Codigo_343) %>% 
  summarise(
    Nombre_Municipio = first(MUNICI_343),
    Cañería_de_red = sum(Cañería_de_red, na.rm = TRUE),
    Pileta_pública = sum(Pileta_pública, na.rm = TRUE),
    Carro_repartidor_aguatero = sum(carro_repartidor_aguatero, na.rm = TRUE),
    Pozo_o_noria_con_bomba = sum(pozo_o_noria_con_bomba, na.rm = TRUE),
    Pozo_o_noria_sin_bomba = sum(pozo_o_noria_sin_bomba, na.rm = TRUE),
    Lluvia_río_vertiente_acequia = sum(lluvia_río_vertiente_acequia, na.rm = TRUE),
    lago_laguna_curichi = sum(lago_laguna_curichi, na.rm = TRUE), 
    n_missing_aguapro = sum(is.na(n_missing_aguapro)), # Counts the NAs found in the Municipality
    n_observations = n() #  Count the number of rows in each group or total)
  )

Agregación Municipal de la Pregunta 8:

Code
merged_M343_P08_tib <- merged_L_P08_tib %>% 
  group_by(Codigo_343) %>%  
  summarise(
    Nombre_Municipio = first(MUNICI_343),
    Cañería_dentro_vivienda_dentro_lote = sum(Cañería_dentro_vivienda_dentro_lote, na.rm = TRUE),
    Cañería_fuera_vivienda_dentro_lote = sum(Cañería_fuera_vivienda_dentro_lote, na.rm = TRUE),
    Cañería_fuera_vivienda_fuera_lote = sum(Cañería_fuera_vivienda_fuera_lote, na.rm = TRUE),
    n_missing_aguaviv = sum(is.na(n_missing_aguaviv)), # Counts the NAs found in the Locality
    n_observations = n() #  Count the number of rows in each group or total
  )

Agregación Municipal de la Pregunta 9:

Code
merged_M343_P09_tib <- merged_L_P09_tib %>% 
  group_by(Codigo_343) %>%  
  summarise(
    Nombre_Municipio = first(MUNICI_343),
    Baño_compartido = sum(Baño_compartido, na.rm = TRUE),
    Baño_privado = sum(Baño_privado, na.rm = TRUE),
    Sin_baño = sum(Sin_baño, na.rm = TRUE),
    n_missing_baños = sum(is.na(n_missing_baños)), # Counts the NAs found in the Locality
    n_observations = n() #  Count the number of rows in each group or total
  )

Agregación Municipal de la Pregunta 10:

Code
merged_M343_P10_tib <- merged_L_P10_tib %>% 
  group_by(Codigo_343) %>%  
  summarise(
    Nombre_Municipio = first(MUNICI_343),
    Conexion_Alcantarillado = sum(Conexion_Alcantarillado, na.rm = TRUE),
    Pozo_Ciego = sum(Pozo_Ciego, na.rm = TRUE),
    A_Calle = sum(A_Calle, na.rm = TRUE),
    A_Rio = sum(A_Rio, na.rm = TRUE),
    A_Camara_Septica = sum(A_Camara_Septica, na.rm = TRUE),
    A_lago_laguna_curichi = sum(A_lago_laguna_curichi, na.rm = TRUE),
    n_missing_sanitation = sum(is.na(n_missing_sanitation)), # Counts the NAs found in the Locality
    n_observations = n() #  Count the number of rows in each group or total
  )

Generación de Mapas con los datos extraídos

Importación de librerías para la generación de mapas:

Code
library(sf)
Linking to GEOS 3.13.1, GDAL 3.10.2, PROJ 9.5.1; sf_use_s2() is TRUE
Code
library(ggplot2)
library(tmap)
library(RColorBrewer)
library(viridis)
Loading required package: viridisLite

Lectura del geopackage/shapefile base:

Code
gpkg_path <- "R:/SDSN/Datasets/Internal Sources/SDSN_Información_Base_Bolivia_2019/SDSN_Información_Base_Bolivia_2019/343_Municipios_Bolivia_2024.shp"
municipios_gpkg <- st_read(gpkg_path)
Reading layer `343_Municipios_Bolivia_2024' from data source 
  `R:\SDSN\Datasets\Internal Sources\SDSN_Información_Base_Bolivia_2019\SDSN_Información_Base_Bolivia_2019\343_Municipios_Bolivia_2024.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 343 features and 16 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 281410.7 ymin: 116832.8 xmax: 1584767 ymax: 1582335
Projected CRS: WGS_1984_Bolivia_Lambert_Conformal_Conic

Inspección de los campos existentes en el geopackage:

Code
## Ver Ver los tipos de datos
municipios_gpkg %>% glimpse()
Rows: 343
Columns: 17
$ cat        <dbl> 209, 260, 152, 168, 249, 2, 9, 13, 7, 18, 4, 17, 19, 16, 20…
$ DEPARTAMEN <chr> "Oruro", "Potosí", "La Paz", "La Paz", "Potosí", "Beni", "B…
$ PROVINCIA  <chr> "Sabaya", "Nor Lipez", "Manco Kapac", "Omasuyos", "Daniel C…
$ MUNICIPIO  <chr> "Coipasa", "Colcha ''K'' (Villa Martin)", "Copacabana", "Hu…
$ CAPITAL    <chr> "Coipasa", "Villa Martín", "Copacabana", "Huarina", "Llica"…
$ COD        <dbl> 40902, 50901, 21701, 20204, 51401, 80102, 80803, 80702, 803…
$ DEP_MUN_TI <chr> "Coipasa", "Colcha ''K'' (Villa Martin)", "Copacabana", "Hu…
$ POB_2012   <dbl> 903, 12997, 14931, 7948, 4150, 5277, 4111, 4955, 9478, 8902…
$ POB_2024   <dbl> 1405, 12638, 17431, 8657, 4150, 7654, 4628, 5441, 10910, 10…
$ DIF_2012_2 <dbl> 502, -359, 2500, 709, 6198, 2377, 517, 486, 1432, 18119, -1…
$ x_DIFEREN  <dbl> 55.6, -2.8, 16.7, 8.9, 0.0, 45.0, 12.6, 9.8, 15.1, 20.4, -1…
$ x_TOT_2012 <dbl> 0.01, 0.13, 0.15, 0.08, 0.04, 0.05, 0.04, 0.05, 0.09, 0.88,…
$ x_TOT_2024 <dbl> 0.01, 0.11, 0.15, 0.08, 0.04, 0.07, 0.04, 0.05, 0.10, 0.95,…
$ AREA       <dbl> 202.91, 18188.61, 176.26, 180.71, 5679.93, 8735.96, 5484.29…
$ DENSI_2012 <dbl> 4.45, 0.71, 84.71, 43.98, 0.73, 0.60, 0.75, 0.62, 1.00, 6.9…
$ DENSI_2024 <dbl> 6.92, 0.69, 98.89, 47.91, 0.73, 0.88, 0.84, 0.68, 1.15, 8.3…
$ geometry   <MULTIPOLYGON [m]> MULTIPOLYGON (((445805.6 49..., MULTIPOLYGON (…
Code
## Ver los nombres de los campos (columnas)
municipios_gpkg %>% colnames()
 [1] "cat"        "DEPARTAMEN" "PROVINCIA"  "MUNICIPIO"  "CAPITAL"   
 [6] "COD"        "DEP_MUN_TI" "POB_2012"   "POB_2024"   "DIF_2012_2"
[11] "x_DIFEREN"  "x_TOT_2012" "x_TOT_2024" "AREA"       "DENSI_2012"
[16] "DENSI_2024" "geometry"  

Selección de campos relevantes y omisión de campos duplicados:

Code
## Selección de Campos a ser mantenidos
fields_selected <- c("DEPARTAMEN", 
                     "PROVINCIA", 
                     "MUNICIPIO", 
                     "CAPITAL",
                     "COD",
                     "POB_2012",
                     "POB_2024",
                     "AREA")

## Filtrado de Campos Requeridos
municipios_gpkg <- municipios_gpkg[, fields_selected]

## Cambio de Nombres de Variables para Concordancia con el Dataset INE
municipios_gpkg <- municipios_gpkg %>%
  rename(Departamento  = DEPARTAMEN,
         Provincia = PROVINCIA,
         Municipio = MUNICIPIO,
         Capital = CAPITAL,
         COD_M_343 = COD,
         Poblacion_2012 = POB_2012,
         Poblacion_2024 = POB_2024) %>% 
  mutate(COD_M_343 = as.character(COD_M_343))

Unión de datos agregados con el geopackage/shapefile:

Code
# La columna 'COD_M_343' en municipios_gpkg es el código único de municipio.
# La columna 'Codigo_343' en los tibbles municipales es el código único de municipio.

# Asegurar consistencia de tipos para la unión.
# Si 'COD_M_343' es numérico y 'Codigo_343' es character (o viceversa), la unión fallará, de ahí que es necesario la conversión de ambos a 'character' para la unión.

# Unión entre el Tibble de datos municipales de la P07 y el geopackage
merged_M343_P07_tib <- merged_M343_P07_tib %>% 
  mutate(Codigo_343 = as.character(Codigo_343))

# Unión entre el Tibble de datos municipales de la P08 y el geopackage
merged_M343_P08_tib <- merged_M343_P08_tib %>% 
  mutate(Codigo_343 = as.character(Codigo_343))

# Unión entre el Tibble de datos municipales de la P09 y el geopackage
merged_M343_P09_tib <- merged_M343_P09_tib %>% 
  mutate(Codigo_343 = as.character(Codigo_343))

# Unión entre el Tibble de datos municipales de la P10 y el geopackage
merged_M343_P10_tib <- merged_M343_P10_tib %>% 
  mutate(Codigo_343 = as.character(Codigo_343))

Fusión de bases de datos:

Code
# Guardar los dataframes fusionados como nuevos GeoPackages
## Fusión para P07
M343_geodata_P07 <- left_join(municipios_gpkg, merged_M343_P07_tib, by = c("COD_M_343" = "Codigo_343"))

## Fusión para P08
M343_geodata_P08 <- left_join(municipios_gpkg, merged_M343_P08_tib, by = c("COD_M_343" = "Codigo_343"))

## Fusión para P09
M343_geodata_P09 <- left_join(municipios_gpkg, merged_M343_P09_tib, by = c("COD_M_343" = "Codigo_343"))

## Fusión para P10
M343_geodata_P10 <- left_join(municipios_gpkg, merged_M343_P10_tib, by = c("COD_M_343" = "Codigo_343"))

Una vez realizada la unión, opcionalmente se pueden remover las variables utilizadas para evitar redundancia:

Code
# Opcional: remover las columnas de unión _join si no se necesitan más
# M343_geodata_P07 <- M343_geodata_P07 %>% select(-any_of("Codigo_343"))
# M343_geodata_P08 <- M343_geodata_P08 %>% select(-any_of("Codigo_343"))
# M343_geodata_P09 <- M343_geodata_P09 %>% select(-any_of("Codigo_343"))
# M343_geodata_P10 <- M343_geodata_P10 %>% select(-any_of("Codigo_343"))

Indicadores de los ODS para el Atlas Municipal

En este ejemplo se calcularán los indicadores del ODS 6.

Meta 6.1

La meta 6.1 se monitorea a través del indicador 6.1.1 (Indicator 6.1.1: Proportion of population using safely managed drinking water services) cuyos metadatos se encuentran en: https://unstats.un.org/sdgs/metadata/files/Metadata-06-01-01.pdf. Sin embargo, los datos del censo no contemplan datos de calidad de agua, ni de duración de la provision del servicio ni de distancia al punto de acopio desde la vivienda, por lo que, no se podría estimar directamente el valor del indicador 6.1.1 solo de la condición de “Agua Segura” requerida para el cálculo del ODS.

Con esto la ecuación de la proporción de “Agua Segura” sería:

\(\text{%}SW = \text{%}CR + \text{%}PP + \text{%}CRA + \text{%}PCB + \text{%}PSB\)

Donde:

\(SW: \text{Agua Segura}\) \(CR: \text{Cañería de Red}\) \(PP: \text{Pileta Pública}\) \(CRA: \text{Carro Repartidor Aguatero}\) \(PSB: \text{Pozo o Noria Sin Bomba}\)

Mientras que la proporción de “Agua No Segura” tiene por ecuación la siguiente:

\(\text{%}UW = \text{%}PCB + \text{%}LVRA + \text{%}LLC + \text{%}NSNR\)

Donde:

\(UW: \text{Agua No Segura}\) \(PCB: \text{Pozo o Noria Con Bomba}\) \(LVRA: \text{Laguna, Vertiente, Río o Acequia}\) \(SSNR: \text{No se sabe o no responde}\)

La diferenciación entre fuentes de agua segura y no segura se la hizo de acuerdo con los datos establecidos en: https://washdata.org/report/jmp-methodology-2017-update, la cual presenta la siguiente tabla:

Clasificación de Primer Nivel Clasificación de Segundo Nivel Tipo de Fuente
Agua de Grifo Agua entubada a la vivienda Fuente Mejorada
Agua entubada al patio/parcela Fuente Mejorada
Pileta pública Fuente Mejorada
Otros Fuente Mejorada
Agua Subterránea Pozo entubado, pozo perforado Fuente Mejorada
Pozo protegido Fuente Mejorada
Vertiente Protegida Fuente Mejorada
Pozo No Protegido Fuente No Mejorada
Vertiente No Protegida Fuente No Mejorada
Agua de Lluvia Tanque de Agua Cubierto Fuente Mejorada
Tanque de Agua Descubierto Fuente Mejorada
Agua Envasada Agua Embotellada Fuente Mejorada
Agua embolsada/ en sachet Fuente Mejorada
Agua Suministrada Carro con Bidón o Tanque Fuente Mejorada
Camión Cisterna Fuente Mejorada
Agua Superficial Río Fuente No Mejorada
Lago / Laguna Fuente No Mejorada
Represa Fuente No Mejorada
Estanque Fuente No Mejorada
Arroyo Fuente No Mejorada
Canal de Riego Fuente No Mejorada
Otros Otros Mejorados Fuente Mejorada
Otros No Mejorados Fuente No Mejorada
No se sabe Fuente No Mejorada
NA Fuente No Mejorada

Con ello se agregan los datos a nivel municipal, considerando que para los casos donde las respuestas son:

Code
municip_343_Agua_Mejorada <- M343_geodata_P07 %>% 
  rowwise() %>%
  mutate(Agua_Mejorada = sum(c(Cañería_de_red,
                               Pileta_pública,
                               Carro_repartidor_aguatero,
                               Pozo_o_noria_con_bomba)),
         Agua_No_Mejorada = sum(c(Pozo_o_noria_sin_bomba,
                                  Lluvia_río_vertiente_acequia,
                                  lago_laguna_curichi)),
         Total_Agua_Mejorada = sum(c(Agua_Mejorada, Agua_No_Mejorada)),
         Porc_Agua_Mejorada = ifelse(Total_Agua_Mejorada == 0, 
                                     0, 
                                     (Agua_Mejorada / Total_Agua_Mejorada) * 100),
         Porc_Agua_No_Mejorada = ifelse(Total_Agua_Mejorada == 0, 
                                        0, 
                                        (Agua_No_Mejorada / Total_Agua_Mejorada) * 100),
         Codigo_M_343 = as.character(COD_M_343))  %>% 
  select("Codigo_M_343", 
         "Nombre_Municipio", 
         "Agua_Mejorada", 
         "Agua_No_Mejorada", 
         "Total_Agua_Mejorada",
         "Porc_Agua_Mejorada",
         "Porc_Agua_No_Mejorada")

Mapas con TMAP V4

Se elaboró un mapa en tmap v4 para las proporciones de agua segura:

Code
tmap_mode("plot")
ℹ tmap mode set to "plot".
Code
tm_map_agua_mejorada <- 
  tm_shape(municip_343_Agua_Mejorada) +
    tm_polygons(
      "Porc_Agua_Mejorada",                               # variable to plot
      title    = "Porcentaje de Fuentes de Agua\nMejorada (%)",  # legend title
      palette  = "Blues",                                  # brewer Blues palette
      style    = "quantile",                               # classification
      n        = 5,                                        # number of classes
      border.col = "grey40",                               # polygon borders
      alpha    = 1,                                      # border transparency
      textNA   = "Sin datos"                               # NA label
    ) +
    tm_layout(
      main.title        = "Acceso a Fuentes de Agua Mejorada por Municipio\n(Según lo Requerido por el ODS 6.1.1)",
      main.title.size   = 1.1,
      legend.outside    = TRUE,
      legend.title.size = 0.9,
      legend.text.size  = 0.7,
      frame             = FALSE
    ) +
    tm_compass(type = "arrow", position = c("right", "top")) +
    tm_scale_bar(position = c("right", "bottom"))

── tmap v3 code detected ───────────────────────────────────────────────────────
[v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
`tm_scale_intervals()`.
ℹ Migrate the argument(s) 'style', 'n', 'palette' (rename to 'values'),
  'textNA' (rename to 'label.na') to 'tm_scale_intervals(<HERE>)'
For small multiples, specify a 'tm_scale_' for each multiple, and put them in a
list: 'fill'.scale = list(<scale1>, <scale2>, ...)'[v3->v4] `tm_polygons()`: use 'fill' for the fill color of polygons/symbols
(instead of 'col'), and 'col' for the outlines (instead of 'border.col').[v3->v4] `tm_polygons()`: use `fill_alpha` instead of `alpha`.[v3->v4] `tm_polygons()`: migrate the argument(s) related to the legend of the
visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'[v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(main.title = )`! `tm_scale_bar()` is deprecated. Please use `tm_scalebar()` instead.
Code
tm_map_agua_mejorada
[cols4all] color palettes: use palettes from the R package cols4all. Run
`cols4all::c4a_gui()` to explore them. The old palette name "Blues" is named
"brewer.blues"
Multiple palettes called "blues" found: "brewer.blues", "matplotlib.blues". The first one, "brewer.blues", is returned.

[plot mode] fit legend/component: Some legend items or map compoments do not
fit well, and are therefore rescaled.
ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

TMAP v4 Mapa Embedido

Code
tmap_mode("view")
ℹ tmap mode set to "view".
Code
tm_map_agua_mejorada <- 
  tm_shape(municip_343_Agua_Mejorada) +
    tm_polygons(
      "Porc_Agua_Mejorada",                               # variable to plot
      title    = "Porcentaje de Fuentes de Agua\nMejorada (%)",  # legend title
      palette  = "Blues",                                  # brewer Blues palette
      style    = "quantile",                               # classification
      n        = 5,                                        # number of classes
      border.col = "grey40",                               # polygon borders
      alpha    = 1,                                      # border transparency
      textNA   = "Sin datos"                               # NA label
    ) +
    tm_layout(
      main.title        = "Acceso a Fuentes de Agua Mejorada por Municipio\n(Según lo Requerido por el ODS 6.1.1)",
      main.title.size   = 1.1,
      legend.outside    = TRUE,
      legend.title.size = 0.9,
      legend.text.size  = 0.7,
      frame             = FALSE
    ) +
    tm_scale_bar(position = c("left", "bottom"))
── tmap v3 code detected ───────────────────────────────────────────────────────
[v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
`tm_scale_intervals()`.
ℹ Migrate the argument(s) 'style', 'n', 'palette' (rename to 'values'),
  'textNA' (rename to 'label.na') to 'tm_scale_intervals(<HERE>)'
For small multiples, specify a 'tm_scale_' for each multiple, and put them in a
list: 'fill'.scale = list(<scale1>, <scale2>, ...)'
[v3->v4] `tm_polygons()`: use `fill_alpha` instead of `alpha`.
[v3->v4] `tm_polygons()`: migrate the argument(s) related to the legend of the
visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'
[v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(main.title = )`
! `tm_scale_bar()` is deprecated. Please use `tm_scalebar()` instead.
Code
tm_map_agua_mejorada
[cols4all] color palettes: use palettes from the R package cols4all. Run
`cols4all::c4a_gui()` to explore them. The old palette name "Blues" is named
"brewer.blues"
Multiple palettes called "blues" found: "brewer.blues", "matplotlib.blues". The first one, "brewer.blues", is returned.