Pasos para crear mapas de calor de biodiversidad con R y Maxent

Eran las tantas de la tarde, el té se había enfriado junto al teclado y la lluvia golpeaba el vidrio con esa insistencia tan típica de Valdivia. RStudio acababa de cerrarse de golpe, sin avisar, dejándome con la pantalla en blanco y varios post-its arrugados pegados al borde del monitor. Otra vez.

Antes de meterme de lleno en el código, una aclaración transparente: un par de enlaces en esta bitácora son de afiliado. Si compras algún curso a través de ellos, a mí me entra una pequeña comisión por recomendarlo y a ti te cuesta exactamente lo mismo, sin un peso extra. Solo hablo de cosas que compré, probé y con las que me di de cabezazos durante semanas; si algo no lo conozco de primera mano, prefiero no mencionarlo.

Todo esto partió porque, después de pasar meses mirando índices de vegetación satelitales para ver cómo cambiaba el bosque nativo cerca del río, me picó la curiosidad por entender algo más vivo. No solo dónde había verde, sino dónde de verdad encuentran refugio las especies. Me puse a leer sobre modelado de nicho ecológico y me encontré una y otra vez con el mismo nombre: Maxent (el algoritmo de máxima entropía). La promesa sonaba hermosa: le entregas puntos donde alguien vio a la especie, le sumas capas de clima y el computador te devuelve un mapa continuo, una especie de mapa de calor con las probabilidades de que ese ser vivo encuentre su hábitat ideal.

Claro que del dicho al hecho hay un abismo de errores de consola. Me tomó bastante tiempo ordenar las piezas en mi cabeza, pero si estás tratando de armar tu primer modelo de distribución sin volverte loca en el intento, estos son los pasos que a mí me salvaron del colapso.

1. Conseguir y limpiar los puntos de presencia

Puntos de coordenadas de especies proyectados en la pantalla de RStudio

El punto de partida siempre parece inocente: descargas una tabla con coordenadas desde algún portal de ciencia ciudadana como GBIF. Abres tu archivo CSV en R, respiras hondo y tratas de convertirlos en datos espaciales. Aquí fue donde me pegué mi primer porrazo inolvidable.

Un fin de semana lluvioso a fines de mayo, después de pasar una tarde entera acomodando un archivo con registros de una ranita nativa, mandé a graficar los puntos sobre el mapa de Chile. Me quedé mirando la pantalla sin entender nada: cada uno de los puntos flotaba en medio del Océano Pacífico, a cientos de kilómetros de la costa más cercana. Resulta que había invertido la latitud y la longitud al cargar la tabla (un clásico absoluto que da vergüenza confesar, pero pasa muchísimo). En Chile la longitud es negativa y la latitud también, así que si las pones al revés, tu ranita termina nadando en altamar.

Para no marearte, la rutina básica en R consiste en fijar el sistema de coordenadas de tus puntos bajo el código estándar EPSG 4326 (el conocido WGS84 con coordenadas geográficas en grados). Si te toca lidiar con duplicados o registros con datos dudosos, escribí hace poco sobre mi experiencia limpiando puntos de presencia para modelado de nicho r, donde detallo cómo descartar esas coordenadas sospechosas antes de que te ensucien todo el análisis posterior.

2. Cargar las capas ambientales (y la tentación de la resolución)

Cuaderno con anotaciones sobre capas bioclimáticas y pantalla mostrando rasters ambientales

Para que Maxent entienda qué le gusta a una especie, necesita capas ambientales en formato raster. Lo más común y accesible para empezar es recurrir a la base de datos de WorldClim, que ofrece 19 variables bioclimáticas estándar. Estas 19 variables (que van desde Bio1 hasta Bio19) no son solo temperatura media o lluvia anual; capturan momentos biológicamente críticos, como la precipitación del trimestre más seco o la temperatura del mes más cálido.

Cuando recién empecé, caí en una trampa muy común de principiante. Pensé: "Si descargo los datos climáticos a 10 minutos de arco se ven pixelados; si los interpolo o busco una resolución ultra fina de 30 metros, mi mapa va a ser infinitamente más preciso". Me obsesioné con remuestrear rasters para que quedaran suaves y detallados.

Fue una pérdida de tiempo monumental. Con las semanas me di cuenta de que aumentar artificialmente la resolución espacial de los datos climáticos en Maxent suele reducir la precisión real del modelo en vez de mejorarla. Las estaciones meteorológicas de las que nacen estos modelos globales están separadas por decenas de kilómetros; inventar píxeles minúsculos mediante interpolación matemática no aporta más detalle biológico, sino puro ruido estadístico. Maxent termina asociando la presencia de una planta a una micro-variación numérica de temperatura que en la realidad no existe en ese pedazo de suelo. Para aprender a preparar estas capas sin enredarte con los límites geográficos, te recomiendo mirar esta guía sobre cómo preparar variables bioclimáticas para Maxent en R sin fallos de proyección.

3. El muestreo de fondo y el ventilador del computador

Computador procesando puntos de fondo en RStudio en una tarde fría

Maxent es un método de "solo presencia". Esto significa que no necesitas decirle dónde la especie no vive (lo cual es casi imposible de asegurar en terreno), pero sí necesita contrastar tus observaciones contra el ambiente general disponible. A eso se le llama puntos de fondo o pseudo-ausencias.

Por defecto, la implementación tradicional de Maxent suele tomar 10000 puntos aleatorios distribuidos en la extensión de tus capas ambientales. Suena a número redondo y sencillo, pero extraer los valores de las 19 variables climáticas para esos diez mil puntos pone a prueba cualquier computador casero.

Tengo grabado en la memoria un sábado frío a mediados de agosto: la lluvia tamborileaba sin tregua sobre el techo de zinc mientras el ventilador de mi notebook zumbaba a toda potencia durante la extracción de esos puntos de fondo. El computador se calentaba tanto que casi servía de estufa para mis manos heladas. Durante esas semanas me sentía estancada con el paquete dismo, que a veces pide tener Java instalado y configurado de cierta forma que a mí me arrojaba errores incomprensibles en la consola de comandos.

Después de unas tres semanas de ensayo y error, buscando explicaciones sencillas que no asumieran que ya tengo una maestría en informática, me inscribí en el curso de Modelado de Nicho Ecológico con Maxent en R. Lo elegí principalmente porque se enfocaba de forma directa en resolver el flujo de trabajo en R sin rodeos teóricos innecesarios. El precio actualizado siempre lo puedes revisar en su página web porque suele variar según promociones, pero en mi caso me sirvió para entender por fin cómo ordenar la matriz de datos ambientales y qué diablos significaban los parámetros de regularización que Maxent usa por debajo.

4. Entrenar el modelo y proyectar la superficie de probabilidad

Mapa continuo de probabilidad de nicho ecológico proyectado en la pantalla

Una vez que tienes tus coordenadas limpias en EPSG 4326 y tus 19 capas raster recortadas a la misma extensión exacta y con las mismas dimensiones de celda, el ajuste del modelo en R se vuelve sorprendentemente breve. Usando bibliotecas como dismo o envoltorios modernos vinculados a terra, el comando principal toma tus datos de presencia y tus 10000 puntos de fondo:

# Estructura general de ajuste
modelo_maxent <- maxent(x = variables_ambientales, p = coordenadas_presencia)

# Proyección espacial del mapa continuo
mapa_probabilidad <- predict(modelo_maxent, variables_ambientales)

La función predict() recorre cada celda del territorio y calcula una probabilidad relativa de presencia biológica, que se mueve en una escala continua de 0 a 1. Eso es justamente lo que llamamos mapa de calor: valores cercanos a cero indican condiciones climáticas completamente desfavorables, mientras que los valores cercanos a uno marcan áreas donde el nicho ambiental se ajusta a lo que la especie prefiere.

Al proyectar el mapa sobre la Región de Los Ríos, vi por primera vez los tonos cálidos concentrándose a lo largo de los valles y quebradas boscosas que rodean Valdivia, disipándose hacia las cumbres más frías de la cordillera. Ver cómo los números abstractos cobraban sentido geográfico en la pantalla fue de esos pequeños triunfos que justifican todas las horas de frustración anteriores.

Si alguna vez quieres ir más allá de los factores climáticos globales y sumar variables derivadas de satélite (como cobertura de dosel o verdor estacional), un buen camino complementario es entender las bases de imágenes con Teledetección Satelital con R y R-Studio, aunque para empezar con distribución pura de especies, con el clima tienes más que suficiente material de trabajo.

El mapa exportado y la calma del cuaderno

Cuando por fin logré exportar el raster final a mi disco duro con writeRaster() y armé una visualización limpia con una paleta de colores continua, guardé el script en mi carpeta de trabajo con un suspiro de alivio. Me quedé un rato largo mirando el resultado en la penumbra de la pieza, mientras el vapor de una nueva taza de té empañaba el borde de la mesa.

Aprender estas herramientas por cuenta propia, los fines de semana y robándole horas al descanso después de la oficina, suele sentirse como dar palos de ciego. Te equivocas en una coma, inviertes las coordenadas o dejas que R consuma toda la memoria de tu equipo por querer meter capas demasiado pesadas. Pero cada error te enseña un límite concreto. Si estás pensando en dar tus primeros pasos con Maxent, mi humilde consejo de aprendiz es que vayas despacio: desconfía de la falsa precisión de los píxeles diminutos, revisa dos veces si tus puntos no están nadando en el mar y ten paciencia con tu computador cuando le toque procesar esos miles de puntos bajo la lluvia.

Artículos relacionados