Introducción

Mier y Noriega es un municipio localizado en la zona sur del estado de Nuevo León. Aunque la entidad se distingue por su alto nivel de industrialización y desarrollo económico, este municipio presenta condiciones de marginación significativamente superiores si se comparan con las que predominan en la Zona Metropolitana de Monterrey.

El análisis se basa en la información del Censo de Población y Vivienda 2020 elaborado por el INEGI, particularmente en el archivo ITER (Indicadores de Resultados por Localidad). A partir de estos datos, se busca examinar con mayor detalle las condiciones sociales, educativas y habitacionales de sus distintas localidades, con el fin de identificar y visibilizar las desigualdades que persisten en el territorio.

  1. Preparación del entorno

Como primer paso, se instalaron y cargaron las bibliotecas necesarias para llevar a cabo el análisis de datos. Se utilizó tidyverse para la limpieza, transformación y visualización de la información; DT para la elaboración de tablas interactivas en formato HTML; knitr y kableExtra para la generación de tablas con un diseño más formal y profesional; y finalmente, scales, que permitió dar formato adecuado a cifras y porcentajes dentro de las representaciones gráficas.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── 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
library(DT)
library(knitr)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
  1. Descarga y Filtrado de Información 2.1 Descarga del Dataset

El primer paso consistió en obtener el archivo en formato CSV correspondiente al ITER del estado de Nuevo León. Una vez descargado, se importó al entorno de trabajo en RStudio para proceder con su revisión. Posteriormente, se verificó que la carga del archivo se hubiera realizado de manera correcta, comprobando su estructura y contenido inicial.

iter_nl <- read_csv("ITER_19CSV20.csv",
  # Usamos locale para manejar correctamente caracteres especiales (acentos, ñ)
  locale = locale(encoding = "UTF-8"),
  # Suprimimos los mensajes de tipo de columna para no saturar el reporte
  show_col_types = FALSE
)

# Verificamos que el archivo se cargó correctamente
cat("Dimensiones del dataset completo:", nrow(iter_nl), "filas y", ncol(iter_nl), "columnas\n")
## Dimensiones del dataset completo: 4974 filas y 286 columnas
cat("Municipios disponibles (muestra):", paste(unique(iter_nl$NOM_MUN)[1:5], collapse = ", "), "...\n")
## Municipios disponibles (muestra): Total de la entidad Nuevo León, Abasolo, Agualeguas, Los Aldamas, Allende ...

#2.2 Filtrado para Mier y Noriega Ahora filtramos para que solo nos aparezcan las filas que pertenezcan a Mier y Noriega

mier_raw <- iter_nl %>%
  filter(NOM_MUN == "Mier y Noriega")
head(mier_raw)
## # A tibble: 6 × 286
##   ENTIDAD NOM_ENT    MUN   NOM_MUN LOC   NOM_LOC LONGITUD LATITUD ALTITUD POBTOT
##     <dbl> <chr>      <chr> <chr>   <chr> <chr>   <chr>    <chr>   <chr>    <dbl>
## 1      19 Nuevo León 036   Mier y… 0000  Total …  <NA>     <NA>   <NA>      7652
## 2      19 Nuevo León 036   Mier y… 0001  Mier y… "100°07… "23°25… 1669      1180
## 3      19 Nuevo León 036   Mier y… 0003  La Car… "99°58'… "23°24… 1916       479
## 4      19 Nuevo León 036   Mier y… 0004  Cerros… "100°11… "23°20… 1336       586
## 5      19 Nuevo León 036   Mier y… 0005  Dolores "100°13… "23°30… 1532       549
## 6      19 Nuevo León 036   Mier y… 0007  El Gal… "100°02… "23°27… 1958       206
## # ℹ 276 more variables: POBFEM <chr>, POBMAS <chr>, P_0A2 <chr>, P_0A2_F <chr>,
## #   P_0A2_M <chr>, P_3YMAS <chr>, P_3YMAS_F <chr>, P_3YMAS_M <chr>,
## #   P_5YMAS <chr>, P_5YMAS_F <chr>, P_5YMAS_M <chr>, P_12YMAS <chr>,
## #   P_12YMAS_F <chr>, P_12YMAS_M <chr>, P_15YMAS <chr>, P_15YMAS_F <chr>,
## #   P_15YMAS_M <chr>, P_18YMAS <chr>, P_18YMAS_F <chr>, P_18YMAS_M <chr>,
## #   P_3A5 <chr>, P_3A5_F <chr>, P_3A5_M <chr>, P_6A11 <chr>, P_6A11_F <chr>,
## #   P_6A11_M <chr>, P_8A14 <chr>, P_8A14_F <chr>, P_8A14_M <chr>, …

¿Cuántas localidades tenemos?

cat("Registros totales del municipio (incluyendo especiales):", nrow(mier_raw), "\n")
## Registros totales del municipio (incluyendo especiales): 28

##3. Exploración y Limpieza de Datos

En el archivo ITER, * se emplea como mecanismo de confidencialidad estadística. Este recurso se utiliza cuando la información corresponde a localidades con muy poca población, donde la publicación del dato podría permitir la identificación de personas específicas.

Para el tratamiento de estos casos, se decidió reemplazar los asteriscos por valores NA, que en R representan datos no disponibles. Esta decisión es metodológicamente más adecuada que asignar un valor de cero, ya que un cero implicaría la inexistencia absoluta del fenómeno, lo cual sería incorrecto. En cambio, el uso de NA reconoce que el dato existe, pero no puede ser divulgado.

#3.1 Definir variables relevantes Se realizó una revisión del catálogo de variables del ITER con el fin de identificar aquellas más pertinentes para el análisis del municipio. A partir de esta exploración, se agruparon variables clave en distintas dimensiones temáticas: características de la localidad, dinámica demográfica, educación, población indígena, fecundidad, discapacidad, actividad económica, migración interestatal, salud, vivienda y acceso a servicios básicos.

Esta clasificación permitió estructurar el análisis de manera más ordenada y facilitar la interpretación de los resultados.

# Seleccionamos las variables necesarias para todos los ejes del análisis.
# Se eligió el conjunto mínimo suficiente para responder las preguntas planteadas,
# evitando incluir las más de 200 columnas del ITER que añadirían ruido innecesario.

variables_clave <- c(
  # Identificadores de localidad
  "LOC", "NOM_LOC",

  # Población general (eje demográfico)
  "POBTOT",       # Población total
  "POBFEM",       # Población femenina
  "POBMAS",       # Población masculina

  # Educación
  "P_15YMAS",     # Población de 15 años y más (denominador para % analfabetismo)
  "P_15YMAS_F",   # Ídem, mujeres
  "P_15YMAS_M",   # Ídem, hombres
  "P15YM_AN",     # Analfabetas de 15 años y más (total)
  "P15YM_AN_F",   # Analfabetas de 15 años y más (mujeres)
  "P15YM_AN_M",   # Analfabetas de 15 años y más (hombres)
  "GRAPROES",     # Grado promedio de escolaridad (total)
  "GRAPROES_F",   # Grado promedio de escolaridad (mujeres)
  "GRAPROES_M",   # Grado promedio de escolaridad (hombres)

  # Población indígena
  "P3YM_HLI",     # Personas de 3+ años que hablan lengua indígena
  "P3HLINHE",     # Hablantes de lengua indígena que NO hablan español

  # Discapacidad
  "PCON_DISC",    # Personas con alguna discapacidad

  # Actividad económica
  "PEA",          # Población Económicamente Activa
  "PEA_F",        # PEA femenina
  "PEA_M",        # PEA masculina
  "PE_INAC",      # Población No Económicamente Activa
  "PE_INAC_F",    # PE_INAC femenina
  "PE_INAC_M",    # PE_INAC masculina

  # Salud
  "PSINDER",      # Personas sin afiliación a servicios de salud
  "PDER_SS",      # Personas afiliada a servicios de salud

  # Migración interestatal
  "PNACOE",       # Personas nacidas en otra entidad federativa

  # Vivienda y servicios básicos
  "TVIVPARHAB",   # Total de viviendas particulares habitadas (denominador)
  "VPH_AGUAFV",   # Viviendas sin agua entubada dentro de la vivienda
  "VPH_NODREN",   # Viviendas sin drenaje
  "VPH_INTER"     # Viviendas con internet
)

#3.2 Tratamiento de Datos 1. Seleccionamos solo nuestras variables de interés 2. Convertimos TODO a character para poder reemplazar “*” y “N/D” por NA 3. Convertimos a numérico las columnas que lo requieren (todo menos NOM_LOC)

mier_clean <- mier_raw %>%
  select(all_of(variables_clave)) %>%
  mutate(across(everything(), ~na_if(as.character(.), "*"))) %>%
  mutate(across(everything(), ~na_if(., "N/D"))) %>%
  mutate(across(-NOM_LOC, ~as.numeric(.)))

# Revisamos cuántos valores NA quedaron por columna
cat("Valores NA por columna después de la limpieza:\n")
## Valores NA por columna después de la limpieza:
colSums(is.na(mier_clean)) %>%
  .[. > 0] %>%
  print()
##     POBFEM     POBMAS   P_15YMAS P_15YMAS_F P_15YMAS_M   P15YM_AN P15YM_AN_F 
##          6          6          6          6          6          6          6 
## P15YM_AN_M   GRAPROES GRAPROES_F GRAPROES_M   P3YM_HLI   P3HLINHE  PCON_DISC 
##          6          6          6          6          6          6          6 
##        PEA      PEA_F      PEA_M    PE_INAC  PE_INAC_F  PE_INAC_M    PSINDER 
##          6          6          6          6          6          6          6 
##    PDER_SS     PNACOE TVIVPARHAB VPH_AGUAFV VPH_NODREN  VPH_INTER 
##          6          6          6          6          6          6

¿Por qué el conteo arroja el valor 6 en todas estas variables? La explicación radica en que existen seis localidades que presentan el símbolo de confidencialidad (*) en la totalidad de sus variables registradas. Estas localidades son: San Diego, Falfurrias (San Carlos), La Tortuga, La Puerta de Guadalupe, Tanque Roto y Los García.

La razón de esta omisión sistemática es que se trata de asentamientos con una población extremadamente reducida (entre 1 y 5 habitantes). En estos casos, la publicación de datos específicos podría facilitar la identificación de personas, lo que contraviene los principios de confidencialidad estadística.

En conjunto, estas seis localidades concentran únicamente 19 personas dentro de un municipio que cuenta con 5,652 habitantes. Esto representa menos del 0.3% de la población total, por lo que la ausencia de estos registros no genera una distorsión significativa en los análisis posteriores.

  1. Análisis de la Estructura Poblacional y Demográfica 4.1 Resumen Poblacional del Municipio
# Extraemos los totales municipales ANTES de filtrar los registros especiales
# LOC = 0000 es el resumen oficial que el INEGI ya calculó para todo el municipio
total_mun <- mier_clean %>%
  filter(LOC == 0) %>%
  mutate(across(-NOM_LOC, ~as.numeric(na_if(as.character(.), "*"))))

cat("Población total del municipio:", total_mun$POBTOT, "\n")
## Población total del municipio: 7652
cat("Mujeres:", total_mun$POBFEM, "\n")
## Mujeres: 3857
cat("Hombres:", total_mun$POBMAS, "\n")
## Hombres: 3795

4.2 Filtramos localidades de Mier y Noriega Para entender cada una de las localidades que componen al municipio, tenemos que eliminar cuatro tipos de registros:

-LOC= 0000 → “Total del Municipio”: resumen agregado de todas las localidades. Si lo incluimos, duplicaríamos la población y distorsionaríamos cualquier cálculo de promedios o totales.

-LOC = 9998 → “Localidades de una vivienda”: el INEGI agrupa aquí todas las localidades con una sola vivienda por confidencialidad estadística. No representan una comunidad real con identidad propia.

-LOC = 9999 → “Localidades de dos viviendas”: mismo criterio que el anterior.

-Los municipios cuyas variables solo son NAs (San Diego, Falfurrias (San Carlos), La Tortuga, La Puerta de Guadalupe, Tanque Roto y Los García). Estimar sus particularidades es imposible, así que dejaremos de tomarlos en cuenta en el análisis.

mier_localidades <- mier_clean %>%
  filter(!LOC %in% c(0, 9998, 9999)) %>%
  filter(!NOM_LOC %in% c(
    "San Diego",
    "Falfurrias (San Carlos)",
    "La Tortuga",
    "La Puerta de Guadalupe (Los Mireles)",
    "Tanque Roto",
    "Los García"
  ))

cat("Localidades reales con datos propios:", nrow(mier_localidades), "\n")
## Localidades reales con datos propios: 19

4.3 Resumen Poblacional por Localidad Aquí se presenta la población total, población femenina y masculina de cada una de las localidades que estamos analizando.

print(mier_localidades %>%
  select(NOM_LOC, POBTOT, POBFEM, POBMAS))
## # A tibble: 19 × 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

4.4 Indicadores de educación (para cada localidad)

# Calculamos los indicadores educativos por localidad.
# % Analfabetismo = (Población analfabeta 15+ / Población total 15+) * 100
# GRAPROES ya viene calculado por el INEGI como promedio de años de escolaridad aprobados.

mier_educacion <- mier_localidades %>%
  mutate(
    pct_analfabetismo = round((P15YM_AN / P_15YMAS) * 100, 2)
  ) %>%
  select(NOM_LOC, POBTOT, P_15YMAS, P15YM_AN, pct_analfabetismo, GRAPROES) %>%
  arrange(desc(pct_analfabetismo))

datatable(
  mier_educacion %>%
    rename(
      "Localidad"               = NOM_LOC,
      "Pob. Total"              = POBTOT,
      "Pob. 15+ años"           = P_15YMAS,
      "Analfabetas 15+"         = P15YM_AN,
      "% Analfabetismo"         = pct_analfabetismo,
      "Grado Prom. Escolaridad" = GRAPROES
    ),
  caption  = "Rezago educativo por localidad — Mayor analfabetismo primero",
  options  = list(
    pageLength     = 10,
    scrollX        = TRUE,
    scrollY        = "300px",
    scrollCollapse = TRUE
  ),
  rownames = FALSE
) %>%
  formatStyle("% Analfabetismo",
    backgroundColor = styleInterval(c(20, 40), c("#d4edda", "#fff3cd", "#f8d7da"))
  ) %>%
  formatStyle("% Analfabetismo",
    fontWeight = styleInterval(20, c("normal", "bold"))
  )

En la tabla anterior se identifican las tres localidades con mayor nivel de rezago educativo, tomando como referencia el porcentaje de población analfabeta. Los valores más altos corresponden a La Cardona (23.84%), San Isidro (22.45%) y La Presita de Cerros Blancos (20.45%), lo que evidencia una concentración importante de este problema en determinadas zonas del municipio.

A partir de estos resultados surge una interrogante relevante para profundizar el análisis: ¿el analfabetismo afecta de la misma manera a hombres y mujeres, o existen brechas de género en su distribución? Explorar esta diferencia permitiría comprender si el rezago educativo presenta un componente estructural asociado al género y, en su caso, dimensionar su magnitud.

mier_clean %>%
  filter(LOC == 0) %>%
  mutate(
    pct_analf_f = round((P15YM_AN_F / P_15YMAS_F) * 100, 2),
    pct_analf_m = round((P15YM_AN_M / P_15YMAS_M) * 100, 2),
    brecha      = round(pct_analf_f - pct_analf_m, 2)
  ) %>%
  select(NOM_LOC, pct_analf_f, pct_analf_m, brecha) %>%
  rename(
    "Municipio"        = NOM_LOC,
    "% Analf. Mujeres" = pct_analf_f,
    "% Analf. Hombres" = pct_analf_m,
    "Brecha (M - H)"   = brecha
  ) %>%
  kable(caption = "Analfabetismo por sexo — Total del municipio") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Analfabetismo por sexo — Total del municipio
Municipio % Analf. Mujeres % Analf. Hombres Brecha (M - H)
Total del Municipio 11.33 11.93 -0.6

El análisis muestra que el porcentaje de analfabetismo es ligeramente mayor en hombres (11.93%) que en mujeres (11.33%). En un primer momento podría suponerse que las mujeres presentarían niveles más altos debido a factores estructurales asociados a desigualdades históricas; sin embargo, los datos no respaldan esa hipótesis, ya que la diferencia observada es mínima y no confirma una brecha significativa en perjuicio de ellas.

Con el objetivo de profundizar en el comportamiento de esta variable a nivel local, se procedió a filtrar la base de datos para identificar el porcentaje de analfabetismo por sexo específicamente en la localidad de Cerros Blancos. Esto permite analizar si el patrón municipal se replica en un contexto más focalizado o si existen variaciones relevantes a nivel territorial.

mier_localidades %>%
  filter(LOC == 4) %>%
  mutate(
    pct_analf_f = round((P15YM_AN_F / P_15YMAS_F) * 100, 2),
    pct_analf_m = round((P15YM_AN_M / P_15YMAS_M) * 100, 2),
    brecha      = round(pct_analf_f - pct_analf_m, 2)
  ) %>%
  select(NOM_LOC, pct_analf_f, pct_analf_m, brecha) %>%
  rename(
    "Municipio"        = NOM_LOC,
    "% Analf. Mujeres" = pct_analf_f,
    "% Analf. Hombres" = pct_analf_m,
    "Brecha (M - H)"   = brecha
  ) %>%
  kable(caption = "Analfabetismo por sexo — Total de la localidad de Cerros Blancos") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Analfabetismo por sexo — Total de la localidad de Cerros Blancos
Municipio % Analf. Mujeres % Analf. Hombres Brecha (M - H)
Cerros Blancos 8.65 10.99 -2.34

Observamos que en la localidad de Cerros Blancos, el porcentaje de mujeres con analfabetismo sigue siendo menor (8.65%) que el de los hombres (10.99%).

  1. Análisis de Vivienda y Servicios Se calcula el % de viviendas SIN cada servicio VPH_AGUAFV y VPH_NODREN ya miden directamente las viviendas SIN el servicio,por lo que no es necesario restar. Solo VPH_INTER requiere resta porque el ITER no tiene una variable directa de viviendas sin internet.TVIVPARHAB es el denominador: total de viviendas particulares habitadas.
# Calculamos el % de viviendas SIN cada servicio.
# VPH_AGUAFV y VPH_NODREN ya miden directamente las viviendas SIN el servicio,
# por lo que no es necesario restar. Solo VPH_INTER requiere resta porque
# el ITER no tiene una variable directa de viviendas sin internet.
# TVIVPARHAB es el denominador: total de viviendas particulares habitadas.

mier_vivienda <- mier_localidades %>%
  mutate(
    sin_agua     = round((VPH_AGUAFV / TVIVPARHAB) * 100, 2),
    sin_drenaje  = round((VPH_NODREN / TVIVPARHAB) * 100, 2),
    sin_internet = round(((TVIVPARHAB - VPH_INTER)  / TVIVPARHAB) * 100, 2),
    # Índice de Carencia: suma de los tres porcentajes.
    # Máximo teórico: 300 (sin ninguno de los tres servicios).
    indice_carencia = round(sin_agua + sin_drenaje + sin_internet, 1)
  ) %>%
  select(NOM_LOC, TVIVPARHAB, sin_agua, sin_drenaje, sin_internet, indice_carencia) %>%
  arrange(desc(indice_carencia))

datatable(
  mier_vivienda %>%
    rename(
      "Localidad"          = NOM_LOC,
      "Viv. Habitadas"     = TVIVPARHAB,
      "% Sin Agua"         = sin_agua,
      "% Sin Drenaje"      = sin_drenaje,
      "% Sin Internet"     = sin_internet,
      "Índice de Carencia" = indice_carencia
    ),
  caption  = "Carencias de servicios en vivienda — Mayor carencia primero",
  options  = list(pageLength = 10, scrollX = TRUE, scrollY = "300px", scrollCollapse = TRUE),
  rownames = FALSE
) %>%
  formatStyle("Índice de Carencia",
    backgroundColor = styleInterval(c(150, 250), c("#d4edda", "#fff3cd", "#f8d7da"))
  )

De acuerdo con el Índice de Carencias, cuya escala va de 0 a 300, las localidades que presentan los niveles más altos de rezago en el municipio de Mier y Noriega son Las Mesas de San Juan (300), San José de Medina (233) y Lagunita de Taberna (220). Estos valores reflejan condiciones acumuladas de vulnerabilidad en distintos ámbitos sociales y de infraestructura.

En el caso de Cerros Blancos, el índice alcanza 183.6 puntos, lo que también indica un nivel considerable de rezago. Resulta particularmente llamativo que únicamente el 4.1% de las viviendas carezca de acceso a agua, mientras que el 80% no dispone de drenaje. Esta diferencia sugiere que, aunque el acceso al agua presenta una cobertura relativamente amplia, el déficit en infraestructura sanitaria constituye una de las principales carencias en la localidad.

  1. Análisis Comparativo: Cabecera vs. Localidades Rurales Realizamos un análisis comparativo entre la cabecera municipal (LOC== 1) y las localidades rurales (>1) para evaluar si existen brechas significativas en cuanto a temas de servicios y educación.
# Creamos la variable categórica que distingue la cabecera del resto.
# LOC == 1 corresponde a la cabecera municipal (misma localidad que el municipio).

mier_localidades <- mier_localidades %>%
  mutate(
    tipo = if_else(LOC == 1, "Cabecera Municipal", "Localidad Rural")
  )

# Calculamos los indicadores necesarios para la comparación
mier_comparativo <- mier_localidades %>%
  mutate(
    pct_analfabetismo = round((P15YM_AN   / P_15YMAS)   * 100, 2),
    pct_sin_agua      = round((VPH_AGUAFV / TVIVPARHAB) * 100, 2),
    pct_sin_drenaje   = round((VPH_NODREN / TVIVPARHAB) * 100, 2),
    pct_sin_internet  = round(((TVIVPARHAB - VPH_INTER) / TVIVPARHAB) * 100, 2)
  ) %>%
  group_by(tipo) %>%
  summarise(
    `N° Localidades`    = n(),
    `% Analfabetismo`   = round(mean(pct_analfabetismo, na.rm = TRUE), 2),
    `Escolaridad Prom.` = round(mean(GRAPROES,          na.rm = TRUE), 2),
    `% Sin Agua`        = round(mean(pct_sin_agua,      na.rm = TRUE), 2),
    `% Sin Drenaje`     = round(mean(pct_sin_drenaje,   na.rm = TRUE), 2),
    `% Sin Internet`    = round(mean(pct_sin_internet,  na.rm = TRUE), 2)
  ) %>%
  rename(Tipo = tipo)

mier_comparativo %>%
  kable(caption = "Comparación de indicadores: Cabecera Municipal vs. Localidades Rurales") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = TRUE) %>%
  column_spec(1, bold = TRUE)
Comparación de indicadores: Cabecera Municipal vs. Localidades Rurales
Tipo N° Localidades % Analfabetismo Escolaridad Prom. % Sin Agua % Sin Drenaje % Sin Internet
Cabecera Municipal 1 9.88 7.27 3.88 14.63 63.28
Localidad Rural 18 11.38 6.31 33.32 60.72 96.89

Observamos que la cabecera municipal presenta un porcentaje de analfabetismo menor (9.88%) a comparación de las localidades rurales (11.38%). Asimismo, la cabecera tiene más años de escolaridad promedio (7.27) a comparación del resto de localidades (6.31).

En el tema de servicios, la cabecera también presenta mejores condiciones: solo el 3.88% de las viviendas no tienen agua mientas que el resto de localidades esta cifra alcanza un 33.32%. En la cabecera el porcentaje de hogares sin drenaje es del 14.63% mientras que en las localidades rurales alcanzan el 60.72%. Por último, en la cabecera el 63.28% de las viviendas no tienen internet, mientras que en el resto de localidades la cifra sube al 96.89%.

  1. Análisis de variables extra Con el fin de ampliar la comprensión sobre la realidad social del municipio, se incorporó el análisis de algunas variables adicionales que resultaron relevantes durante el proceso exploratorio. Estas variables permiten enriquecer la interpretación de los datos y ofrecer un panorama más integral del contexto municipal.

###6.1 En este apartado se examinó la cantidad de personas que hablan alguna lengua indígena dentro del municipio. Para ello, se elaboró una tabla que presenta las cinco localidades con mayor número de habitantes que reportan hablar una lengua indígena, lo que permite identificar la concentración territorial de esta característica demográfica.

mier_localidades %>%
  select(NOM_LOC, POBTOT, P3YM_HLI) %>%
  mutate(
    pct_hli = round((P3YM_HLI / POBTOT) * 100, 2)
  ) %>%
  arrange(desc(P3YM_HLI)) %>%
  head(5) %>%
  rename(
    "Localidad"           = NOM_LOC,
    "Pob. Total"          = POBTOT,
    "Hablan Lengua Ind."  = P3YM_HLI,
    "% Hablan Lengua Ind."= pct_hli
  ) %>%
  kable(caption = "Top 5 localidades con mayor población hablante de lengua indígena") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Top 5 localidades con mayor población hablante de lengua indígena
Localidad Pob. Total Hablan Lengua Ind. % Hablan Lengua Ind.
Mier y Noriega 1180 4 0.34
Dolores 549 1 0.18
La Cardona 479 0 0.00
Cerros Blancos 586 0 0.00
El Gallito 206 0 0.00

De acuerdo a los resultados obtenidos, solo hay 5 personas que hablan alguna lengua indígena en todo el municipio.

###6.2 Cantidad de personas con discapacidad en las localidades

# PCON_DISC = Personas con algún tipo de discapacidad reconocida.
# En zonas rurales marginadas la discapacidad tiende a estar subatendida
# por la ausencia de servicios de rehabilitación y atención especializada cercanos.
# Un porcentaje alto también puede reflejar envejecimiento poblacional acelerado.

mier_localidades %>%
  mutate(
    pct_disc = round((PCON_DISC / POBTOT) * 100, 2)
  ) %>%
  select(NOM_LOC, POBTOT, PCON_DISC, pct_disc) %>%
  filter(!is.na(PCON_DISC)) %>%
  arrange(desc(pct_disc)) %>%
  rename(
    "Localidad"         = NOM_LOC,
    "Pob. Total"        = POBTOT,
    "Con Discapacidad"  = PCON_DISC,
    "% Discapacidad"    = pct_disc
  ) %>%
  kable(caption = "Tabla 4. Población con discapacidad por localidad") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tabla 4. Población con discapacidad por localidad
Localidad Pob. Total Con Discapacidad % Discapacidad
San Elías 30 4 13.33
Dolores 549 56 10.20
La Presita de Cerros Blancos (La Presita) 515 50 9.71
Las Mesas de San Juan 124 11 8.87
El Refugio de Cerros Blancos 531 46 8.66
San Antonio de Alamitos 412 34 8.25
San Rafael de los Martínez 657 48 7.31
San Isidro 414 30 7.25
San José de Medina (Rancho de Abajo) 14 1 7.14
La Joya del Zacate 45 3 6.67
Jesús María del Terrero (El Lindero) 215 13 6.05
Las Palomas (Lajillas) 865 44 5.09
Mier y Noriega 1180 59 5.00
Lagunita de Taberna 208 9 4.33
Cerros Blancos 586 25 4.27
La Cardona 479 20 4.18
San José de Cuatro Caminos 84 3 3.57
El Gallito 206 5 2.43
Tapona Moreña 519 6 1.16

Las 3 localidades con mayor porcentaje de personas con discapacidad son: San Elías(13.33%), Dolores (10.2%) y La Presita de Cerros Blancos (9.71%). La localidad de Cerros Blancos solo presenta un 4.27% de población con alguna discapacidad.

###6.3 Cantidad de personas nacidas en otra entidad federativa

# PNACOE = Personas nacidas en otra entidad federativa.
# En Mier y Noriega, un número bajo de migrantes llegados de otros estados
# confirma que no existe actividad económica que atraiga población externa.
# Es un reflejo del aislamiento y la falta de dinamismo económico del municipio.

mier_localidades %>%
  mutate(
    pct_nacoe = round((PNACOE / POBTOT) * 100, 2)
  ) %>%
  select(NOM_LOC, POBTOT, PNACOE, pct_nacoe) %>%
  filter(!is.na(PNACOE)) %>%
  arrange(desc(pct_nacoe)) %>%
  rename(
    "Localidad"           = NOM_LOC,
    "Pob. Total"          = POBTOT,
    "Nacidos fuera de NL" = PNACOE,
    "% Nacidos fuera NL"  = pct_nacoe
  ) %>%
  kable(caption = "Tabla 5. Población nacida en otra entidad federativa") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tabla 5. Población nacida en otra entidad federativa
Localidad Pob. Total Nacidos fuera de NL % Nacidos fuera NL
La Joya del Zacate 45 11 24.44
San José de Medina (Rancho de Abajo) 14 2 14.29
Mier y Noriega 1180 140 11.86
La Cardona 479 36 7.52
La Presita de Cerros Blancos (La Presita) 515 31 6.02
El Gallito 206 12 5.83
El Refugio de Cerros Blancos 531 23 4.33
Jesús María del Terrero (El Lindero) 215 9 4.19
San Isidro 414 16 3.86
Dolores 549 21 3.83
Las Palomas (Lajillas) 865 33 3.82
San José de Cuatro Caminos 84 3 3.57
San Rafael de los Martínez 657 22 3.35
San Elías 30 1 3.33
Las Mesas de San Juan 124 3 2.42
Cerros Blancos 586 13 2.22
San Antonio de Alamitos 412 5 1.21
Lagunita de Taberna 208 2 0.96
Tapona Moreña 519 1 0.19

De acuerdo con los resultados: las 3 localidades que tienen mayor porcentaje de personas nacidas fueras del estado son: La Joya del Zacate (24.44%), Rancho de Abajo (14.29%) y Mier y Noriega (11.86%). La localidad de Cerros Blancos presenta un porcentaje de personas que nacieron fuera del estado del 2.22%.

###6.4 Cantidad de personas afiliadas a servicios de salud

# PSINDER = Personas sin ninguna afiliación a servicios de salud.
#           En 2020 esto significaba no tener IMSS, ISSSTE, Seguro Popular
#           ni ningún otro esquema. Son las personas más vulnerables ante
#           cualquier evento de salud.
# PDER_SS = Personas con algún tipo de derechohabiencia (complementario a PSINDER).
#
# El % sin servicios de salud es uno de los indicadores más directos de exclusión.

mier_salud <- mier_localidades %>%
  mutate(
    pct_sin_salud  = round((PSINDER / POBTOT) * 100, 2),
    pct_con_salud  = round((PDER_SS  / POBTOT) * 100, 2)
  ) %>%
  select(NOM_LOC, POBTOT, PSINDER, pct_sin_salud, PDER_SS, pct_con_salud) %>%
  filter(!is.na(PSINDER)) %>%
  arrange(desc(pct_sin_salud))

datatable(
  mier_salud %>%
    rename(
      "Localidad"         = NOM_LOC,
      "Pob. Total"        = POBTOT,
      "Sin Servicios"     = PSINDER,
      "% Sin Servicios"   = pct_sin_salud,
      "Con Servicios"     = PDER_SS,
      "% Con Servicios"   = pct_con_salud
    ),
  caption  = "Tabla 10. Acceso a servicios de salud por localidad",
  options  = list(pageLength = 10, scrollX = TRUE),
  rownames = FALSE
) %>%
  formatStyle("% Sin Servicios",
    backgroundColor = styleInterval(c(20, 40), c("#d4edda", "#fff3cd", "#f8d7da"))
  )

Las 3 localidades con mayor porcentaje de personas NO afiliadas a servicios de salud son: La Presita (25.24%), La Joya del Zacate (13.33%) y Dolores (12.93%)

##7. CONCLUSIÓN El análisis de los datos del Censo 2020 permitió identificar que Mier y Noriega enfrenta importantes retos en materia educativa y de acceso a servicios básicos. Aunque forma parte de un estado altamente desarrollado como Nuevo León, varias de sus localidades presentan altos niveles de rezago y carencias, especialmente en infraestructura como el drenaje y en indicadores como el analfabetismo.

Los resultados muestran que las desigualdades no solo existen a nivel estatal, sino también dentro del propio municipio, donde algunas localidades concentran mayores condiciones de vulnerabilidad. Esto evidencia la necesidad de diseñar políticas públicas más focalizadas que atiendan las necesidades específicas de cada comunidad.