PASO 1: Carga la base de datos, analizar variables y tratar los datos del ITER, 2020, NL

El primer paso en todo códiggo de R-Studio es siempre cargar los paquetes necesarios para la lectura de bases de datos externas, en este caso el paquete de tidyverse incluye readr para la lectura de archivos CSV y dplyr para la manipulación de datos. Además, se establece la configuración de los chunks para mostrar el código en el documento final.

library (tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── 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

PASO 1.1.- Cargamos archivo CSV

Procedemos a leer el archivo de base de datos CSV utilizando la función read_csv del paquete readr. Se especifica que todas las columnas deben ser leídas como caracteres para evitar problemas con los tipos de datos, y se establece la codificación de caracteres a “latin1” para manejar correctamente los acentos y caracteres especiales presentes en los nombres de localidades y variables.

iter_mn <- read_csv(
  "ITER_19CSV20.csv",
  col_types = cols(.default = col_character()),
  locale = locale(encoding = "latin1")
)

cat("Dimensiones:", nrow(iter_mn), "filas x", ncol(iter_mn), "columnas\n")
## Dimensiones: 4974 filas x 286 columnas

PASO 2.- Separar las variables

En este paso extenso, se identifican y agrupan las variables de la base de datos en categorías temáticas para facilitar su análisis posterior. Se crean vectores de nombres de variables para cada categoría, como geográficas, población, educación, economía, salud, vivienda, población indígena, discapacidad y población afromexicana. Esto permite organizar el análisis y enfocarse en aspectos específicos de la realidad social del estado de Nuevo León y posteriormente del municipio de Mier y Noriega.

"PASO 2.- Separar las variables"
## [1] "PASO 2.- Separar las variables"
"En este caso por factores geográficos"
## [1] "En este caso por factores geográficos"
vars_geo <- c("ENTIDAD", "NOM_ENT", "MUN", "NOM_MUN", "LOC", "NOM_LOC", 
            "LONGITUD", "LATITUD", "ALTITUD", "TAMLOC")

"Ahora variables por población"
## [1] "Ahora variables por población"
vars_pob <- c("POBTOT", "POBFEM", "POBMAS", "P_0A2", "P_0A2_F", "P_0A2_M",
             "P_15YMAS", "P_60YMAS", "REL_H_M", "POB0_14", "POB15_64",
             "POB65_MAS")

"Ahora de educación"
## [1] "Ahora de educación"
vars_educacion <- c("P3A5_NOA", "P6A11_NOA", "P12A14NOA",
                    "P15YM_AN", "P15YM_AN_F", "P15YM_AN_M",
                    "P15YM_SE", "P15PRI_IN", "P15PRI_CO",       
                    "P15SEC_IN", "P15SEC_CO", "P18YM_PB",      
                    "GRAPROES", "GRAPROES_F", "GRAPROES_M")

"Ahora de economía"
## [1] "Ahora de economía"
vars_economia <- c("PEA", "PEA_F", "PEA_M",
                   "PE_INAC", "POCUPADA", "PDESOCUP")

"Ahora de salud"
## [1] "Ahora de salud"
vars_salud <- c("PSINDER", "PDER_SS", "PDER_IMSS", "PDER_ISTE",
                "PAFIL_PDOM", "PDER_SEGP", "PDER_IMSSB")

"Ahora de vivienda"
## [1] "Ahora de vivienda"
vars_vivienda <- c("VIVTOT", "TVIVHAB", "VIVPAR_HAB", "OCUPVIVPAR", "PROM_OCUP",
                   "VPH_PISODT", "VPH_PISOTI",                   
                   "VPH_C_ELEC", "VPH_S_ELEC",                    
                   "VPH_AGUADV", "VPH_AEASP", "VPH_AGUAFV",      
                   "VPH_DRENAJ", "VPH_NODREN",                    
                   "VPH_C_SERV", "VPH_SNBIEN",                     
                   "VPH_REFRI", "VPH_LAVAD", "VPH_AUTOM",        
                   "VPH_CEL", "VPH_INTER", "VPH_PC")   

"Ahora de población indigena"
## [1] "Ahora de población indigena"
vars_indigena <- c("P3YM_HLI", "P3HLINHE", "P3HLI_HE",         
                   "P5_HLI", "PHOG_IND")

"Ahora de discapacidad"
## [1] "Ahora de discapacidad"
vars_discapacidad <- c("PCON_DISC", "PCON_LIMI", "PSIND_LIM")

"Ahora de población AFROMexicana"
## [1] "Ahora de población AFROMexicana"
vars_afro <- c("POB_AFRO", "POB_AFRO_F", "POB_AFRO_M")

cat("Variables de identificación: ", length (vars_geo), "\n")
## Variables de identificación:  10
cat("Variables de clave seleccionadas;",
    length (c(vars_pob, vars_educacion, vars_economia, 
              vars_salud, vars_vivienda, vars_indigena,
              vars_discapacidad, vars_afro)), "\n")
## Variables de clave seleccionadas; 73

PASO 3.- ¿Qué hacemos con los *?

#Como pudimos observar en la base, hay varios carácteres de asterisco (*) que indican datos protegidos por confidencialidad. Para manejar esto, primero identificamos cuáles variables numéricas contienen estos asteriscos y luego los reemplazamos por NA para poder convertir las columnas a formato numérico sin errores y así no afectan el peso de los indicadores que construiremos más adelante. También como pequeño ejercicio de identificación de asteriscos, se numeraron los top 10 variables que contaban con mayor “confidencialidad” en la base de datos.

"PASO 3.- ¿Qué hacemos con los *?"
## [1] "PASO 3.- ¿Qué hacemos con los *?"
vars_numericas <- setdiff (names(iter_mn), vars_geo)

"¿Cuántos asteriscos hay?"
## [1] "¿Cuántos asteriscos hay?"
n_asteriscos <- iter_mn %>%
  summarise (across(all_of(vars_numericas), ~sum(. == "*", na.rm = TRUE))) %>%
  pivot_longer(everything(), names_to = "variable", values_to = "n_asteriscos") %>%
  filter(n_asteriscos > 0) %>%
  arrange(desc(n_asteriscos))

cat("\nVariables con asteriscos (top 10):\n")
## 
## Variables con asteriscos (top 10):
print(head(n_asteriscos, 10))
## # A tibble: 10 × 2
##    variable  n_asteriscos
##    <chr>            <int>
##  1 PROM_HNV          2931
##  2 POBFEM            2839
##  3 POBMAS            2839
##  4 P_0A2             2839
##  5 P_0A2_F           2839
##  6 P_0A2_M           2839
##  7 P_3YMAS           2839
##  8 P_3YMAS_F         2839
##  9 P_3YMAS_M         2839
## 10 P_5YMAS           2839
cat("Total de variables afectadas:", nrow(n_asteriscos), "\n")
## Total de variables afectadas: 273
iter <- iter_mn %>%
  mutate(across(all_of(vars_numericas), ~na_if(., "*"))) %>%
  mutate(across(all_of(vars_numericas), as.numeric))
## Warning: There were 271 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `across(all_of(vars_numericas), as.numeric)`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 270 remaining warnings.

PASO 4.- Verificamos que todo esté correcto

Para verificar quer todo el proceso de limpieza de datos se realizó correctamente, se revisan las clases de las variables clave como POBTOT y NOM_LOC para asegurarse de que sean numéricas y caracteres respectivamente. Además, se cuentan los valores NA en estas columnas para confirmar que los asteriscos fueron reemplazados correctamente y no quedan datos faltantes sin identificar.

"PASO 4.- Verificamos que todo bien"
## [1] "PASO 4.- Verificamos que todo bien"
cat("\n--- Verificación de tipos ---\n")
## 
## --- Verificación de tipos ---
cat("Clase POBTOT:", class(iter$POBTOT), "\n")
## Clase POBTOT: numeric
cat("Clase NOM_LOC:", class(iter$NOM_LOC), "\n")
## Clase NOM_LOC: character
cat("NAs en POBTOT:", sum(is.na(iter$POBTOT)), "\n")
## NAs en POBTOT: 0
cat("NAs en POBFEM:", sum(is.na(iter$POBFEM)), "\n")
## NAs en POBFEM: 2839

PASO 5.- Resumen de población total Mier y Noriega

Ahora, filtramos la base de datos para obtener solo la fila correspondiente al municipio de Mier y Noriega (NOM_MUN) con el código de localidad “0000”, que representa el total del municipio. Luego, se muestra un resumen de la población total, desglosada por género, utilizando la función cat para imprimir los resultados de manera clara y formateados

"PASO 5.- Resumen de población total Mier y Noriega"
## [1] "PASO 5.- Resumen de población total Mier y Noriega"
mier_noriega <- iter %>%
  filter(NOM_MUN == "Mier y Noriega", LOC == "0000")

# Mostrar resultado
cat("=== MUNICIPIO:", mier_noriega$NOM_MUN, "===\n")
## === MUNICIPIO: Mier y Noriega ===
cat("Población total:", format(mier_noriega$POBTOT, big.mark = ","), "\n")
## Población total: 7,652
cat("  - Mujeres:", format(mier_noriega$POBFEM, big.mark = ","), "\n")
##   - Mujeres: 3,857
cat("  - Hombres:", format(mier_noriega$POBMAS, big.mark = ","), "\n")
##   - Hombres: 3,795

PASO 6.- Filtramos localidades de Mier y Noriega

En este paso procedemos a filtrar la base de datos para obtener solo las filas correspondientes a las localidades del municipio de Mier y Noriega, excluyendo la fila del total del municipio (LOC “0000”) y las filas de localidades no especificadas o protegidas por confidencialidad (LOC “9998” y “9999”). Luego, se muestra un resumen de las localidades obtenidas, incluyendo su nombre y población total, femenina y masculina, utilizando la función cat para imprimir los resultados de manera clara y formateada. Posteriormente, se numeran las primeras 20 localidades de Mier y Noriega junto con los datos ya desglosados.

"PASO 6.- Filtramos localidades de Mier y Noriega"
## [1] "PASO 6.- Filtramos localidades de Mier y Noriega"
mier_localidades <- iter %>%
  filter(NOM_MUN == "Mier y Noriega", 
         !LOC %in% c ("0000", "9998", "9999"))

cat ("Localidades de Mier y Noriega: ", nrow(mier_localidades), "\n\n")
## Localidades de Mier y Noriega:  25
print(mier_localidades %>% select(NOM_LOC, POBTOT, POBFEM, POBMAS) %>% head(20))
## # A tibble: 20 × 4
##    NOM_LOC                                   POBTOT POBFEM POBMAS
##    <chr>                                      <dbl>  <dbl>  <dbl>
##  1 Mier y Noriega                              1180    604    576
##  2 La Cardona                                   479    232    247
##  3 Cerros Blancos                               586    297    289
##  4 Dolores                                      549    277    272
##  5 El Gallito                                   206     91    115
##  6 Jesús María del Terrero (El Lindero)        215    108    107
##  7 La Joya del Zacate                            45     21     24
##  8 Lagunita de Taberna                          208     93    115
##  9 Las Mesas de San Juan                        124     57     67
## 10 Las Palomas (Lajillas)                       865    447    418
## 11 La Presita de Cerros Blancos (La Presita)    515    243    272
## 12 El Refugio de Cerros Blancos                 531    290    241
## 13 San Antonio de Alamitos                      412    212    200
## 14 San Elías                                     30     14     16
## 15 San Isidro                                   414    214    200
## 16 San José de Cuatro Caminos                   84     39     45
## 17 San José de Medina (Rancho de Abajo)         14      9      5
## 18 San Rafael de los Martínez                   657    345    312
## 19 Tapona Moreña                               519    256    263
## 20 San Diego                                      4     NA     NA

PASO 7.- Resumimos población por localidades de Mier y Noriega

En este paso, se calcula la suma total de la población (POBTOT) de todas las localidades filtradas de Mier y Noriega utilizando la función sum con el argumento na.rm = TRUE para ignorar los valores NA. Luego, se compara esta suma con el total oficial del municipio obtenido previamente para verificar si coinciden o si hay alguna discrepancia. Se utiliza la función cat para imprimir un resumen claro y formateado de los resultados, incluyendo la población total sumada de las localidades, la población total oficial del municipio y la diferencia entre ambos, junto con una indicación de si coinciden o si es necesario revisar los datos.

"PASO 7.- Resumimos población por localidades de Mier y Noriega"
## [1] "PASO 7.- Resumimos población por localidades de Mier y Noriega"
pob_suma <- sum(mier_localidades$POBTOT, na.rm = TRUE)

"Comparamos con el total del municipio"
## [1] "Comparamos con el total del municipio"
pob_oficial <- iter %>%
  filter(NOM_MUN == "Mier y Noriega", LOC == "0000") %>%
  pull(POBTOT)

cat("*** Resumen Municipal de Mier y Noriega ***\n")
## *** Resumen Municipal de Mier y Noriega ***
cat("Población total sumada de localidades:", format(pob_suma, big.markk = ","), "\n")
## Población total sumada de localidades: 7652
cat("Población total oficial del municipio:", format(pob_oficial, big.mark = ","), "\n")
## Población total oficial del municipio: 7,652
cat("Diferencia (oficial - sumada):", pob_suma - pob_oficial,
    ifelse(pob_suma == pob_oficial, " ✔ Coincide", " ⚠ Revisar"), "\n\n")
## Diferencia (oficial - sumada): 0  ✔ Coincide

PASO 8.- Indicadores de educación por localidad

Ahora, procedemos a armar los indicadores de educación para cada localidad de Mier y Noriega. Se seleccionan las variables relevantes para el análisis educativo, como la población total, la población de 15 años y más, la población analfabeta de 15 años y más, y el grado promedio de escolaridad. Luego, se calcula el porcentaje de analfabetismo dividiendo la población analfabeta entre la población total de 15 años y más, multiplicando por 100 y redondeando a dos decimales. Finalmente, se ordenan las localidades de mayor a menor porcentaje de analfabetismo y se muestra una tabla con los resultados utilizando la función print para imprimir todos los datos sin mezclar.

"PASO 8.- Indicadores de educación por localidad"
## [1] "PASO 8.- Indicadores de educación por localidad"
educacion_mier <- mier_localidades %>%
  select(NOM_LOC, POBTOT, P_15YMAS, P15YM_AN, GRAPROES) %>%
  mutate(
    PCT_ANALFABETISMO = round ((P15YM_AN / P_15YMAS) * 100, 2)
  ) %>%
  arrange(desc(PCT_ANALFABETISMO))

cat("*** Indicadores de Educación por Localidad en Mier y Noriega ***\n")
## *** Indicadores de Educación por Localidad en Mier y Noriega ***
cat("Ordenado de mayor a menor analfabetismo \n\n")
## Ordenado de mayor a menor analfabetismo
educacion_mier %>%
  print(n = Inf, width = Inf)
## # A tibble: 25 × 6
##    NOM_LOC                                   POBTOT P_15YMAS P15YM_AN GRAPROES
##    <chr>                                      <dbl>    <dbl>    <dbl>    <dbl>
##  1 La Cardona                                   479      323       77     5.3 
##  2 San Isidro                                   414      294       66     5.69
##  3 La Presita de Cerros Blancos (La Presita)    515      352       72     5.83
##  4 Tapona Moreña                               519      350       51     6.27
##  5 San José de Cuatro Caminos                   84       66        9     5.98
##  6 San José de Medina (Rancho de Abajo)         14        8        1     6.13
##  7 El Gallito                                   206      149       18     5.44
##  8 El Refugio de Cerros Blancos                 531      358       40     6.64
##  9 San Elías                                     30       18        2     6.11
## 10 Mier y Noriega                              1180      840       83     7.27
## 11 Cerros Blancos                               586      367       36     6.65
## 12 Lagunita de Taberna                          208      135       12     5.87
## 13 Las Palomas (Lajillas)                       865      500       43     6.71
## 14 Jesús María del Terrero (El Lindero)        215      148       11     6.51
## 15 Las Mesas de San Juan                        124       73        5     6.58
## 16 San Rafael de los Martínez                   657      430       28     7.47
## 17 San Antonio de Alamitos                      412      278       17     6.8 
## 18 Dolores                                      549      382       21     7.46
## 19 La Joya del Zacate                            45       30        1     6.13
## 20 San Diego                                      4       NA       NA    NA   
## 21 Falfurrias (San Carlos)                        1       NA       NA    NA   
## 22 La Tortuga                                     1       NA       NA    NA   
## 23 La Puerta de Guadalupe (Los Mireles)           4       NA       NA    NA   
## 24 Tanque Roto                                    4       NA       NA    NA   
## 25 Los García                                     5       NA       NA    NA   
##    PCT_ANALFABETISMO
##                <dbl>
##  1             23.8 
##  2             22.4 
##  3             20.4 
##  4             14.6 
##  5             13.6 
##  6             12.5 
##  7             12.1 
##  8             11.2 
##  9             11.1 
## 10              9.88
## 11              9.81
## 12              8.89
## 13              8.6 
## 14              7.43
## 15              6.85
## 16              6.51
## 17              6.12
## 18              5.5 
## 19              3.33
## 20             NA   
## 21             NA   
## 22             NA   
## 23             NA   
## 24             NA   
## 25             NA

PASO 9.- Indicadores y resumen estadístico

En este paso se realiza un análisis estadístico de los indicadores educativos para las localidades de Mier y Noriega que tienen datos disponibles. Se calcula el número de localidades con datos de educación, el número de localidades con datos confidenciales (NA), y se resumen las estadísticas del porcentaje de analfabetismo y el grado promedio de escolaridad, incluyendo el promedio, mínimo y máximo para cada indicador. Se utiliza la función cat para imprimir los resultados de manera clara y formateada, destacando las estadísticas generales obtenidas a partir de las localidades que cuentan con datos disponibles.

"PASO 9.- Indicadores y resumen estadístico"
## [1] "PASO 9.- Indicadores y resumen estadístico"
cat("*** Estadísticas generales (con las localidades que tienen datos) ***\n\n")
## *** Estadísticas generales (con las localidades que tienen datos) ***
cat("Localidaes con datos de educación: ",
    sum(!is.na(educacion_mier$PCT_ANALFABETISMO)), "de", nrow(educacion_mier), "\n")
## Localidaes con datos de educación:  19 de 25
cat("Localidades con datos confidenciales (NA)",
    sum(is.na(educacion_mier$PCT_ANALFABETISMO)), "\n\n")
## Localidades con datos confidenciales (NA) 6
cat("Analfabetismo (%): \n")
## Analfabetismo (%):
cat("Promedio:", round(mean(educacion_mier$PCT_ANALFABETISMO, na.rm = TRUE), 2), "%\n") 
## Promedio: 11.3 %
cat("Mínimo:", round(min(educacion_mier$PCT_ANALFABETISMO, na.rm = TRUE), 2), "%\n")
## Mínimo: 3.33 %
cat("Máximo:", round(max(educacion_mier$PCT_ANALFABETISMO, na.rm = TRUE), 2), "%\n\n")
## Máximo: 23.84 %
cat("Grado promedio de escolaridad: \n")
## Grado promedio de escolaridad:
cat("Promedio:", round(mean(educacion_mier$GRAPROES, na.rm = TRUE), 2), "\n") 
## Promedio: 6.36
cat("Mínimo:", round(min(educacion_mier$GRAPROES, na.rm = TRUE), 2), "\n")
## Mínimo: 5.3
cat("Máximo:", round(max(educacion_mier$GRAPROES, na.rm = TRUE), 2), "\n")
## Máximo: 7.47

PASO 10.- Análisis de vivienda y servicios por localidades de Mier y Noriega

Ahora, realizamos un análisis de vivienda y servicios para las localidades de Mier y Noriega. Se seleccionan las variables relevantes para el análisis de vivienda, como la población total, el número de viviendas particulares habitadas, y las viviendas con servicios específicos como agua entubada, drenaje e internet. Luego, se calculan los indicadores de carencia para cada servicio, como el número de viviendas sin agua entubada, sin drenaje y sin internet, así como el porcentaje de viviendas con estas carencias. Finalmente, se crea un índice de carencia sumando los porcentajes de cada servicio y se ordenan las localidades de mayor a menor índice de carencia para identificar las zonas más vulnerables del municipio.

"PASO 10.- Análisis de vivienda y servicios por localidades de Mier y Noriega"
## [1] "PASO 10.- Análisis de vivienda y servicios por localidades de Mier y Noriega"
vivienda_mier <- mier_localidades %>%
  select(LOC, NOM_LOC, POBTOT, VIVPAR_HAB,
         VPH_AGUADV, VPH_AEASP, VPH_AGUAFV,
         VPH_NODREN, VPH_DRENAJ,
         VPH_INTER) %>%
  mutate(
    SIN_AGUA = VIVPAR_HAB - (VPH_AGUADV + VPH_AEASP + VPH_AGUAFV),
    SIN_DRENAJE = VPH_NODREN,
    SIN_INTERNET = VIVPAR_HAB - VPH_INTER,
    PCT_SIN_AGUA = round((SIN_AGUA / VIVPAR_HAB)*-1 * 100, 2),
    PCT_SIN_DRENAJE = round((SIN_DRENAJE / VIVPAR_HAB) * 100, 2),
    PCT_SIN_INTERNET = round((SIN_INTERNET / VIVPAR_HAB) * 100, 2),
    INDICE_CARENCIA = PCT_SIN_AGUA + PCT_SIN_DRENAJE + PCT_SIN_INTERNET
  ) %>%
  arrange(desc(INDICE_CARENCIA))

cat("*** Índice de Carencia por Localidad en Mier y Noriega ***\n\n")
## *** Índice de Carencia por Localidad en Mier y Noriega ***
cat("Ordenado de mayor a menor índice de carencia \n\n")
## Ordenado de mayor a menor índice de carencia
vivienda_mier %>%
 select(NOM_LOC, POBTOT,VIVPAR_HAB,
        PCT_SIN_AGUA, PCT_SIN_DRENAJE, PCT_SIN_INTERNET, INDICE_CARENCIA) %>%
  print(n = Inf, width = Inf)
## # A tibble: 25 × 7
##    NOM_LOC                                   POBTOT VIVPAR_HAB PCT_SIN_AGUA
##    <chr>                                      <dbl>      <dbl>        <dbl>
##  1 Lagunita de Taberna                          208         43        79.1 
##  2 Cerros Blancos                               586        122        95.1 
##  3 San José de Medina (Rancho de Abajo)         14          3        66.7 
##  4 Jesús María del Terrero (El Lindero)        215         51        96.1 
##  5 Dolores                                      549        142        82.4 
##  6 El Gallito                                   206         54        85.2 
##  7 La Presita de Cerros Blancos (La Presita)    515        129        69.0 
##  8 El Refugio de Cerros Blancos                 531        129        55.8 
##  9 San Rafael de los Martínez                   657        155        91.6 
## 10 Las Palomas (Lajillas)                       865        199        57.8 
## 11 La Cardona                                   479        131        89.3 
## 12 Las Mesas de San Juan                        124         22         0   
## 13 San José de Cuatro Caminos                   84         26        96.2 
## 14 Mier y Noriega                              1180        332        95.8 
## 15 Tapona Moreña                               519        118         1.69
## 16 San Antonio de Alamitos                      412         92         9.78
## 17 San Isidro                                   414        101        15.8 
## 18 San Elías                                     30          7        14.3 
## 19 La Joya del Zacate                            45         12         0   
## 20 San Diego                                      4         NA        NA   
## 21 Falfurrias (San Carlos)                        1         NA        NA   
## 22 La Tortuga                                     1         NA        NA   
## 23 La Puerta de Guadalupe (Los Mireles)           4         NA        NA   
## 24 Tanque Roto                                    4         NA        NA   
## 25 Los García                                     5         NA        NA   
##    PCT_SIN_DRENAJE PCT_SIN_INTERNET INDICE_CARENCIA
##              <dbl>            <dbl>           <dbl>
##  1          100               100              279.
##  2           80.3              99.2            275.
##  3          100               100              267.
##  4           66.7              98.0            261.
##  5           78.9              97.9            259.
##  6           70.4             100              256.
##  7           86.8              99.2            255.
##  8           95.4              97.7            249.
##  9           52.3              96.1            240 
## 10           65.8              90.0            214.
## 11           11.4             100              201.
## 12          100               100              200 
## 13            0               100              196.
## 14           14.8              63.0            173.
## 15           55.1             100              157.
## 16           59.8              78.3            148.
## 17           33.7              96.0            146.
## 18           28.6             100              143.
## 19            8.33             91.7            100 
## 20           NA                NA               NA 
## 21           NA                NA               NA 
## 22           NA                NA               NA 
## 23           NA                NA               NA 
## 24           NA                NA               NA 
## 25           NA                NA               NA

PASO 11.- Resumen principal

En este paso, se realiza un resumen principal de la situación de vivienda y servicios en las localidades de Mier y Noriega. Se calcula el total de viviendas habitadas, el total de viviendas sin agua entubada, sin drenaje y sin internet, y se presenta un resumen claro y formateado utilizando la función cat para mostrar el total de viviendas habitadas y una tabla que detalla las carencias en términos de número de viviendas y porcentaje respecto al total. Esto permite identificar las principales carencias en servicios básicos en el municipio.

"PASO 11.- Resumen principal"
## [1] "PASO 11.- Resumen principal"
total_viv <- sum(vivienda_mier$VIVPAR_HAB, na.rm = TRUE)
total_sin_agua <- sum(vivienda_mier$SIN_AGUA, na.rm = TRUE)
total_sin_drenaje <- sum(vivienda_mier$SIN_DRENAJE, na.rm = TRUE)
total_sin_internet <- sum(vivienda_mier$SIN_INTERNET, na.rm = TRUE)

cat("Rotal de viviendas habitadas: ", format(total_viv, big.mark = ","), "\n\n")
## Rotal de viviendas habitadas:  1,868
cat("Carencia             | Viviendas |    %\n")
## Carencia             | Viviendas |    %
cat("---------------------|-----------|--------\n")
## ---------------------|-----------|--------
cat(sprintf("Sin agua entubada    | %9s | %5.1f%%\n",
            format(total_sin_agua *-1, big.mark = ","),
            (total_sin_agua / total_viv) * 100 * -1))
## Sin agua entubada    |     1,270 |  68.0%
cat(sprintf("Sin drenaje          | %9s | %5.1f%%\n",
            format(total_sin_drenaje, big.mark = ","),
            (total_sin_drenaje / total_viv) * 100))
## Sin drenaje          |     1,018 |  54.5%
cat(sprintf("Sin internet         | %9s | %5.1f%%\n",
            format(total_sin_internet, big.mark = ","),
            (total_sin_internet / total_viv) * 100))
## Sin internet         |     1,685 |  90.2%

PASO 12.- Zonas más vulnerables del municipio

En este paso, se identifican las zonas más vulnerables del municipio de Mier y Noriega en términos de carencias en servicios básicos. Se ordenan las localidades por el índice de carencia, que es la suma de los porcentajes de viviendas sin agua entubada, sin drenaje y sin internet. Luego, se muestra una tabla con las 5 localidades más vulnerables, incluyendo su nombre, población total y los porcentajes de carencia para cada servicio, así como el índice de carencia total. Esto permite identificar las áreas que requieren mayor atención y recursos para mejorar las condiciones de vida de sus habitantes.

"PASO 12.- Zonas más vulnerables del municipio"
## [1] "PASO 12.- Zonas más vulnerables del municipio"
cat("***TOP 5 Localidades más vulnerables ***\n\n")
## ***TOP 5 Localidades más vulnerables ***
cat("Ordenado por mayor índice de carencia (escala 0-300) \n\n")
## Ordenado por mayor índice de carencia (escala 0-300)
vivienda_mier %>%
  filter(!is.na(INDICE_CARENCIA)) %>%
  slice_head(n = 5) %>%
  select(NOM_LOC, POBTOT, PCT_SIN_AGUA, PCT_SIN_DRENAJE, PCT_SIN_INTERNET,
         INDICE_CARENCIA) %>%
  print(n = Inf, width = Inf)
## # A tibble: 5 × 6
##   NOM_LOC                               POBTOT PCT_SIN_AGUA PCT_SIN_DRENAJE
##   <chr>                                  <dbl>        <dbl>           <dbl>
## 1 Lagunita de Taberna                      208         79.1           100  
## 2 Cerros Blancos                           586         95.1            80.3
## 3 San José de Medina (Rancho de Abajo)     14         66.7           100  
## 4 Jesús María del Terrero (El Lindero)    215         96.1            66.7
## 5 Dolores                                  549         82.4            78.9
##   PCT_SIN_INTERNET INDICE_CARENCIA
##              <dbl>           <dbl>
## 1            100              279.
## 2             99.2            275.
## 3            100              267.
## 4             98.0            261.
## 5             97.9            259.

PASO 13.- Localidades con menor carencia en el municipio

Ahora se hace la acción opuesta con las localidades que tiene una menor carencia en servicios básicos. Se ordenan las localidades por el índice de carencia de menor a mayor y se muestra una tabla con las 5 localidades con menor índice de carencia, incluyendo su nombre, población total y los porcentajes de carencia para cada servicio, así como el índice de carencia total. Esto permite identificar las áreas del municipio que cuentan con mejores condiciones de vivienda y servicios básicos para sus habitantes.

"PASO 13.- Localidades con menor carencia en el municipio"
## [1] "PASO 13.- Localidades con menor carencia en el municipio"
cat("***TOP 5 Localidades con menor carencia***\n\n")
## ***TOP 5 Localidades con menor carencia***
vivienda_mier %>%
  filter(!is.na(INDICE_CARENCIA)) %>%
  slice_tail(n = 5) %>%
  select(NOM_LOC, POBTOT, PCT_SIN_AGUA, PCT_SIN_DRENAJE, PCT_SIN_INTERNET,
         INDICE_CARENCIA) %>%
  print(n = Inf, width = Inf)
## # A tibble: 5 × 6
##   NOM_LOC                 POBTOT PCT_SIN_AGUA PCT_SIN_DRENAJE PCT_SIN_INTERNET
##   <chr>                    <dbl>        <dbl>           <dbl>            <dbl>
## 1 Tapona Moreña             519         1.69           55.1             100  
## 2 San Antonio de Alamitos    412         9.78           59.8              78.3
## 3 San Isidro                 414        15.8            33.7              96.0
## 4 San Elías                   30        14.3            28.6             100  
## 5 La Joya del Zacate          45         0               8.33             91.7
##   INDICE_CARENCIA
##             <dbl>
## 1            157.
## 2            148.
## 3            146.
## 4            143.
## 5            100

PASO 14.- Creamos nuestra variable categórica

En este paso ahora creamos una variable categórica llamada “TIPO” para clasificar las localidades de Mier y Noriega en dos grupos: “Cabecera” para la localidad con código “0001”, que representa la cabecera municipal, y “Rural” para todas las demás localidades. Luego, se muestra la distribución de esta nueva variable para verificar que se haya creado correctamente y que las localidades estén clasificadas según lo esperado. Esto nos permitirá realizar comparaciones entre la cabecera municipal y las localidades rurales en los siguientes pasos del análisis. Por último, se verifica que solo haya una localidad designada para la cabecera, separando las demás como localidades rurales.

"PASO 14.- Creamos nuestra variable categórica"
## [1] "PASO 14.- Creamos nuestra variable categórica"
mier_comparativo <- iter %>%
  filter(NOM_MUN == "Mier y Noriega",
         !LOC %in% c("0000", "9998", "9999")) %>%
  mutate(
    TIPO = if_else(LOC == "0001", "Cabecera", "Rural")
  )

cat("Distribución:\n")
## Distribución:
print(table(mier_comparativo$TIPO))
## 
## Cabecera    Rural 
##        1       24
cat("\n")

PASO 15.- Calcular indicadores por localidad

En este paso, se calculan indicadores clave para cada localidad de Mier y Noriega, diferenciando entre la cabecera municipal y las localidades rurales. Se seleccionan variables relevantes para el análisis, como la población total, el número de viviendas habitadas, y los indicadores de educación y servicios básicos. Luego, se calculan nuevos indicadores como el porcentaje de analfabetismo y los porcentajes de viviendas sin agua entubada, sin drenaje, sin internet y sin electricidad. Estos indicadores permiten comparar las condiciones de vida entre la cabecera municipal y las localidades rurales, identificando posibles brechas de desigualdad en términos de educación y acceso a servicios básicos.

Estos nuevos indicadores se calcular utilizando la función mutate para crear nuevas columnas en el data frame, y se redondean a dos decimales para facilitar su interpretación. Finalmente, se crea un nuevo data frame llamado “mier_indicadores” que contiene estos indicadores clave para cada localidad, lo que nos permitirá realizar comparaciones y análisis más detallados en los siguientes pasos.

"PASO 15.- Calcular indicadores por localidad"
## [1] "PASO 15.- Calcular indicadores por localidad"
mier_indicadores <- mier_comparativo %>%
  select(LOC, NOM_LOC, TIPO, POBTOT, VIVPAR_HAB,
         # Educación
         P_15YMAS, P15YM_AN, GRAPROES,
         # Vivienda y servicios
         VPH_AGUADV, VPH_AEASP, VPH_AGUAFV,
         VPH_NODREN, VPH_INTER, VPH_C_ELEC, VPH_S_ELEC) %>%
  mutate(
    # Educación
    PCT_ANALFABETISMO  = round((P15YM_AN / P_15YMAS) * 100, 2),
    
    # Servicios (% de carencia)
    PCT_SIN_AGUA       = round(
      (VIVPAR_HAB - (VPH_AGUADV + VPH_AEASP + VPH_AGUAFV)) / VIVPAR_HAB * 100, 2),
    PCT_SIN_DRENAJE    = round((VPH_NODREN / VIVPAR_HAB) * 100, 2),
    PCT_SIN_INTERNET   = round((VIVPAR_HAB - VPH_INTER) / VIVPAR_HAB * 100, 2),
    PCT_SIN_ELECTRIC   = round((VPH_S_ELEC / VIVPAR_HAB) * 100, 2)
  )

PASO 16.- Tabla comparativa de medidas e indicadores

Ahora, realizamos una tabla comparativa de medidas e indicadores entre la cabecera municipal y las localidades rurales de Mier y Noriega. Se agrupan los datos por el tipo de localidad (Cabecera vs. Rural) y se calculan estadísticas resumidas para cada grupo, incluyendo el número de localidades, la población total, el promedio de analfabetismo, el grado promedio de escolaridad, y los porcentajes promedio de carencia en servicios básicos como agua entubada, drenaje, internet y electricidad. Luego, se muestra una tabla con estos indicadores comparativos para cada tipo de localidad, lo que permite identificar las diferencias entre la cabecera municipal y las localidades rurales en términos de educación y acceso a servicios básicos. Esta comparación es fundamental para entender las brechas de desigualdad que existen dentro del municipio y para orientar posibles intervenciones o políticas públicas que busquen mejorar las condiciones de vida en las zonas rurales.

"PASO 16.- Tabla comparativa de medidas e indicadores"
## [1] "PASO 16.- Tabla comparativa de medidas e indicadores"
comparativa <- mier_indicadores %>%
  filter(!is.na(PCT_ANALFABETISMO)) %>% 
  group_by(TIPO) %>%
  summarise(
    n_localidades     = n(),
    pob_total         = sum(POBTOT, na.rm = TRUE),
    media_analfab     = round(mean(PCT_ANALFABETISMO, na.rm = TRUE), 2),
    media_escolaridad = round(mean(GRAPROES, na.rm = TRUE), 2),
    media_sin_agua    = round(mean(PCT_SIN_AGUA, na.rm = TRUE), 2) *-1,
    media_sin_drenaje = round(mean(PCT_SIN_DRENAJE, na.rm = TRUE), 2),
    media_sin_internet = round(mean(PCT_SIN_INTERNET, na.rm = TRUE), 2),
    media_sin_electric = round(mean(PCT_SIN_ELECTRIC, na.rm = TRUE), 2),
    
    .groups = "drop"
  )

cat("=== COMPARATIVA: CABECERA VS. LOCALIDADES RURALES ===\n\n")
## === COMPARATIVA: CABECERA VS. LOCALIDADES RURALES ===
comparativa %>%
  pivot_longer(-TIPO, names_to = "Indicador", values_to = "Valor") %>%
  pivot_wider(names_from = TIPO, values_from = Valor) %>%
  print(n = Inf, width = Inf)
## # A tibble: 8 × 3
##   Indicador          Cabecera   Rural
##   <chr>                 <dbl>   <dbl>
## 1 n_localidades          1      18   
## 2 pob_total           1180    6453   
## 3 media_analfab          9.88   11.4 
## 4 media_escolaridad      7.27    6.31
## 5 media_sin_agua        95.8    55.9 
## 6 media_sin_drenaje     14.8    60.7 
## 7 media_sin_internet    63.0    96.9 
## 8 media_sin_electric     2.71    1.57

PASO 17.- Calculamos las brechas

En este paso, se calculan las brechas de desigualdad entre la cabecera municipal y las localidades rurales de Mier y Noriega para cada indicador clave. Se transforma la tabla comparativa para calcular la diferencia entre los valores de las localidades rurales y la cabecera municipal, redondeando a dos decimales. Luego, se interpreta cada brecha en función del tipo de indicador, indicando si las localidades rurales tienen mayores o menores carencias o niveles de escolaridad en comparación con la cabecera municipal. Finalmente, se muestra una tabla con los indicadores, los valores para la cabecera y las localidades rurales, las brechas calculadas y su interpretación correspondiente.

"PASO 17.- Calculamos las brechas"
## [1] "PASO 17.- Calculamos las brechas"
brecha <- comparativa %>%
  select(-n_localidades, -pob_total) %>%
  pivot_longer(-TIPO, names_to = "Indicador", values_to = "Valor") %>%
  pivot_wider(names_from = TIPO, values_from = Valor) %>%
  mutate(
    Brecha = round(Rural-Cabecera, 2),
    Interpretación = case_when(
      str_detect(Indicador, "escolaridad") & Brecha < 0 ~
        "Las localidades rurales tienen menor escolaridad",
      str_detect(Indicador, "escolaridad") & Brecha > 0 ~
        "La cabecera tiene mayor escolaridad",
      Brecha > 0 ~ "Las localidades rurales tienen mayores carencias",
      Brecha < 0 ~ "La localidades rurales tienen menores carencias",
      TRUE ~ "Sin diferencia"
    )
  )

cat("=== Brechas de desigualdad entre las localidades rurales y la cabecera del municipio ===\n\n")
## === Brechas de desigualdad entre las localidades rurales y la cabecera del municipio ===
brecha %>%
  print(n = Inf, width = Inf)
## # A tibble: 6 × 5
##   Indicador          Cabecera Rural Brecha
##   <chr>                 <dbl> <dbl>  <dbl>
## 1 media_analfab          9.88 11.4    1.5 
## 2 media_escolaridad      7.27  6.31  -0.96
## 3 media_sin_agua        95.8  55.9  -39.9 
## 4 media_sin_drenaje     14.8  60.7   46.0 
## 5 media_sin_internet    63.0  96.9   33.9 
## 6 media_sin_electric     2.71  1.57  -1.14
##   Interpretación                                  
##   <chr>                                           
## 1 Las localidades rurales tienen mayores carencias
## 2 Las localidades rurales tienen menor escolaridad
## 3 La localidades rurales tienen menores carencias 
## 4 Las localidades rurales tienen mayores carencias
## 5 Las localidades rurales tienen mayores carencias
## 6 La localidades rurales tienen menores carencias

PASO 18.- Detallamos por localidad rural

En este paso se detalla la situación de cada localidad rural de Mier y Noriega en términos de los indicadores clave, ordenando las localidades por el porcentaje de analfabetismo de mayor a menor. Se seleccionan las variables relevantes para cada localidad, como el nombre, la población total, el porcentaje de analfabetismo, el grado promedio de escolaridad y los porcentajes de carencia en servicios básicos. Luego, se muestra una tabla con estos detalles para cada localidad rural, lo que permite identificar las diferencias entre ellas y destacar aquellas que presentan mayores desafíos en términos de educación y acceso a servicios básicos. Es importante mencionar que muchas localidades rurales tienen datos protegidos por confidencialidad, lo que se refleja en la presencia de valores NA en algunos indicadores.

"PASO 18.- Detallamos por localidad rural"
## [1] "PASO 18.- Detallamos por localidad rural"
cat("=== Detalle por localidad rural ordenado por analfabetismo ===\n\n")
## === Detalle por localidad rural ordenado por analfabetismo ===
mier_indicadores %>%
  filter(TIPO == "Rural", is.na(PCT_ANALFABETISMO)) %>%
  select(NOM_LOC, POBTOT, PCT_ANALFABETISMO, GRAPROES, PCT_SIN_AGUA, PCT_SIN_DRENAJE,
         PCT_SIN_INTERNET) %>%
  arrange(desc(PCT_ANALFABETISMO)) %>%
  print(n = Inf, width = Inf)
## # A tibble: 6 × 7
##   NOM_LOC                              POBTOT PCT_ANALFABETISMO GRAPROES
##   <chr>                                 <dbl>             <dbl>    <dbl>
## 1 San Diego                                 4                NA       NA
## 2 Falfurrias (San Carlos)                   1                NA       NA
## 3 La Tortuga                                1                NA       NA
## 4 La Puerta de Guadalupe (Los Mireles)      4                NA       NA
## 5 Tanque Roto                               4                NA       NA
## 6 Los García                                5                NA       NA
##   PCT_SIN_AGUA PCT_SIN_DRENAJE PCT_SIN_INTERNET
##          <dbl>           <dbl>            <dbl>
## 1           NA              NA               NA
## 2           NA              NA               NA
## 3           NA              NA               NA
## 4           NA              NA               NA
## 5           NA              NA               NA
## 6           NA              NA               NA
#Salen varios NA's en los indicadores porque la mayoría de los datos de las localidades rurales están protegidos por confidencialidad, lo que indica que no se pueden divulgar debido a la baja población o a la sensibilidad de la información. Esto es común en localidades pequeñas para proteger la privacidad de los habitantes.

PASO 19.- Ponemos valores de referencia de la cabecera municipal

Por último, se presentan los valores de referencia de la cabecera municipal de Mier y Noriega para los indicadores clave, como la población total, el porcentaje de analfabetismo, el grado promedio de escolaridad y los porcentajes de carencia en servicios básicos. Estos valores sirven como punto de comparación para evaluar la situación de las localidades rurales y entender las brechas de desigualdad que existen dentro del municipio. Se utiliza la función cat para imprimir estos valores de manera clara y formateada, destacando la información relevante sobre la cabecera municipal.

"PASO 19.- Ponemos valores de referencia de la cabecera municipal"
## [1] "PASO 19.- Ponemos valores de referencia de la cabecera municipal"
cat("\n=== VALORES DE REFERENCIA: CABECERA MUNICIPAL ===\n")
## 
## === VALORES DE REFERENCIA: CABECERA MUNICIPAL ===
cab <- mier_indicadores %>% filter(TIPO == "Cabecera")

cat("Población:", cab$POBTOT, "\n")
## Población: 1180
cat("Analfabetismo:", cab$PCT_ANALFABETISMO, "%\n")
## Analfabetismo: 9.88 %
cat("Grado escolaridad:", cab$GRAPROES, "\n")
## Grado escolaridad: 7.27
cat("% Sin agua entubada:", cab$PCT_SIN_AGUA *-1, "%\n")
## % Sin agua entubada: 95.78 %
cat("% Sin drenaje:", cab$PCT_SIN_DRENAJE, "%\n")
## % Sin drenaje: 14.76 %
cat("% Sin internet:", cab$PCT_SIN_INTERNET, "%\n")
## % Sin internet: 62.95 %
cat("% Sin electricidad:", cab$PCT_SIN_ELECTRIC, "%\n")
## % Sin electricidad: 2.71 %

CONCLUSIONES GENERALES DEL ANÁLISIS DE DATOS DE MIER Y NORIEGA

1. Mier y Noriega cuenta con 7,652 habitantes distribuidos en 25 localidades. Sin embargo, la estructura territorial revela una alta dispersión poblacional:

La cabecera municipal concentra solo 1,180 personas (15.4% del municipio)

Las localidades rurales más grandes (Las Palomas con 865, San Rafael con 657, Cerros Blancos con 586) superan a la mitad de la cabecera

6 localidades tienen 5 habitantes o menos, tan pequeñas que el INEGI protege toda su información con asteriscos por confidencialidad

Esto significa que el 84.6% de la población vive fuera de la cabecera, dispersa en comunidades rurales de difícil acceso en la sierra.”

2.- El análisis del Paso 8 y 9 revela un panorama educativo crítico:

El grado promedio de escolaridad municipal es de 6.59 años — equivalente apenas a terminar la primaria. Esto es 4.15 años por debajo del promedio estatal de Nuevo León (~10.74)

La cabecera alcanza 7.27 años, mientras que localidades como La Cardona llegan solo a 5.30 y El Gallito a 5.44

El analfabetismo en la cabecera es de aproximadamente 9.88% (83 analfabetas de 840 personas de 15+), pero en localidades rurales como La Cardona sube a 23.84% (77 de 323) y La Presita a 20.45% (72 de 352)”

3.- Del análisis de vivienda (Pasos 10-13), el internet emerge como la brecha más extrema:

La cabecera tiene 335 viviendas y solo 123 con internet → 63.28% sin internet Localidades como El Gallito (54 viviendas, 0 con internet) y Lagunita de Taberna (43 viviendas, 0 con internet) tienen 100% de carencia digital Múltiples localidades rurales reportan 0 viviendas con internet, lo que evidencia una brecha digital total en la mayoría de las comunidades rurales. Esto limita severamente el acceso a información, educación y oportunidades económicas para la mayoría de los habitantes del municipio.”

4.- A diferencia del internet, el agua entubada y el drenaje muestran patrones distintos:

Agua entubada: La cabecera tiene buena cobertura (322 de 335 viviendas ≈ 96%), pero localidades como San Isidro reportan solo 25 de 99 viviendas con agua (≈25%), y Tapona Moreña 57 de 118 (≈48%)

Drenaje: El municipio reporta 1,023 viviendas sin drenaje de 1,881 totales (≈54.4%). Incluso la cabecera tiene 49 viviendas sin drenaje (≈14.6%), y en localidades como Tapona Moreña es 65 de 118 (≈55%)

Esto significa que a comparación el agua tiene mejor cobertura que el drenaje y el intenrnt, pero aún así hay localidades rurales con carencias significativas en ambos servicios básicos, lo que afecta la calidad de vida y la salud de los habitantes.”

CONCLUSIÓN Y DIAGNÓSTICO GENERAL:

A partir del análisis realizado con los datos del ITER del Censo de Población y Vivienda 2020, se concluye que el municipio de Mier y Noriega, con 7,652 habitantes distribuidos en 25 localidades, presenta un patrón de marginación multidimensional y estructural. Los indicadores procesados revelan tres hallazgos centrales. El primero, un rezago educativo severo, con un grado promedio de escolaridad de apenas 6.59 años a nivel municipal y tasas de analfabetismo que van del 9.88% en la cabecera hasta superar el 20% en localidades como La Cardona (23.84%) y La Presita de Cerros Blancos (20.45%); El segundo punto es una carencia crítica en servicios de vivienda, donde el índice de carencia construido a partir de tres variables las cuales fueron agua entubada, drenaje e internet, se identificó que la exclusión digital es la más grave, con localidades rurales que registran 0% de cobertura de internet y más de la mitad de las viviendas del municipio sin drenaje. El último punto es una brecha significativa entre la cabecera y las localidades rurales, demostrada a través de la variable categórica y la comparación de medias, donde el 84.6% de la población que habita fuera de la cabecera enfrenta sistemáticamente peores condiciones en todos los indicadores analizados, aunque la propia cabecera ya se encuentra por debajo de los estándares estatales de Nuevo León.”

Este análisis de datos confirma que el muncipio de Mier y Noriega concentra un ciclo de rezagos interconectados que requieren de atención urgente en conectividad, infraestructura básica y estrategias de educación para revertir el deterioro progresivo de las condiciones de vida de los habitantes del municipio.