Objetivo

El análisis espacial con el Índice de Calidad del Entorno (ICE) es una herramienta fundamental que permite comprender la distribución de la calidad del entorno en un territorio específico e identificar patrones geográficos de carencias y desigualdades. Este análisis facilita la visualización en mapas de la distribución del ICE, permitiendo identificar áreas con mayores necesidades y mejores condiciones. También ayuda a determinar zonas prioritarias para intervenciones de políticas públicas, analiza las relaciones entre diferentes factores del ICE (marginación, equipamiento, conectividad) y otras variables geográficas, permite comparar la calidad del entorno entre diferentes áreas geográficas, y facilita el monitoreo de cambios a lo largo del tiempo para evaluar el impacto de las políticas públicas implementadas.

Índice de Calidad del Entorno

El Índice de Calidad del Entorno (ICE), desarrollado por el Consejo Nacional de Población (CONAPO), es un indicador compuesto que busca medir las características de los asentamientos humanos en México, tomando en cuenta factores como la marginación, la disponibilidad de servicios y equipamiento urbano. Su objetivo principal es ofrecer información que sintetice los factores contextuales negativos que limitan la participación e inclusión de las personas, especialmente aquellas con discapacidad.

Dimensiones del ICE:

El ICE se estructura en tres dimensiones principales:

  1. Dimensión sociodemográfica: Esta dimensión se basa en indicadores socioeconómicos de los índices de marginación, como el porcentaje de población en pobreza, el nivel de educación, entre otros.
  2. Dimensión de equipamiento: Analiza la disponibilidad de equipamiento y servicios públicos y privados, como escuelas, hospitales, parques, etc.
  3. Dimensión de conectividad: Evalúa la calidad de la infraestructura de transporte y comunicaciones, así como el acceso a internet y otros servicios.

El ICE es una herramienta útil para:

  • Identificar áreas con mayores carencias: Permite identificar las zonas donde se concentran los factores que limitan la calidad del entorno, lo que puede ser útil para la toma de decisiones en políticas públicas.
  • Evaluar el impacto de políticas públicas: El ICE puede ser utilizado para evaluar el impacto de programas y políticas públicas en la calidad del entorno.
  • Promover la inclusión: Al visibilizar los factores que limitan la inclusión de las personas, el ICE puede contribuir a la promoción de políticas que mejoren la calidad de vida de todos los ciudadanos.

Limitaciones del ICE:

Es importante tener en cuenta que el ICE tiene algunas limitaciones:

  • Disponibilidad de información: La disponibilidad de información para calcular el ICE puede ser limitada en algunas zonas.
  • Complejidad del fenómeno: La calidad del entorno es un fenómeno complejo que no puede ser abarcado en su totalidad por un solo indicador.

Análisis espacial

Utilizando el análisis espacial del ICE es una herramienta poderosa para comprender cómo se distribuye la calidad del entorno en un territorio y para identificar áreas prioritarias para la intervención de políticas públicas. Al visualizar patrones y relaciones espaciales, este tipo de análisis puede contribuir a la toma de decisiones más informadas y a la promoción de un desarrollo más equitativo y sostenible.

Para realizar un análisis espacial con el ICE, se utilizan herramientas de Sistemas de Información Geográfica (SIG). Estas herramientas permiten:

  • Mapear los datos del ICE: Se crean mapas que muestran la distribución geográfica de los valores del ICE.
  • Analizar patrones espaciales: Se utilizan técnicas estadísticas y geoestadísticas para identificar patrones y tendencias en la distribución del ICE.
  • Relacionar el ICE con otras variables: Se combinan los datos del ICE con otras variables geográficas para analizar sus relaciones y comprender mejor los factores que influyen en la calidad del entorno.

Correlaciones espaciales

1. Moran’s I Bivariado (Bivariate Moran’s I)

El Moran’s I Bivariado (Bivariate Moran’s I) es una extensión del índice de Moran tradicional, que mide la autocorrelación espacial entre dos variables diferentes en una misma área geográfica. En otras palabras, evalúa si los valores altos (o bajos) de una variable en una ubicación están asociados con los valores altos (o bajos) de otra variable en ubicaciones vecinas.

Este método mide la correlación espacial entre dos variables en diferentes ubicaciones. Se calcula como:

\[ I_B = \frac{\sum_i \sum_j w_{ij} (X_i - \bar{X}) (Y_j - \bar{Y})}{S^2 \sum_i \sum_j w_{ij}} \]

donde:

  • \(X_i\) es la variable de pobreza en la unidad espacial \(i\).
  • \(Y_j\) es la variable de equipamiento en la unidad espacial \(j\).
  • \(w_{ij}\) es la matriz de pesos espaciales.
  • \(S^2\) es la varianza de \(X\).

Este índice mide la asociación entre \(X\) en una ubicación y \(Y\) en ubicaciones vecinas, utilizando la matriz de pesos espaciales.


Interpretación del Moran’s I Bivariado

  • \(I_B > 0\): Existe una relación positiva entre \(X\) e \(Y\), lo que indica que valores altos (bajos) de \(X\) están asociados con valores altos (bajos) de \(Y\) en áreas vecinas.
  • \(I_B < 0\): Existe una relación negativa, es decir, valores altos de \(X\) están asociados con valores bajos de \(Y\) en áreas vecinas y viceversa.
  • \(I_B \approx 0\): No hay una relación espacial significativa entre las dos variables.

2. LISA Bivariado (Bivariate Local Moran’s I)

El LISA Bivariado (Bivariate Local Moran’s I) es una extensión del Local Indicator of Spatial Association (LISA), que permite evaluar la correlación espacial entre dos variables en ubicaciones específicas dentro de una región. Su objetivo es identificar clústeres espaciales locales donde los valores de una variable están asociados con los valores de otra variable en ubicaciones vecinas.

Para cada ubicación \(i\), el LISA Bivariado se calcula como:

\[I_B(i) = (X_i - \bar{X}) \sum_j w_{ij} (Y_j - \bar{Y})\]

Donde:

  • \(X_i\) es el valor de la variable de interés en la ubicación \(i\).
  • \(Y_j\) es el valor de la segunda variable en la ubicación \(j\) (vecina de \(i\)).
  • \(\bar{X}\) y \(\bar{Y}\) son las medias de \(X\) e \(Y\), respectivamente.
  • \(w_{ij}\) es el peso espacial que indica la relación entre las ubicaciones \(i\) y \(j\), definido en una matriz de pesos espaciales.

Interpretación del LISA Bivariado

El resultado para cada punto \(i\) indica si existe una relación espacial significativa entre \(X_i\) y \(Y_j\) en su vecindario:

Patrón.espacial Interpretación
Alto-Alto (HH) Valores altos de X asociados con valores altos de Y en vecinos
Bajo-Bajo (LL) Valores bajos de X asociados con valores bajos de Y en vecinos
Alto-Bajo (HL) Valores altos de X asociados con valores bajos de Y en vecinos (Outlier espacial)
Bajo-Alto (LH) Valores bajos de X asociados con valores altos de Y en vecinos (Outlier espacial)

Los patrones HH y LL indican clústeres espaciales, mientras que HL y LH pueden indicar valores atípicos espaciales.

3. Getis-Ord Bivariado (Bivariate G)

El Índice Getis-Ord Bivariado (\(G^*\)), también conocido como Bivariate Getis-Ord \(G^*\), es una extensión del estadístico Getis-Ord \(G_i^*\) que permite analizar la asociación espacial entre dos variables distintas en una misma área geográfica.

Este índice identifica clústeres espaciales bivariados, es decir, lugares donde los valores altos (o bajos) de una variable están asociados con valores altos (o bajos) de otra variable en áreas vecinas.


La versión bivariada del Getis-Ord \(G^*\) se define como:

\[G_{XY}^*(i) = \frac{\sum_{j} w_{ij} X_j Y_j}{\sum_j X_j Y_j}\]

Donde:

  • \(X_j\) y \(Y_j\) son los valores de las variables \(X\) e \(Y\) en la ubicación \(j\).
  • \(w_{ij}\) es el peso espacial entre las ubicaciones \(i\) y \(j\), basado en la matriz de pesos espaciales.
  • \(\sum_{j} X_j Y_j\) es la suma total de los productos de \(X\) e \(Y\).

Estandarización Z-score

Para determinar la significancia de \(G^*_{XY}\), se utiliza la normalización:

\[ Z_{XY}^*(i) = \frac{G_{XY}^*(i) - E(G_{XY}^*)}{S(G_{XY}^*)}\]

Donde:

  • \(E(G_{XY}^*)\) es la esperanza matemática del índice.
  • \(S(G_{XY}^*)\) es la desviación estándar.

Un Z-score alto y positivo indica un clúster caliente (hot spot) donde valores altos de \(X\) están asociados con valores altos de \(Y\).
Un Z-score bajo y negativo indica un clúster frío (cold spot) con valores bajos de \(X\) asociados a valores bajos de \(Y\).

4. Geary’s C Bivariado

iEl Índice de Geary’s C Bivariado es una extensión del índice clásico de Geary’s C, pero aplicado a dos variables distintas para analizar la relación espacial entre ellas. Mientras que el Moran’s I Bivariado mide la autocorrelación espacial de manera global, el Geary’s C Bivariado se centra en las diferencias locales entre valores vecinos, por lo que es más sensible a patrones de discontinuidad espacial.

\[C_{XY} = \frac{\sum_{i} \sum_{j} w_{ij} (X_i - Y_j)^2}{2S_0 \sum_{i} (X_i - \bar{X})^2}\]

Donde:

  • \(X_i\) es el valor de la variable \(X\) en la ubicación \(i\).
  • \(Y_j\) es el valor de la variable \(Y\) en la ubicación vecina \(j\).
  • \(w_{ij}\) es el peso espacial que define la relación entre \(i\) y \(j\) en la matriz de pesos espaciales.
  • \(S_0 = \sum_{i} \sum_{j} w_{ij}\) es la suma total de los pesos espaciales.
  • \(\bar{X}\) es la media de \(X\).

El índice Geary’s C Bivariado mide la disimilitud espacial entre dos variables en ubicaciones vecinas.

Interpretación del Geary’s C Bivariado

Valor.de.C_.XY. Interpretación
CXY > 1 Dispersión espacial: Valores altos de X están asociados con valores bajos de Y en vecinos (patrón de discontinuidad).
CXY ≈ 1 Aleatoriedad espacial: No hay un patrón claro entre X e Y.
CXY < 1 Clustering espacial: Valores similares de X están cercanos a valores similares de Y en vecinos.

Shapefile

La función readOGR del paquete rgdal, extrae automáticamente la información utilizada por otros paquetes SIG de código abierto como QGIS y permite a R manejar una gama más amplia de formatos de datos espaciales. Esta función lee datos OGR y datos vectoriales, pero solamente permite manejar capas con características geométricas (no mezcla puntos, líneas o polígonos en una sola capa) y a su vez establecerá un sistema de referencia espacial si la capa tiene dichos metadatos.
Para leer un archivo shapefile, se establecen los siguientes argumentos, como dsn, en donde se indica el directorio que contiene los shapes y layer que es el nombre explícito de la capa a trabajar y dichas capas deben de ir sin la extensión .shp.

A continuación, se lee el archivo .shp que contiene de manera integrada la división de el área geoestadística municipal agem.

shape_estados <- readOGR(dsn ="D:/MGN/MGN 2020/MGN 2020/conjunto_de_datos", 
                             layer = "00ent",
                              encoding = "UTF-8",
                               use_iconv = TRUE)
shape_municipios <- readOGR(dsn ="D:/MGN/MGN 2020/MGN 2020/conjunto_de_datos", 
                             layer = "00mun",
                              encoding = "UTF-8",
                               use_iconv = TRUE)

La función rename() del paquete dplyr permite cambiar el nombre de la columna de la clave geoestadística a nivel estatal dentro de la base de datos del shape.

shape_municipios@data <- shape_municipios@data %>%
                          rename("CVE_GEO" = "CVEGEO")

Base de datos

La base de datos del índice de calidad del entorno por municipios se encuentra disponible en la página oficial de CONAPO o bien se puede consultar en la página de Datos Abiertos y se presenta en formato .xlsx Consulta.

data <- read_xlsx("Bases/Indice de calidad del entorno a nivel municipal.xlsx", sheet = "ICE_2020") %>%
          mutate(CVE_GEO = CVE_MUN) %>%
           as.data.frame()

SpatialPolygons

Se fusionan los datos del shape_municipios con datos estadísticos del índice de calidad del entorno a nivel municipal (IMM_2020), excluyendo las claves estatales y municipales (CVE_MUN) y asegurando que G_ICE se ordene de acuerdo a los grados de calidad del entorno, de igual manera los grados de marginación (GM_2020), equipamiento (G_IE) y accesibilidad (GACC). El resultado es layer_municipios, un objeto que contiene a los municipios junto con sus atributos actualizados, lo que facilita su análisis y visualización en mapas.

\[SpatialPolygons \Rightarrow SpatialPolygons + Datos\]

layer_municipios <- merge(shape_municipios,
                           data %>% dplyr::select(c(-CVE_MUN)) %>%
                                         mutate(G_ICE = fct_relevel(.$G_ICE,"Muy alto", "Alto", "Medio", "Bajo", "Muy bajo"),
                                                GM_2020 = fct_relevel(.$GM_2020, "Muy alto", "Alto", "Medio", "Bajo", "Muy bajo"),
                                                G_IE = fct_relevel(.$G_IE, "Muy alto", "Alto", "Medio", "Bajo", "Muy bajo"),
                                                GACC = fct_relevel(.$GACC, "Muy alto", "Alto", "Medio", "Bajo", "Muy bajo")),
                            by = "CVE_GEO")

Índice de Calidad del Entorno

# Paleta de colores 
require(RColorBrewer)
require(ggspatial)
require(ggpubr)

values = rev(brewer.pal(5, "RdPu"))
                          
p <- ggplot() + 
      layer_spatial(layer_municipios, aes(fill = G_ICE), color = "transparent") + 
       layer_spatial(shape_estados, fill = "transparent", color = "black") + 
        theme_bw() + 
         theme(plot.title = element_text(size = 22, hjust = 0.15, family = "Montserrat", face = "bold"),
               plot.caption = element_text(size = 11, hjust = 0.2, vjust = 1, family = "Montserrat"), 
               legend.key.size = unit(0.5, "cm"),
               legend.text = element_text(size = 12, family = "Montserrat"), 
               legend.title = element_text(size = 10, hjust = 0.5, family = "Montserrat", face = "bold"),
               legend.position = "right"
               ) + 
          scale_fill_manual(values = values) + 
           scale_color_manual(values = c("#BDBDBD")) + 
            #guides(color = guide_legend(override.aes = list(fill = usecol(pal = pal_petrol, n = 5)))) +
     labs(title = "Índice de Calidad del Entorno a nivel municipal, 2020",
           fill = stringr::str_wrap("ICE", 10), 
            caption = stringr::str_wrap(paste("Fuente: Estimaciones del CONAPO con base en el INEGI, Censo de Población y Vivienda 2020 y Directorio Estadístico Nacional de Unidades Económicas; SEP, Sistema de Información y Gestión Educativa; y SS, Catálogo de Clave Única de Establecimientos de Salud."), 100))
p
path = "Output/Mapa del ICE a nivel municipal.pdf"
ggexport(p, filename = path ,width = 10, height = 10, device = "cairo")

 

Centroides

La función coordinates() extrae las coordenadas de los centroides de los polígonos en \((x,y)\) de la base de datos espacial y la almacenamos en la variable coords, para su posterior uso en el código.

# Extrayendo coordenadas desde la base de datos espaciales.
coords = coordinates(layer_municipios)

Moran’s I Bivariado (Bivariate Moran’s I)

El objetivo general del Índice de Moran Bivariado Global es evaluar la correlación espacial entre dos variables en una región geográfica, considerando la relación entre los valores de una variable en una unidad espacial y los valores de otra variable en las unidades vecinas. En este caso, examina cómo la variable ICE en un municipio está correlacionada con la variable IM_2020 (índice de marginación), IE (índice de equipamiento) e IAL (índice de accesibilidad), en sus municipios vecinos.

  • X_nb_queen almacena la lista de vecinos generada por poly2nb() usando la regla de la reina, con el parámetro queen = TRUE.
  • Es un objeto de clase nb (neighborhood), que es una estructura que se utiliza para representar relaciones espaciales en análisis de datos espaciales.
# Construyendo lista de vecinos con criterio tipo reina
X_nb_queen = poly2nb(layer_municipios, queen = TRUE)  
summary(X_nb_queen)
## Neighbour list object:
## Number of regions: 2469 
## Number of nonzero links: 14428 
## Percentage nonzero weights: 0.2366813 
## Average number of links: 5.843661 
## Link number distribution:
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  19  20  22 
##   8  68 204 392 514 476 323 232 140  50  26  15   5   4   4   2   1   1   1   3 
## 8 least connected regions:
## 20 186 258 986 1037 1171 1361 1922 with 1 link
## 3 most connected regions:
## 1075 1141 1288 with 22 links
  • La mayoría de los municipios tienen entre 3 y 8 vecinos, con un promedio de ~5.8 vecinos.
  • Algunos municipios son casi aislados (solo 1 vecino), mientras que otros tienen hasta 22 vecinos.
  • Los municipios más conectados probablemente están en zonas urbanas densas, mientras que los menos conectados podrían estar en fronteras, islas o regiones rurales.
  • La red espacial tiene una conectividad moderada (23.67% de conexiones posibles están activas), lo que sugiere que el mapa tiene una distribución geográfica variada.

Pesos espaciales

Se convierte la lista de vecinos X_nb_queen (creada previamente con poly2nb()) en una matriz de pesos espaciales, que se usará en cálculos como el índice de Moran, Geary o otros modelos espaciales.

weights <- nb2listw(X_nb_queen, style="W", zero.policy = TRUE)  # Se crea matriz de pesos

Se calcula el Índice de Moran Bivariado Global utilizando la función global_moran_bv() de la librería sfdep en R.

  • nb = weights[["neighbours"]]: Proporciona la estructura de vecindad espacial, es decir, qué municipios son vecinos entre sí.
  • wt = weights[["weights"]]: Proporciona los pesos espaciales asociados a la estructura de vecindad.

Índice de Marginación

library(sfdep)

# Calculo de  Moran's I Bivariado
bivariate_moran <- sfdep::global_moran_bv(x = layer_municipios$ICE, 
                                          y = layer_municipios$IM_2020,
                                          nb = weights[["neighbours"]],
                                          wt = weights[["weights"]]
                                          )
summary(bivariate_moran)
##    R original bootBias   bootSE    bootMed
## 1 99  0.43114 -0.43306 0.010767 -0.0015708
  • El valor de Moran Bivariado (0.43114) sugiere una autocorrelación espacial positiva entre ICE e IM_2020: municipios con Alta calidad del entorno están rodeados de municipios con Bajo índice de marginación, y lo mismo ocurre para valores bajos.
  • El bootBias negativo sugiere que este valor puede estar sobreestimado, aunque sigue siendo significativo.
  • El bajo error estándar (0.010527) indica que la estimación es confiable.

Índice de Equipamiento

# Calculo de  Moran's I Bivariado
bivariate_moran <- sfdep::global_moran_bv(x = layer_municipios$ICE, 
                                          y = layer_municipios$IE,
                                          nb = weights[["neighbours"]],
                                          wt = weights[["weights"]]
                                          
                                          )
summary(bivariate_moran)
##    R original bootBias   bootSE    bootMed
## 1 99  0.22569 -0.22526 0.011402 0.00025403

Índice de Accesibilidad

# Calculo de  Moran's I Bivariado
bivariate_moran <- sfdep::global_moran_bv(x = layer_municipios$ICE, 
                                          y = layer_municipios$IAL,
                                          nb = weights[["neighbours"]],
                                          wt = weights[["weights"]]
                                          
                                          )
summary(bivariate_moran)
##    R original bootBias   bootSE     bootMed
## 1 99 -0.43097  0.43161 0.010493 -0.00026504

LISA Bivariado (Bivariate Local Moran’s I)

El objetivo del Índice de Moran Bivariado Local (Bivariate Local Moran’s I) es identificar y mapear relaciones espaciales locales entre dos variables en una región geográfica, evaluando si existe una correlación significativa en áreas específicas y detectando clusters espaciales.

  • A diferencia del Índice de Moran Bivariado Global, que mide la relación espacial en toda la región de estudio, el Bivariate Local Moran’s I permite detectar zonas específicas donde esta relación es significativa.

Se categorizan las posibles combinaciones de las relaciones del Índice de Calidad del Entorno con los otros 3 indicadores:

  1. Índice de marginación

  2. Índice de equipamiento

  3. Índice de accesibilidad

Índice de Marginación

library(sfdep)

# Calculo de  Local Bivariate Moran's I 
bivariate_LISA <- sfdep::local_moran_bv(x = layer_municipios$ICE, 
                                        y = layer_municipios$IM_2020,
                                        nb = weights[["neighbours"]],
                                        wt = weights[["weights"]]
                                        )
library(sf)
library(sfdep)# Para Moran Bivariado    # Para mapas
library(dplyr)

# Se agregan los valores de LISA a la capa espacial
capa_municipios <- layer_municipios %>%
                     mutate(lisa_I = bivariate_LISA$Ib,  # Índice de Moran local
                            p_value = bivariate_LISA$p_sim  # p-valor de la permutación
                      ) %>%
                      mutate(cluster = case_when( # Se define categorías de clusters espaciales
                                                 lisa_I > 0 & p_value < 0.05 ~ "Cluster Alto-Alto (HH)",
                                                 lisa_I < 0 & p_value < 0.05 ~ "Cluster Bajo-Bajo (LL)",
                                                 lisa_I > 0 & p_value >= 0.05 ~ "No Significativo",
                                                 lisa_I < 0 & p_value >= 0.05 ~ "No Significativo",
                                                 TRUE ~ "No Significativo"
                                              )) %>% 
                        mutate(cluster = factor(.$cluster, 
                                                 levels = c("Cluster Alto-Alto (HH)", "Cluster Bajo-Bajo (LL)", "Cluster Alto-Bajo (HH)", "Cluster Bajo-Alto (HH)", "No Significativo")))

# Se guardan los resultados en la base de datos
data <- data %>% 
         mutate(LISA_IM = capa_municipios@data$lisa_I,
                p.value_IM = capa_municipios@data$p_value,
                cluster_IM = capa_municipios@data$cluster)
p <-  ggplot() +
       layer_spatial(capa_municipios, aes(fill = cluster), color = "transparent") + 
        layer_spatial(shape_estados, fill = "transparent", color = "black") + 
         scale_fill_manual(values = c("#086953", "#c3c3c3", "white")) +
          theme_bw() + 
           theme(plot.title = element_text(size = 14, vjust = 0.5, hjust = 0, family = "Montserrat", face = "bold"),
                 plot.subtitle = element_text(size = 12, vjust = 0, hjust = 0, family = "Montserrat"),
                 plot.caption = element_text(size = 9, hjust = 0.2, vjust = 1, family = "Montserrat"), 
                 legend.key.size = unit(0.5, "cm"),
                 legend.text = element_text(size = 9, family = "Montserrat"), 
                 legend.title = element_text(size = 10, hjust = 0.5, family = "Montserrat", face = "bold"),
                 legend.position = "right"
                   ) + 
            labs(title = "LISA: Local Moran's I", 
                 subtitle = paste("Índice de Calidad del entorno, \n Índice de marginación a nivel municipal"),
                 fill = "LISA Cluster",
                 caption = stringr::str_wrap(paste("Fuente: Estimaciones del CONAPO con base en el INEGI, Censo de Población y Vivienda 2020 y Directorio Estadístico Nacional de Unidades Económicas; SEP, Sistema de Información y Gestión Educativa; y SS, Catálogo de Clave Única de Establecimientos de Salud."), 100))

p

#path = "Output/Mapa LISA Cluster_IM.pdf"
#ggexport(p, filename = path ,width = 10, height = 10, device = "cairo")
LISA: Local Moran's I (Clusters)
Índice de Calidad del entorno, Índice de marginación a nivel municipal
Cluster Municipios
Cluster Alto-Alto (HH) 942
Cluster Bajo-Bajo (LL) 106
No Significativo 1421

Índice de Equipamiento

# Calculo de  Local Bivariate Moran's I 
bivariate_LISA <- sfdep::local_moran_bv(x = layer_municipios$ICE, 
                                        y = layer_municipios$IE,
                                        nb = weights[["neighbours"]],
                                        wt = weights[["weights"]]
                                        )

# Se agregan los valores de LISA a la capa espacial
capa_municipios <- layer_municipios %>%
                     mutate(lisa_I = bivariate_LISA$Ib,  # Índice de Moran local
                            p_value = bivariate_LISA$p_sim  # p-valor de la permutación
                      ) %>%
                      mutate(cluster = case_when( # Se define categorías de clusters espaciales
                                                 lisa_I > 0 & p_value < 0.05 ~ "Cluster Alto-Alto (HH)",
                                                 lisa_I < 0 & p_value < 0.05 ~ "Cluster Bajo-Bajo (LL)",
                                                 lisa_I > 0 & p_value >= 0.05 ~ "No Significativo",
                                                 lisa_I < 0 & p_value >= 0.05 ~ "No Significativo",
                                                 TRUE ~ "No Significativo"
                                              )) %>% 
                        mutate(cluster = factor(.$cluster, 
                                                 levels = c("Cluster Alto-Alto (HH)", "Cluster Bajo-Bajo (LL)", "Cluster Alto-Bajo (HH)", "Cluster Bajo-Alto (HH)", "No Significativo")))


# Se guardan los resultados en la base de datos
data <- data %>% 
         mutate(LISA_IE = capa_municipios@data$lisa_I,
                p.value_IE = capa_municipios@data$p_value,
                cluster_IE = capa_municipios@data$cluster)

p <-  ggplot() +
       layer_spatial(capa_municipios, aes(fill = cluster), color = "transparent") + 
        layer_spatial(shape_estados, fill = "transparent", color = "black") + 
         scale_fill_manual(values = c("#08519C", "#c3c3c3", "white")) +
          theme_bw() + 
           theme(plot.title = element_text(size = 14, vjust = 0.5, hjust = 0, family = "Montserrat", face = "bold"),
                 plot.subtitle = element_text(size = 12, vjust = 0, hjust = 0, family = "Montserrat"),
                 plot.caption = element_text(size = 9, hjust = 0.2, vjust = 1, family = "Montserrat"), 
                 legend.key.size = unit(0.5, "cm"),
                 legend.text = element_text(size = 9, family = "Montserrat"), 
                 legend.title = element_text(size = 10, hjust = 0.5, family = "Montserrat", face = "bold"),
                 legend.position = "right"
                   ) + 
            labs(title = "LISA: Local Moran's I", 
                 subtitle = paste("Índice de Calidad del entorno, \n Índice de equipamiento a nivel municipal"),
                 fill = "LISA Cluster",
                 caption = stringr::str_wrap(paste("Fuente: Estimaciones del CONAPO con base en el INEGI, Censo de Población y Vivienda 2020 y Directorio Estadístico Nacional de Unidades Económicas; SEP, Sistema de Información y Gestión Educativa; y SS, Catálogo de Clave Única de Establecimientos de Salud."), 100))

p

#path = "Output/Mapa LISA Cluster_IE.pdf"
#ggexport(p, filename = path ,width = 10, height = 10, device = "cairo")
LISA: Local Moran's I (Clusters)
Índice de Calidad del entorno, Índice de equipamiento a nivel municipal
Cluster Municipios
Cluster Alto-Alto (HH) 515
Cluster Bajo-Bajo (LL) 60
No Significativo 1894

Índice de Accesibilidad

# Calculo de  Local Bivariate Moran's I 
bivariate_LISA <- sfdep::local_moran_bv(x = layer_municipios$ICE, 
                                        y = layer_municipios$IAL,
                                        nb = weights[["neighbours"]],
                                        wt = weights[["weights"]]
                                        )

# Se agregan los valores de LISA a la capa espacial
capa_municipios <- layer_municipios %>%
                     mutate(lisa_I = bivariate_LISA$Ib,  # Índice de Moran local
                            p_value = bivariate_LISA$p_sim  # p-valor de la permutación
                      ) %>%
                      mutate(cluster = case_when( # Se define categorías de clusters espaciales
                                                 lisa_I > 0 & p_value < 0.05 ~ "Cluster Alto-Alto (HH)",
                                                 lisa_I < 0 & p_value < 0.05 ~ "Cluster Bajo-Bajo (LL)",
                                                 lisa_I > 0 & p_value >= 0.05 ~ "No Significativo",
                                                 lisa_I < 0 & p_value >= 0.05 ~ "No Significativo",
                                                 TRUE ~ "No Significativo"
                                              )) %>% 
                        mutate(cluster = factor(.$cluster, 
                                                 levels = c("Cluster Alto-Alto (HH)", "Cluster Bajo-Bajo (LL)", "Cluster Alto-Bajo (HH)", "Cluster Bajo-Alto (HH)", "No Significativo")))

# Se guardan los resultados en la base de datos
data <- data %>% 
         mutate(LISA_IAL = capa_municipios@data$lisa_I,
                p.value_IAL = capa_municipios@data$p_value,
                cluster_IAL = capa_municipios@data$cluster) 

p <-  ggplot() +
       layer_spatial(capa_municipios, aes(fill = cluster), color = "transparent") + 
        layer_spatial(shape_estados, fill = "transparent", color = "black") + 
         scale_fill_manual(values = c("#2A186C", "#c3c3c3", "white")) +
          theme_bw() + 
           theme(plot.title = element_text(size = 14, vjust = 0.5, hjust = 0, family = "Montserrat", face = "bold"),
                 plot.subtitle = element_text(size = 12, vjust = 0, hjust = 0, family = "Montserrat"),
                 plot.caption = element_text(size = 9, hjust = 0.2, vjust = 1, family = "Montserrat"), 
                 legend.key.size = unit(0.5, "cm"),
                 legend.text = element_text(size = 9, family = "Montserrat"), 
                 legend.title = element_text(size = 10, hjust = 0.5, family = "Montserrat", face = "bold"),
                 legend.position = "right"
                   ) + 
            labs(title = "LISA: Local Moran's I", 
                 subtitle = paste("Índice de Calidad del entorno, \n Índice de Accesibilidad a nivel municipal"),
                 fill = "LISA Cluster",
                 caption = stringr::str_wrap(paste("Fuente: Estimaciones del CONAPO con base en el INEGI, Censo de Población y Vivienda 2020 y Directorio Estadístico Nacional de Unidades Económicas; SEP, Sistema de Información y Gestión Educativa; y SS, Catálogo de Clave Única de Establecimientos de Salud."), 100))

p

#path = "Output/Mapa LISA Cluster_IAL.pdf"
#ggexport(p, filename = path ,width = 10, height = 10, device = "cairo")
LISA: Local Moran's I (Clusters)
Índice de Calidad del entorno, Índice de Accesibilidad a nivel municipal
Cluster Municipios
Cluster Alto-Alto (HH) 109
Cluster Bajo-Bajo (LL) 999
No Significativo 1361

Se guardan los resultados en el data.frame que contiene los indicadores sociodemográficos y los resultados de LISA.

require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "clusters")
writeData(wb, 1, data, colNames = TRUE)
saveWorkbook(wb, 
              file = paste0("Output/clusters_municipal.xlsx"), 
               overwrite = TRUE)

Bivariate Geary’s \(C_{xy}\)

El Índice de Geary Bivariado (Bivariate Geary’s C) tiene como objetivo evaluar la relación espacial entre dos variables en una región geográfica, pero enfatizando la similitud en valores entre áreas vecinas en lugar de la correlación global.

A diferencia del Índice de Moran Bivariado, que mide la autocorrelación espacial en términos de covarianza, Geary’s C se enfoca en las diferencias locales entre valores vecinos, lo que lo hace más sensible a cambios abruptos y discontinuidades en la distribución espacial.

Diferencia con otros índices espaciales

Característica Bivariate Moran’s I Bivariate Geary’s C
Análisis Covarianza global Diferencias locales
Sensibilidad a cambios bruscos Baja (patrones globales) Alta (transiciones locales)
Valores cercanos a 0 No hay correlación espacial Alta similitud entre vecinos
Valores cercanos a 1 No hay correlación espacial Patrón espacial aleatorio
Valores mayores a 1 Pocas agrupaciones espaciales Alta variabilidad entre vecinos

Se calcula el Índice de Geary Bivariado (Bivariate Geary’s C) utilizando la función geary.bi(). Esta función se enfoca en evaluar similitudes o discontinuidades locales entre ambas variables.

Índice de Marginación

require(bispdep)

geary_bivariate <- geary.bi(varX = layer_municipios$ICE, 
                            varY = layer_municipios$IM_2020,
                            listw = weights,
                            zero.policy = FALSE)
geary_bivariate
## $C
## [1] 139.7904
## 
## $Kx
## [1] 31.65092
## 
## $Ky
## [1] 7.847273
  • El valor alto de Geary’s C (139.79) indica que hay discontinuidades y contrastes espaciales en la relación entre la calidad del entorno (ICE) y la marginación (IM_2020).
  • Los valores de kurtosis altos (Kx y Ky) refuerzan la idea de que algunas áreas tienen valores muy distintos a los de sus vecinos, lo que sugiere la presencia de zonas con fuertes contrastes socioeconómicos.
  • Esto podría implicar que existen áreas bien diferenciadas en términos de calidad del entorno y marginación, lo que es relevante para la planificación territorial y políticas públicas.

Bivariate Geary’s \(C_{xy}\) test

La función gearybi.test() no solo calcula el Índice de Geary Bivariado (C), sino que también lo somete a una prueba de hipótesis mediante permutaciones aleatorias para evaluar si la relación espacial observada es estadísticamente significativa.

Prueba de hipótesis en gearybi.test():

  • Hipótesis nula (\(H_{₀}\)): No hay una relación espacial significativa entre ICE e IM_2020, es decir, la distribución espacial es aleatoria.
  • Hipótesis alternativa (\(H_{1}\)): Hay una relación espacial significativa entre ICE e IM_2020, lo que indica patrones espaciales no aleatorios.

Si el valor p < 0.05, podemos rechazar \(H_{₀}\) y concluir que existe una relación espacial significativa entre las dos variables.

geary_bivariate_test <- gearybi.test(varX = layer_municipios$ICE, 
                                     varY = layer_municipios$IM_2020,
                                     listw = weights,
                                    zero.policy = FALSE)
geary_bivariate_test
## 
##  Geary C_{xy} test under randomisation
## 
## data:  layer_municipios$ICE 
## weights: weights 
## 
## Zc_{xy} Statistics of Geary's C_{xy} = -4910.9, p-value = 1
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C_{xy} statistic            Expectation               Variance 
##           1.397904e+02           1.000000e+00           7.987240e-04
  • El Índice de Geary Bivariado (C = 139.79) sugiere fuertes discontinuidades espaciales entre ICE e IM_2020.
  • Sin embargo, el p-valor de 1 indica que estas diferencias podrían ser producto del azar, por lo que no hay evidencia estadísticamente significativa de una estructura espacial en la relación entre ambas variables.
  • Posible causa:
    • La configuración de la matriz de pesos espaciales (weights) podría estar afectando los resultados.
  • Los datos podrían no tener una relación espacial clara, o la prueba podría no ser adecuada para este tipo de distribución.

Referencias

Anselin, L. (1995). Local Indicators of Spatial Association—LISA. Geographical Analysis, 27(2), 93–115.

Global Spatial Autocorrelation (2). (2019). Retrieved February 3, 2025, from https://geodacenter.github.io/workbook/5b_global_adv/lab5b.html

Tutorial of rgeoda • rgeoda. (2021). Retrieved February 3, 2025, from https://geodacenter.github.io/rgeoda/articles/rgeoda_tutorial.html

Librerías

Librerías que se usaron en el trabajo

sesion_info <- devtools::session_info()
package loadedversion source
bispdep 1.0-1 CRAN (R 4.3.3)
dplyr 1.1.3 CRAN (R 4.3.2)
extrafont 0.19 CRAN (R 4.3.0)
forcats 1.0.0 CRAN (R 4.3.1)
ggplot2 3.4.3 CRAN (R 4.3.1)
ggpubr 0.6.0 CRAN (R 4.3.1)
ggspatial 1.1.9 CRAN (R 4.3.2)
gt 0.10.0 CRAN (R 4.3.1)
kableExtra 1.3.4 CRAN (R 4.3.1)
knitr 1.45 CRAN (R 4.3.2)
lubridate 1.9.3 CRAN (R 4.3.2)
openxlsx 4.2.5.2 CRAN (R 4.3.1)
purrr 1.0.1 CRAN (R 4.3.1)
RColorBrewer 1.1-3 CRAN (R 4.3.0)
readr 2.1.4 CRAN (R 4.3.1)
readxl 1.4.3 CRAN (R 4.3.1)
rgdal 1.6-7 CRAN (R 4.3.1)
sf 1.0-16 CRAN (R 4.3.3)
sfdep 0.2.5 CRAN (R 4.3.3)
showtext 0.9-6 CRAN (R 4.3.1)
showtextdb 3.0 CRAN (R 4.3.1)
sp 2.2-0 CRAN (R 4.3.3)
spData 2.3.1 CRAN (R 4.3.3)
spdep 1.3-5 CRAN (R 4.3.3)
spdplyr 0.4.0 Github ()
stringr 1.5.0 CRAN (R 4.3.1)
sysfonts 0.8.8 CRAN (R 4.3.1)
tibble 3.2.1 CRAN (R 4.3.1)
tidyr 1.3.1 CRAN (R 4.3.3)
tidyverse 2.0.0 CRAN (R 4.3.1)
unikn 0.9.0 CRAN (R 4.3.1)

Creative Commons Licence
This work by Diana Villasana Ocampo is licensed under a Creative Commons Attribution 4.0 International License.