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
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
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
#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.
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
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
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
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
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
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
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
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%
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.
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
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")
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)
)
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
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
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.
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 %
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.”
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)”
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.”
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.”
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.”