Preparación del Entorno

# Librerias para el diagnostico del Municipio de Mier y Noriega, Nuevo León

library(readr)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)
library(tidyr)
library(ggplot2)
# Base de Datos 

setwd("C:/Users/miris/OneDrive/Documentos/analisisdedecisiones")
list.files()
## [1] "Diagnostico-Mier-y-Noriega.docx" "Diagnostico-Mier-y-Noriega.Rmd" 
## [3] "Diagnostico Mier y Noriega.Rmd"  "ITER_19CSV20.csv"
base <- read_csv("ITER_19CSV20.csv")
## Rows: 4974 Columns: 286
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (282): NOM_ENT, MUN, NOM_MUN, LOC, NOM_LOC, LONGITUD, LATITUD, ALTITUD, ...
## dbl   (4): ENTIDAD, POBTOT, VIVTOT, TVIVHAB
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Filtrar Base de Datos

Mier y Noriega es un municipio del estado de Nuevo León, México. Para realizar un diagnóstico específico de este municipio utilizando la base de datos del Censo de Población y Vivienda 2020, es necesario filtrar la base de datos para obtener únicamente los registros correspondientes de la zona.

base_mienor <- base[base$NOM_MUN == "Mier y Noriega", ]

Exploración y Limpieza de Datos

Antes de realizar cualquier análisis, es fundamental explorar las variables para asegurarnos de que sean precisas y necesarias para nuestro análisis.

Variables Seleccionadas

NOM_LOC → Nombre de la localidad

POBTOT → Población total

P15YM_AN → Población de 15 años y más analfabeta

POCUPADA → Población ocupada

VPH_AGUADV → Viviendas con agua entubada

VPH_DRENAJ → Viviendas con drenaje

VPH_INTER → Viviendas con acceso a internet

GRAPROES → Grado promedio de escolaridad

PCLIM_PMEN → Población con limitación o condición mental

PDER_SS → Población con derechohabiencia a servicios de salud

PCON_DISC → Población con discapacidad

#  Variables de Interés

vars_key <- c(
  "NOM_LOC",     # Nombre de localidad
  "POBTOT",      # Población total
  "P15YM_AN",    # Analfabetismo (15+)
  "POCUPADA",    # Ocupación (puede variar según versión)
  "VPH_AGUADV",  # Viviendas con agua entubada
  "VPH_DRENAJ",  # Viviendas con drenaje
  "VPH_INTER",   # Viviendas con internet
  "GRAPROES",    # Grado promedio de escolaridad
  "PCLIM_PMEN",  # Condición mental
  "PDER_SS",      # Derechohabiencia / seguridad social
  "PCON_DISC"    # Discapacidad
)
# Reemplazar "*" por NA
base_mienor[base_mienor == "*"] <- NA

# Conversión a numéricas
base_mienor$POBTOT     <- as.numeric(base_mienor$POBTOT)
base_mienor$P15YM_AN   <- as.numeric(base_mienor$P15YM_AN)
base_mienor$POCUPADA   <- as.numeric(base_mienor$POCUPADA)
base_mienor$VPH_AGUADV <- as.numeric(base_mienor$VPH_AGUADV)
base_mienor$VPH_DRENAJ <- as.numeric(base_mienor$VPH_DRENAJ)
base_mienor$VPH_INTER  <- as.numeric(base_mienor$VPH_INTER)
base_mienor$GRAPROES   <- as.numeric(base_mienor$GRAPROES)
base_mienor$PCLIM_PMEN <- as.numeric(base_mienor$PCLIM_PMEN)
base_mienor$PDER_SS   <- as.numeric(base_mienor$PDER_SS)
base_mienor$PCON_DISC  <- as.numeric(base_mienor$PCON_DISC)

Análisis de la Estructura Poblacional y Educativa

# 1) Las localidades 
mienor_loc <- base_mienor %>%
  filter(
    !NOM_LOC %in% c(
      "Total del Municipio",
      "Localidades de una vivienda",
      "Localidades de dos viviendas",
      "Mier y Noriega"
    )
  ) %>%
  filter(!is.na(NOM_LOC) & NOM_LOC != "")

# 2) Población total municipal (sumatoria por localidades)
resumen_municipal <- mienor_loc %>%
  summarise(poblacion_total = sum(POBTOT, na.rm = TRUE))

resumen_municipal$poblacion_total
## [1] 6472

Indicadores de Educación:

# Indicadores educativos por localidad 
mienor_loc_comp <- base_mienor %>%
  filter(
    !NOM_LOC %in% c(
      "Total del Municipio",
      "Localidades de una vivienda",
      "Localidades de dos viviendas"
    )
  ) %>%
  filter(!is.na(NOM_LOC) & NOM_LOC != "")

tabla_rezago_edu_comp <- mienor_loc_comp %>%
  transmute(
    NOM_LOC,
    analf_pct = ifelse(!is.na(POBTOT) & POBTOT > 0 & !is.na(P15YM_AN),
                       (P15YM_AN / POBTOT) * 100,
                       NA_real_),
    escolaridad_prom = GRAPROES
  ) %>%
  filter(!is.na(analf_pct) | !is.na(escolaridad_prom)) %>%
  mutate(
    analf_pct = round(analf_pct, 2),
    escolaridad_prom = round(escolaridad_prom, 2)
  )

# Ranking (mayor analfabetismo y menor escolaridad)
ranking_rezago <- tabla_rezago_edu_comp %>%
  arrange(desc(analf_pct), escolaridad_prom)

ranking_rezago

El municipio muestra diferencias claras entre localidades. La Cardona (16.08%) y San Isidro (15.94%) concentran los mayores niveles de analfabetismo y apenas superan los 5 años de escolaridad, lo que refleja un rezago educativo más profundo. En contraste, Mier y Noriega (7.03%) y San Elías (6.67%) presentan menores tasas y promedios escolares más altos,esto sugiere que, aunque el rezago no es homogéneo, persisten brechas internas dentro del municipio.

Análisis de Vivienda y Servicios

Cálculo de carencias: Determina el porcentaje de viviendas que no disponen de:

- Agua entubada.

- Drenaje.

- Internet.

# variables 
cols_serv <- c("TVIVPARHAB", "VPH_AGUADV", "VPH_DRENAJ", "VPH_INTER")
mienor_loc[cols_serv] <- lapply(mienor_loc[cols_serv], as.numeric)

# Cálculo de carencias por localidad
carencias_servicios <- mienor_loc %>%
  mutate(
    carencia_agua = ifelse(!is.na(TVIVPARHAB) & TVIVPARHAB > 0,
                           ((TVIVPARHAB - VPH_AGUADV) / TVIVPARHAB) * 100,
                           NA_real_),

    carencia_drenaje = ifelse(!is.na(TVIVPARHAB) & TVIVPARHAB > 0,
                              ((TVIVPARHAB - VPH_DRENAJ) / TVIVPARHAB) * 100,
                              NA_real_),

    carencia_internet = ifelse(!is.na(TVIVPARHAB) & TVIVPARHAB > 0,
                               ((TVIVPARHAB - VPH_INTER) / TVIVPARHAB) * 100,
                               NA_real_)
  ) %>%
  mutate(
    carencia_agua = round(carencia_agua, 1),
    carencia_drenaje = round(carencia_drenaje, 1),
    carencia_internet = round(carencia_internet, 1)
  ) %>%
  select(NOM_LOC, carencia_agua, carencia_drenaje, carencia_internet)

carencias_servicios

Medición Integral del Rezago en Vivienda y Servicios

Para obtener una visión más completa del rezago en servicios básicos, se puede calcular un índice de carencia que combine las tres dimensiones (agua, drenaje e internet). Este índice se puede definir como el promedio de las carencias individuales, proporcionando una medida compuesta que refleje el nivel general de rezago en servicios para cada localidad. Un valor más alto del índice indica una mayor proporción promedio de viviendas con carencias, lo que sugiere mayor vulnerabilidad en términos de condiciones habitacionales.

indice_carencia_servicios <- carencias_servicios %>%
  mutate(
    indice_carencia = ifelse(
      is.na(carencia_agua) | is.na(carencia_drenaje) | is.na(carencia_internet),
      NA_real_,
      (carencia_agua + carencia_drenaje + carencia_internet) / 3
    ),
    indice_carencia = round(indice_carencia, 1)
  ) %>%
  arrange(desc(indice_carencia)) %>%
  select(NOM_LOC, carencia_agua, carencia_drenaje, carencia_internet, indice_carencia)

indice_carencia_servicios

El índice de “Carencia de Servicios” se construyó a partir del promedio simple de los porcentajes de viviendas que no cuentan con agua entubada, drenaje e internet en cada localidad. A diferencia de un enfoque basado en puntos de corte, este indicador mantiene la información completa sobre la magnitud del rezago, permitiendo comparar no solo la presencia de carencias, sino su intensidad relativa. El resultado es un valor continuo que oscila entre 0 y 100, donde cifras más altas reflejan mayores limitaciones en infraestructura básica. Este método facilita identificar gradientes de vulnerabilidad.

Tasa de discapacidad

indice_discapacidad <- mienor_loc %>%
  mutate(
    tasa_discapacidad = ifelse(
      !is.na(POBTOT) & POBTOT > 0 & !is.na(PCON_DISC),
      (PCON_DISC / POBTOT) * 100,
      NA_real_
    ),
    tasa_discapacidad = round(tasa_discapacidad, 2)
  ) %>%
  select(NOM_LOC, tasa_discapacidad) %>%
  arrange(desc(tasa_discapacidad))

indice_discapacidad

Los resultados muestran diferencias importantes entre localidades. San Elías (13.33%) y Dolores (10.20%) presentan las tasas más altas de discapacidad, mientras que otras como La Joya del Zacate (6.67%) y San José de Medina (7.14%) registran porcentajes menores. Esto indica que la distribución de la discapacidad no es homogénea dentro del municipio, sino que se concentra más en ciertas comunidades. Estas diferencias pueden estar asociadas a diversos factores estructurales, como condiciones de acceso a servicios de salud, falta de atención medica, nivel socioeconómico o por antecedentes medicos familiares.

Vulnerabilidad por discapacidad

indice_discapacidad_comp <- mienor_loc %>%
  mutate(
    tasa_discapacidad = ifelse(
      !is.na(POBTOT) & POBTOT > 0 & !is.na(PCON_DISC),
      (PCON_DISC / POBTOT) * 100,
      NA_real_
    ),
    tasa_condicion_mental = ifelse(
      !is.na(POBTOT) & POBTOT > 0 & !is.na(PCLIM_PMEN),
      (PCLIM_PMEN / POBTOT) * 100,
      NA_real_
    ),
    indice_discapacidad = ifelse(
      is.na(tasa_discapacidad) | is.na(tasa_condicion_mental),
      NA_real_,
      (tasa_discapacidad + tasa_condicion_mental) / 2
    ),
    indice_discapacidad = round(indice_discapacidad, 2)
  ) %>%
  select(NOM_LOC, tasa_discapacidad, tasa_condicion_mental, indice_discapacidad) %>%
  arrange(desc(indice_discapacidad))

indice_discapacidad_comp

El índice de discapacidad muestra que la vulnerabilidad no se distribuye de manera uniforme dentro del municipio. San Elías encabeza la lista con un índice de 6.67, seguido por Dolores (5.56) y La Presita de Cerros Blancos (5.53), lo que indica una mayor concentración relativa de población con discapacidad en estas localidades. En contraste, comunidades como Jesús María del Terrero (3.49) y San José de Medina (3.57) presentan niveles más bajos. También se observa que en varias localidades la discapacidad general es más elevada que la condición mental. Esto sugiere que, aunque ambas dimensiones contribuyen a la vulnerabilidad, la discapacidad física o sensorial puede ser un factor más prevalente en ciertas áreas.

Análisis comparativo: Cabecera vs. Localidades Rurales

1) Unir educación (rezago) + servicios (índice de carencia)

# Análisis comparativo: Cabecera vs. Localidades Rurales


## Base "comparativa": incluye cabecera
mienor_loc_comp <- base_mienor %>%
  filter(
    !NOM_LOC %in% c(
      "Total del Municipio",
      "Localidades de una vivienda",
      "Localidades de dos viviendas"
    )
  ) %>%
  filter(!is.na(NOM_LOC) & NOM_LOC != "")

2) variable categórica: Cabecera vs Rural

# 1) Educación por localidad 
edu_loc <- mienor_loc_comp %>%
  transmute(
    NOM_LOC,
    analf_pct = ifelse(!is.na(POBTOT) & POBTOT > 0 & !is.na(P15YM_AN),
                       (P15YM_AN / POBTOT) * 100,
                       NA_real_),
    escolaridad_prom = GRAPROES
  )
# 2) Índice de carencia de servicios (
cols_serv <- c("TVIVPARHAB", "VPH_AGUADV", "VPH_DRENAJ", "VPH_INTER")
mienor_loc_comp[cols_serv] <- lapply(mienor_loc_comp[cols_serv], as.numeric)

carencias_servicios_comp <- mienor_loc_comp %>%
  mutate(
    carencia_agua = ifelse(!is.na(TVIVPARHAB) & TVIVPARHAB > 0,
                           ((TVIVPARHAB - VPH_AGUADV) / TVIVPARHAB) * 100,
                           NA_real_),
    carencia_drenaje = ifelse(!is.na(TVIVPARHAB) & TVIVPARHAB > 0,
                              ((TVIVPARHAB - VPH_DRENAJ) / TVIVPARHAB) * 100,
                              NA_real_),
    carencia_internet = ifelse(!is.na(TVIVPARHAB) & TVIVPARHAB > 0,
                               ((TVIVPARHAB - VPH_INTER) / TVIVPARHAB) * 100,
                               NA_real_)
  ) %>%
  mutate(
    carencia_agua = round(carencia_agua, 1),
    carencia_drenaje = round(carencia_drenaje, 1),
    carencia_internet = round(carencia_internet, 1)
  ) %>%
  select(NOM_LOC, carencia_agua, carencia_drenaje, carencia_internet)

indice_carencia_servicios_comp <- carencias_servicios_comp %>%
  mutate(
    indice_carencia = ifelse(
      is.na(carencia_agua) | is.na(carencia_drenaje) | is.na(carencia_internet),
      NA_real_,
      (carencia_agua + carencia_drenaje + carencia_internet) / 3
    ),
    indice_carencia = round(indice_carencia, 1)
  ) %>%
  select(NOM_LOC, indice_carencia)

3) Comparación de medias (educación + servicios)

base_comp <- mienor_loc_comp %>%
  select(NOM_LOC) %>%
  left_join(edu_loc, by = "NOM_LOC") %>%
  left_join(indice_carencia_servicios_comp, by = "NOM_LOC") %>%
  mutate(tipo_localidad = ifelse(NOM_LOC == "Mier y Noriega", "Cabecera", "Rural"))

comparacion_medias <- base_comp %>%
  group_by(tipo_localidad) %>%
  summarise(
    promedio_analfabetismo = mean(analf_pct, na.rm = TRUE),
    promedio_escolaridad   = mean(escolaridad_prom, na.rm = TRUE),
    promedio_indice_serv   = mean(indice_carencia, na.rm = TRUE),
    n_localidades          = n(),
    .groups = "drop"
  )

comparacion_medias

Los datos muestran una diferencia clara entre la cabecera y las localidades rurales. En promedio, las comunidades rurales presentan un nivel de analfabetismo ligeramente mayor (7.62% frente a 7.03%) y un menor grado promedio de escolaridad (6.31 años frente a 7.27). Sin embargo, la brecha más marcada se observa en el índice de carencias donde el promedio de servicios básicos en la cabecera registra un promedio de 27.3, las zonas rurales alcanzan 63.6. Esto indica que, aunque las diferencias educativas no son tan amplias, las condiciones de servicios básicos son considerablemente más limitadas en las localidades rurales.

Gráfica de Escolaridad Promedio

ggplot(tabla_rezago_edu_comp, 
       aes(x = reorder(NOM_LOC, escolaridad_prom), 
           y = escolaridad_prom)) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Grado Promedio de Escolaridad por Localidad",
    x = "Localidad",
    y = "Escolaridad Promedio (años)"
  ) +
  theme_minimal()

Gráfica rezago de Servicios

# TOP 10 por índice
top10 <- indice_carencia_servicios %>%
  filter(!is.na(indice_carencia)) %>%
  slice_max(indice_carencia, n = 10)

top10_long <- top10 %>%
  pivot_longer(
    cols = c(carencia_agua, carencia_drenaje, carencia_internet),
    names_to = "servicio",
    values_to = "pct"
  ) %>%
  mutate(
    servicio = recode(servicio,
                      carencia_agua = "Sin agua entubada",
                      carencia_drenaje = "Sin drenaje",
                      carencia_internet = "Sin internet"),
    NOM_LOC = reorder(NOM_LOC, indice_carencia)
  )

ggplot(top10_long, aes(x = pct, y = NOM_LOC, fill = servicio)) +
  geom_col(position = "dodge") +
  labs(
    title = "Top 10 localidades con mayor rezago en servicios",
    x = "Porcentaje de viviendas con carencia",
    y = "Localidad",
    fill = "Servicio"
  ) +
  theme_minimal()

indice_discapacidad_simple <- mienor_loc %>%
  mutate(
    tasa_discapacidad = ifelse(
      !is.na(POBTOT) & POBTOT > 0 & !is.na(PCON_DISC),
      (PCON_DISC / POBTOT) * 100,
      NA_real_
    ),
    tasa_discapacidad = round(tasa_discapacidad, 2)
  ) %>%
  select(NOM_LOC, tasa_discapacidad) %>%
  filter(!is.na(tasa_discapacidad)) %>%
  arrange(desc(tasa_discapacidad))

top_disc <- indice_discapacidad_simple %>%
  slice_max(order_by = tasa_discapacidad, n = 10)

ggplot(top_disc,
       aes(x = tasa_discapacidad,
           y = reorder(NOM_LOC, tasa_discapacidad),
           fill = tasa_discapacidad)) +
  geom_col() +
  scale_fill_gradient(low = "#6BAED6", high = "#CB181D") +
  labs(
    title = "Top 10 Localidades con Mayor Tasa de Discapacidad",
    x = "Tasa de discapacidad (%)",
    y = "Localidad",
    fill = "%"
  ) +
  theme_minimal()

# Cabecera vs Rural.

comparacion_medias_clean <- base_comp %>%
  group_by(tipo_localidad) %>%
  summarise(
    analfabetismo_pct = mean(analf_pct, na.rm = TRUE),
    escolaridad_anios = mean(escolaridad_prom, na.rm = TRUE),
    indice_carencias_pct = mean(indice_carencia, na.rm = TRUE),
    .groups = "drop"
  )

comparacion_long_clean <- comparacion_medias_clean %>%
  pivot_longer(
    cols = c(analfabetismo_pct, escolaridad_anios, indice_carencias_pct),
    names_to = "Indicador",
    values_to = "Media"
  ) %>%
  mutate(
    Indicador = factor(
      Indicador,
      levels = c("analfabetismo_pct", "escolaridad_anios", "indice_carencias_pct"),
      labels = c("Analfabetismo (%)", "Escolaridad (años)", "Carencias (promedio, %)")
    )
  )

ggplot(comparacion_long_clean,
       aes(x = tipo_localidad, y = Media, fill = tipo_localidad)) +
  geom_col() +
  facet_wrap(~ Indicador, scales = "free_y") +
  scale_fill_manual(values = c("Cabecera" = "#F8766D", "Rural" = "#00BFC4")) +
  labs(
    title = "Brechas en Educación y Servicios: Cabecera vs Rural",
    x = "",
    y = "Promedio",
    fill = "Zona"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

Las gráficas evidencian diferencias claras al interior del municipio. La cabecera municipal presenta un mayor grado promedio de escolaridad y menores niveles de carencias en servicios básicos, mientras que las localidades rurales concentran mayores rezagos, particularmente en acceso a internet y drenaje. Asimismo, algunas comunidades rurales registran tasas más elevadas de discapacidad, lo que puede incrementar su nivel de vulnerabilidad cuando se combina con limitaciones educativas y de infraestructura. Los resultados muestran que las brechas no son homogéneas, sino que se concentran principalmente en el ámbito rural, lo que sugiere la necesidad de intervenciones focalizadas en estas localidades.