Hace algunos meses, un colega en Cuba me contactó con unas dudas sobre cómo hacer mapas de riqueza de especies para algunas plantas caribeñas. Yo había escrito una guía breve para estos cálculos, pero solo a partir de puntos de ocurrencia o de mapas de distribución vectoriales. En su caso, había que re-clasificar y sumar varios modelos de MaxEnt para generar una capa de riqueza de especies.
Estuve buscando recursos para recomendarles, pero no encontré nada reciente ni en castellano, así que me puse a armar esta guía. Llevo años sin correr modelos de nicho ecológico (ENM), pero hasta donde sé el proceso sigue siendo el mismo para calcular riqueza.
Correr el modelo de distribución potencial (repetir para cada especie)
Elegir un umbral y re-clasificar la capa de idoneidad/probabilidad de ocurrencia de cada especie. De valores continuos a valores binarios de presencia/ausencia.
Sumar los valores de las capas re-clasificadas para contar el total de especies por pixel.
Desconozco cuál es la práctica actual para hacer ésto, supongo que con QGIS, o con algún programa de ESRI, o directamente con los programas que generan los modelos. Igual aquí propongo una forma bastante sencilla de hacer todo en R.
Con los útimos avances en los métodos espaciales con R, podemos usar stars, sf, y métodos del tidyverse para todos nuestros cálculos y visualizaciones de raster.
Probando el método
Antes que nada, una demostración con datos simulados muy simples. Para ésto hay que generar unos raster de prueba con valores de idoneidad aleatorios.
Esta función crea una matriz de 4x5 con valores aleatorios que luego se convierte en objeto stars, con un nombre asignado por la función adjective_animal del paquete ids.
Ejecutamos la función 8 veces con purrr::rerun, luego apilamos los objetos con c(), y los combinamos con merge().
Los objetos stars tienen dos elementos muy importantes con los que vamos a estar trabajando: atributos y dimensiones, que son los valores de los pixeles, y los metadatos de las dimensiones que hay en cada capa, respectivamente. Para trabajar con más orden, se le pueden poner nombres a estos elementos, con setNames para los atributos y st_set_dimensions para las coordenadas xy y las especies.
Así se ve nuestro objeto final:
Este juego de capas ya se puede graficar con ggplot2.
Para re-clasificar todas las capas, podemos usar varios métodos del tidyverse. Aquí vamos a considerar que todos los pixeles con un valor mayor a 70 son presencia, y los demás serían ausencias. Está muy buena la implementación que nos permite usar funciones de dplyr directamente en los atributos del objeto stars.
Estas reclasificaciones se pueden graficar en un ggplot2 multi-panel.
Para sumar las dimensiones, usamos st_apply, que aplica la función sum a las dimensiones con las coordenadas, y así obtenemos el total para cada pixel.
Así queda la capa de riqueza, que ya se puede visualizar. Las sumas tienen sentido, pues los valores en esta capa sí representan la suma de todas las capas de 0/1.
Podemos visualizar estas capas apiladas en 3d, siguiendo esta propuesta de Lauren O’Brien. Pasamos los rasters a vectores (objetos sf), los reestructuramos, y así podemos deformar las geometrías con mutate de dplyr, para darles perspectiva.
Podemos acomodar las capas originales y reclasificadas con patchwork
Aplicación con archivos de MaxEnt
Ahora podemos repetir todo el proceso con archivos reales, generados por MaxEnt. Este ejemplo es con modelos de idoneidad ambiental para 96 especies de aves migratorias en Norteamérica. Fueron generados por Diana Stralberg y están archivados en Zenodo.
Primero, descargamos una división política con rnaturalearth.
Después usé fs y purrr para importar todos los archivos asci desde una carpeta en mi computadora. Para apilarlos, es el mismo procedimiento de arriba.
Delimitamos el área de estudio, y podemos dibujar 8 de estos mapas (elegidos al azar). Aquí sirve slice de dplyr para sacar subconjuntos de un objeto stars.
La riqueza de especies se calcula igual que en el ejemplo anterior.
Ahora ya podemos generar un mapa de riqueza de especies con todas las 96 capas.
Quedó nítido.
Eso es todo, si tienen preguntas o se traban, no duden en contactarme.
Salu-2