Chat
Ask me anything
Ithy Logo
Sign in to save

Código para Estadística Espacial con INLA

Ejemplo completo en R para análisis espacial bayesiano

spatial mapping data

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

Consultas Relacionadas

rubenfcasal.github.io
PDF
rstudio-pubs-static.s3.amazonaws.com
Estadística Espacial

Last updated March 17, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI
Download Article
Delete Article