Erre Datos

Variables ambientales para modelar hábitats de aves con R y satélites

Afuera caía un aguacero de esos que solo se ven en San José un noviembre cualquiera, y yo estaba ahí, con los ojos inyectados en sangre frente al monitor, viendo cómo los puntos de avistamiento de un colibrí endémico caían en píxeles que, para el mapa, eran básicamente el vacío. No cuadraba. Tenía mis datos de campo, sabía dónde estaba el bicho, pero mi modelo de MaxEnt decía que ahí no había nada. Fue en esa noche de lluvia cuando entendí que no basta con saber dónde está el ave; el secreto está en qué le dices a R sobre el mundo donde esa ave vive.

Si estás empezando en esto, probablemente ya te bajaste las famosas WorldClim. Todos pasamos por ahí. Son esas 19 variables bioclimáticas estándar que teóricamente resumen el mundo. Pero seamos honestos: cuando trabajas en una escala local, como los cafetales de Heredia o los bosques nubosos de Monteverde, una resolución de 30 segundos de arco (que es lo más fino que te da WorldClim) se siente como intentar pintar una miniatura con una brocha de construcción. El mapa te dice que la temperatura es la misma en todo el cerro, pero tú sabes que en la quebrada donde está el nido hace un frío que pela y hay una humedad que no aparece en los promedios globales.

Del clima general al verdor real: El salto a los satélites

Ahí es donde entra la teledetección. Pasé casi un mes peleando con scripts que no corrían porque quería algo más que 'temperatura promedio'. Quería ver el bosque. Empecé a buscar datos de Landsat 8, que te da una resolución espacial de 30 metros. Imagínate la diferencia: pasar de un bloque de casi un kilómetro a cuadritos de 30 metros. De repente, el mapa ya no era una mancha café, sino un mosaico donde se distinguía el parche de bosque de la zona de potrero.

Interfaz de RStudio mostrando código de programación y una capa de satélite raster

Pero claro, R no te lo pone fácil. Recuerdo un sábado por la mañana, con el tercer café calentándose en el microondas, intentando alinear una capa de temperatura con una de satélite. El error de 'extents do not match' es el equivalente en programación a que te cierren la puerta en la cara. Aprendí a golpes que el paquete 'terra' es tu mejor amigo y tu peor enemigo. Es el estándar moderno para manejar estos datos raster, pero si no tienes cuidado con las proyecciones, terminas con el volcán Poás ubicado en medio del Océano Pacífico. (Sí, me pasó, y me tomó tres horas entender por qué mis aves estaban 'nadando').

El NDVI: Cuando el color te cuenta la historia

Lo que realmente cambió mis modelos fue el NDVI (Índice de Vegetación de Diferencia Normalizada). Suena sofisticado, pero para nosotros los tercos que aprendimos a puro Google, es básicamente una fórmula que le pregunta al satélite: '¿Qué tan verde y sana está esa planta?'. Para las aves, especialmente las que dependen de frutos o néctar, el NDVI es oro puro. No es lo mismo un bosque que siempre está verde a uno que se seca en marzo.

Durante mis salidas de campo en marzo, empecé a notar que el colibrí no estaba donde hacía 'menos calor', sino donde la estructura del bosque era más densa. Al meter el NDVI derivado de satélites en R, el modelo empezó a cobrar vida. Ya no era una predicción matemática abstracta; era un reflejo de la realidad. Si te interesa meterte en este mundo, a veces es mejor buscar cursos de R para modelar especies raras con pocos datos de observación que te enseñen a limpiar estos datos satelitales antes de lanzarte a correr el modelo, porque basura que entra, basura que sale.

La trampa de la resolución: No todo es nitidez

Aquí es donde me pongo un poco autocrítico. Cometí el error de pensar que entre más resolución, mejor. '¡Usemos Sentinel con 10 metros!', pensé ilusionado. Gran error. Pasé noches enteras viendo la luz azul del monitor reflejada en una taza de café ya fría mientras la barra de progreso de R se detiene al 99% y la computadora suena como si fuera a despegar. Mi humilde laptop no aguantaba tanto proceso.

Además, hay una verdad que los tutoriales gringos no siempre te dicen: la dependencia exclusiva de satélites como Landsat o Sentinel para modelar nichos suele ignorar que la heterogeneidad del microclima local es más determinante que la resolución espacial global. Un satélite puede decirte que hay árboles, pero no te dice si debajo de esos árboles hay una corriente de aire frío que el ave necesita. Por eso, las 19 variables de WorldClim, aunque sean 'groseras' en resolución, siguen siendo necesarias como base. El truco es el equilibrio.

Comparación visual entre resolución climática baja y alta resolución de satélite NDVI

Hace unas tres semanas logré por fin limpiar una serie de imágenes satelitales sin que las nubes (el eterno problema de Costa Rica) me arruinaran el mapa. Usar R para 'masking' de nubes es un dolor de cabeza que me costó varias canas, pero esa pequeña descarga de adrenalina cuando el comando 'plot' finalmente muestra un mapa coherente en lugar de un error en rojo... eso no tiene precio. Ver que la mancha de idoneidad de hábitat coincide exactamente con los senderos donde mis compañeros voluntarios y yo encontramos a las aves es lo que me mantiene pegado a la pantalla.

Consejos de quien ya rompió el código (varias veces)

A veces uno siente que la inversión necesaria para dominar MaxEnt en R sin ser programador es demasiado alta en términos de tiempo y frustración. Pero cuando logras integrar variables ambientales reales, medidas desde el espacio, y ves que tu modelo predice una zona donde luego vas y encontrás al ave... ahí entendés que valió la pena cada noche de 'error in script'. No somos biólogos de carrera, pero la terquedad también es una herramienta científica válida.

Si estás ahí sentado, peleando con una ruta de archivo que R dice que no existe (cuando la estás viendo ahí mismo en la carpeta), respira. Revisa los slashes, revisa las comillas y recordá que hasta los que escriben los paquetes empezaron pegándose contra la pared. El mapa está ahí, solo tenés que aprender a pedírselo al código.

Artículos relacionados