Código para Estadística Espacial con INLA
Ejemplo completo en R para análisis espacial bayesiano
Aspectos Clave
- Uso de INLA en R: Implementa modelos bayesianos espaciales de forma eficiente.
- Modelado Espacial: Integración de efectos espaciales utilizando modelos como Besag o SPDE.
- Visualización: Uso de paquetes complementarios, por ejemplo, leaflet, para representar resultados geográficos.
Introducción al Código
El paquete INLA (Integrated Nested Laplace Approximations) en R es una herramienta muy poderosa para realizar inferencia bayesiana en modelos complejos, incluyendo aquellos con componentes espaciales. A continuación, se presenta un ejemplo de código que muestra cómo preparar datos espaciales, ajustar un modelo espacial y visualizar los resultados.
Preparación de Datos y Configuración del Modelo
En este ejemplo, suponemos que se cuenta con un conjunto de datos con coordenadas (x y y) y una variable de respuesta que sigue una distribución de Poisson. Además, configuramos un modelo espacial utilizando tanto efectos espaciales dependientes de la estructura de vecindad (modelo Besag) como componentes para el ruido blanco (modelo iid). Se incluye también la visualización de los resultados en un mapa interactivo con leaflet.
Ejemplo de Código en R
El siguiente código realiza las siguientes acciones:
- Cargar las librerías necesarias.
- Preparar un conjunto de datos simulado con coordenadas espaciales y una variable de respuesta.
- Definir la estructura espacial y el mesh (en el caso que se use un enfoque SPDE) o la matriz de adyacencia para el modelo Besag.
- Ajustar un modelo de regresión utilizando INLA.
- Extraer y visualizar los resultados.
#--------------------------------------------------
# Cargar librerías necesarias
#--------------------------------------------------
if (!requireNamespace("INLA", quietly = TRUE)) {
install.packages("INLA", repos = "http://www.math.uio.no/inla/R/stable")
}
library(INLA)
library(sf) # Para manejo de datos espaciales
library(leaflet) # Para la visualización interactiva
#--------------------------------------------------
# Preparar datos espaciales simulados
#--------------------------------------------------
set.seed(123)
n <- 150
x <- runif(n, 0, 10)
y <- runif(n, 0, 10)
response <- rpois(n, lambda = 5)
# Crear un data frame
datos <- data.frame(id = 1:n, x = x, y = y, response = response)
# Convertir el data frame a objeto espacial (sf)
datos_sf <- st_as_sf(datos, coords = c("x", "y"), crs = 4326)
#--------------------------------------------------
# Crear un mesh para aproximación espacial (SPDE)
#--------------------------------------------------
# En este ejemplo, usaremos un mesh basado en las ubicaciones de los datos
mesh <- inla.mesh.2d(loc = datos[, c("x", "y")], max.edge = c(1, 2), cutoff = 0.1)
# Crear el modelo SPDE con el parámetro alpha (suavidad)
spde <- inla.spde2.matern(mesh = mesh, alpha = 2)
# Índice para el campo espacial
datos$spatial_field <- 1:nrow(datos)
index_spde <- inla.spde.make.index(name = "spatial_field", n.spde = spde$n.spde)
#--------------------------------------------------
# Preparar la matriz de proyección para cada observación
#--------------------------------------------------
A <- inla.spde.make.A(mesh = mesh, loc = datos[, c("x", "y")])
#--------------------------------------------------
# Definir la lista de efectos para INLA
#--------------------------------------------------
stack <- inla.stack(
data = list(response = datos$response),
A = list(A, 1),
effects = list(
spatial = index_spde,
data.frame(Intercept = 1, covariate = rnorm(n)) # Ejemplo de covariable aleatoria
)
)
#--------------------------------------------------
# Especificar la fórmula del modelo
#--------------------------------------------------
# Se incluye un término de Intercepto, una covariable y el efecto espacial con modelo SPDE
formula <- response ~ 1 + covariate + f(spatial_field, model = spde)
#--------------------------------------------------
# Ajustar el modelo con INLA
#--------------------------------------------------
# Se utiliza la familia Poisson, pero puede ajustarse a otros tipos según los datos
resultados <- inla(formula,
family = "poisson",
data = inla.stack.data(stack),
control.predictor = list(A = inla.stack.A(stack), compute = TRUE),
control.compute = list(dic = TRUE, waic = TRUE))
# Mostrar un resumen de los resultados
print(summary(resultados))
#--------------------------------------------------
# Visualización de Resultados con Leaflet
#--------------------------------------------------
# Extraer las predicciones del modelo y unir a los datos espaciales
predicciones <- resultados$summary.fitted.values
datos_sf$mean_pred <- predicciones[1:n, "mean"]
# Crear mapa interactivo
pal <- colorNumeric(palette = "YlOrRd", domain = datos_sf$mean_pred)
leaflet(datos_sf) %>%
addTiles() %>%
addCircleMarkers(radius = 5, color = ~pal(mean_pred), stroke = FALSE, fillOpacity = 0.8) %>%
addLegend(pal = pal, values = ~mean_pred, title = "Predicción")
Explicación Detallada
En el código anterior se realizan varias tareas críticas:
Preparación y Conversión de Datos
Se generan datos aleatorios con coordenadas y una variable de respuesta. Posteriormente, se convierten a un objeto espacial utilizando el paquete sf para facilitar el análisis geoespacial.
Creación del Mesh y Modelo SPDE
El mesh es una estructura triangular que permite modelar la variable espacial en el dominio geográfico. Se genera utilizando la función inla.mesh.2d, que recibe las coordenadas. Luego, se define el modelo SPDE mediante inla.spde2.matern para capturar la correlación espacial.
Definición y Ajuste del Modelo
La fórmula del modelo incorpora un Intercepto, una covariable (en este caso, simulada) y un efecto espacial. La función inla() ajusta el modelo utilizando la distribución de Poisson para la variable de respuesta. Los parámetros de inferencia, como el DIC y el WAIC, se incluyen en el control computacional.
Visualización de Resultados
Finalmente, se extraen las predicciones del modelo y se combinan con el objeto espacial para crear un mapa interactivo con leaflet. Se utiliza una paleta de colores para representar las variaciones de la predicción de la variable de respuesta en el espacio.
Tabla Resumen de Componentes del Código
| Sección | Descripción |
|---|---|
| Preparación de Datos | Generación de datos con coordenadas y variable Poisson, conversión a objeto espacial. |
| Creación de Mesh | Construcción del mesh y definición del modelo SPDE para capturar la auto-correlación espacial. |
| Definición del Modelo | Especificación de la fórmula que incorpora efectos fijos y aleatorios (espaciales y covariables). |
| Ajuste del Modelo | Uso de la función inla() para ajustar el modelo bayesiano espacial. |
| Visualización | Extracción y mapeo de predicciones con leaflet para análisis espacial interactivo. |
Referencias
- Introducción a la Estadística Espacial - SEIO
- Tutorial INLA - OurCodingClub
- Paquete INLA - Libro de Modelos Mixtos
- Análisis Espacial con INLA - R-bloggers
-
Aplicaciones en Recursos Pesqueros - Aqua
Consultas Relacionadas
Last updated March 17, 2025