14  Análisis de patrones de puntos: colocación

NoteResultados de aprendizaje
  • R5. Usar paquetes para el análisis espacial en R.

El último análisis del curso es la colocación (co-location): cuando los puntos tienen categorías, ¿tienden ciertos tipos a aparecer juntos? Por ejemplo, ¿los colegios públicos y los privados-subvencionados se mezclan en el territorio, o se segregan en zonas distintas?

Usaremos sfdep, que implementa el análisis de colocación basado en los k vecinos más cercanos.

library(tidyverse)
library(sf)
library(sfdep)

14.1 Preparar puntos con categorías

Cargamos los colegios de la Región del Biobío y los clasificamos por su tipo de dependencia:

comunas <- st_read("data/comunas_biobio.gpkg", quiet = TRUE) %>%
  st_transform("EPSG:24879")

conce <- comunas %>% filter(comuna == "CONCEPCION")

colegios <- st_read("data/colegios_biobio.gpkg", quiet = TRUE) %>%
  st_transform("EPSG:24879") %>%
  st_filter(conce, .predicate = st_within) %>%
  mutate(
    tipo = case_when(
      TIPO_DEPEN >= 4 ~ "Publico",
      TIPO_DEPEN == 3 ~ "Particular pagado",
      TRUE            ~ "Subvencionado"
    )
  )

count(st_drop_geometry(colegios), tipo)

14.2 Colocación global

¿Existe colocación en toda el área? Definimos vecinos por k-NN y aplicamos global_colocation():

nb <- st_knn(st_geometry(colegios), k = 6)

global_colocation(colegios$tipo, nb, nsim = 99)
$CLQ
[1] 1.142944

$p_sim
[1] 0.02

El resultado, comparado contra 99 simulaciones, indica si las categorías se mezclan más (o menos) de lo esperado al azar.

14.3 Colocación por pares

pairwise_colocation() examina cada par de categorías: ¿qué tipos tienden a estar cerca de qué otros tipos?

A  <- colegios$tipo
nb <- st_knn(st_geometry(colegios), k = 20)

pairwise_colocation(A, A, nb, nsim = 99)
                  Particular pagado   Publico Subvencionado
Particular pagado          1.363636 1.0622010     0.9428571
Publico                    1.538462 0.9068826     1.0021978
Subvencionado              1.090141 0.8650852     1.0889336
                  p_sim_Particular pagado p_sim_Publico p_sim_Subvencionado
Particular pagado                    0.01          0.39                0.09
Publico                              0.00          0.02                0.32
Subvencionado                        0.42          0.00                0.00

14.4 Colocación local

La versión local identifica dónde ocurre la colocación. Requiere pesos espaciales además de la vecindad:

nb <- st_knn(st_geometry(colegios), k = 20)
wt <- st_kernel_weights(nb, st_geometry(colegios), "gaussian", adaptive = TRUE)

p_local <- local_colocation(colegios$tipo, colegios$tipo, nb, wt, nsim = 99)

# Unimos los resultados a los puntos
colegios_final <- colegios %>% bind_cols(p_local)

names(colegios_final)
 [1] "RBD"                     "NOM_RBD"                
 [3] "NOM_COM_RB"              "TIPO_DEPEN"             
 [5] "MAT_TOTAL"               "MAT_HOM_TO"             
 [7] "MAT_MUJ_TO"              "tipo"                   
 [9] "Particular pagado"       "Publico"                
[11] "Subvencionado"           "p_sim_Particular pagado"
[13] "p_sim_Publico"           "p_sim_Subvencionado"    
[15] "geom"                   

El objeto resultante tiene una columna por categoría con su estadístico local y otra con el p-valor simulado (p_sim_*), que permite mapear las zonas donde la colocación de cada tipo es significativa:

ggplot() +
  geom_sf(data = conce) +
  geom_sf(data = colegios_final, aes(color = tipo), size = 1) +
  labs(title = "Colegios de Concepción por dependencia", color = "Tipo") +
  theme_void()

14.5 Cierre del curso

Con esto cerramos el recorrido: pasamos de los primeros vectores en R a un análisis espacial completo. El trabajo final te pedirá integrar varias de estas etapas —importar datos reales, limpiarlos, mapearlos y aplicar al menos un análisis de estadística espacial— sobre una pregunta geográfica propia.

Ejercicios

ImportantEjercicio 14.1 — ¿Se mezclan o se segregan?

Con un conjunto de puntos categorizados (colegios por dependencia, comercios por rubro, equipamientos por tipo…):

  1. Clasifica los puntos en categorías con case_when().
  2. Calcula la colocación global e interprétala.
  3. Calcula la colocación por pares: ¿qué categorías se atraen?
  4. Calcula la colocación local y mapea las zonas significativas.
  5. Escribe una conclusión: ¿el fenómeno se mezcla o se segrega espacialmente?
TipHacia el trabajo final

Este ejercicio es un buen punto de partida para el trabajo final. Elige una pregunta geográfica que te interese, consigue los datos y aplica el flujo completo del curso.