Erre Datos

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

En el mapa que escupió MaxEnt, la mancha de hábitat idóneo para el ave que llevábamos meses contando terminaba metros adentro del mar, frente a la costa donde está Palo Verde.

Nadie ha visto esa especie nadando, así que el problema no eran las aves de Costa Rica que veníamos contando, sino el modelado de nicho detrás del mapa. El punto de idoneidad flotaba sobre agua salada mientras mis datos de campo, tomados en las lagunas y los esteros de Palo Verde, decían que el ave se movía entre el manglar y el bosque seco. Ese desfase resume bastante bien lo que cuesta modelar el hábitat de un ave con R: no alcanza con saber dónde la viste, hay que decirle al programa, con precisión, dónde termina el mundo que le estás pidiendo que analice.

Lo que las variables ambientales realmente le dicen a R

Un modelo de nicho como MaxEnt no adivina nada por su cuenta: necesita capas de variables ambientales para cada píxel del área de estudio, y de ahí saca los patrones que después convierte en mapa. La base de casi cualquiera que empieza en esto son las variables bioclimáticas de WorldClim, gratuitas y fáciles de bajar, aunque a escala local terminan siendo bastante generales (ya habrá quien explique esas capas a fondo en otro lado; acá solo digo que son el punto de partida, no el final del camino).

Con esas capas climáticas solas, a un ave que depende del follaje del bosque se le pierden matices importantes. Ahí es donde entra la teledetección satelital: información captada por satélites, procesada en R, que le agrega textura y detalle al modelo. Ojo, modelar nicho y hacer teledetección no son la misma disciplina, aunque acá se crucen todo el tiempo, y esa diferencia da para su propio análisis.

Código en R con el paquete terra alineando capas satelitales para un modelo de nicho de aves

Las capas de satélite que hacen falta de verdad

La respuesta corta: menos de las que uno piensa al principio. Me tomé casi un mes de pelearme con capas para entender que no hacía falta bajar todo lo que existiera del área, sino elegir dos o tres variables que de verdad importaran para esa especie. Trabajo todo esto en R con el paquete terra, que se volvió mi herramienta base para alinear y recortar rasters, aunque sé que hay quien resuelve esta misma parte en QGIS; esa disyuntiva también merece su propio espacio, no la voy a zanjar acá.

Cuando el error de extents me tenía trabado, pregunté en un foro de R para ecología qué estaba haciendo mal. Lo único que me contestaron fue un enlace a la documentación oficial de terra, toda en inglés, sin un solo ejemplo con datos de aves ni de Centroamérica. Tuve que sentarme a traducir y probar por mi cuenta, celda por celda, hasta que las capas por fin coincidían en el mismo sistema de referencia.

Cuando el ave apareció nadando en el mapa

El problema del punto en el mar venía de antes, pero fue apenas para la semana ocho de trabajar este modelo que rastreé el error hasta algo tan tonto como un extent mal definido: la capa que usaba de referencia para recortar cubría medio golfo porque nunca la ajusté al área real de Palo Verde. Cuando por fin corregí el recorte y volví a correr la proyección, el ventilador de la torre subió de tono como si el equipo también estuviera nervioso por el resultado.

Se lo conté a un amigo que hace fotografía submarina en los arrecifes de Cahuita, más que nada para desahogarme, y me dijo, entre risas, que ya que mis aves sabían nadar, tal vez debía cambiarme al buceo. No le vi la gracia esa semana, la verdad sea dicha, pero ahora sí.

Comparación entre variables climáticas y capas NDVI de satélite usadas en un modelo de nicho de aves

Verde, resolución y el balance que nadie explica bien

Lo que más cambió mis modelos, ya resuelto el lío del extent, fue el NDVI. Es, en corto, un índice que resume qué tan verde y saludable se ve la vegetación desde el satélite, sin meterme en la fórmula porque para eso hay gente que explica mejor que yo. Para un ave que depende de fruta o néctar, la diferencia entre un bosque que se mantiene verde todo el año y uno que se seca en época seca es determinante, y esa diferencia no la vas a sacar de una variable climática promedio.

Más resolución no siempre es mejor, aprendí eso a la fuerza. Probé con imágenes de mayor detalle pensando que el modelo iba a mejorar solo por eso, y lo que gané fue una laptop recalentada (no es precisamente última generación, para qué le voy a mentir) y proyecciones que tardaban una eternidad sin que el mapa final cambiara gran cosa. El truco terminó siendo mezclar variables de distinta resolución sin perder de vista qué tan afinado necesitaba el modelo para esa escala en particular, y ahí también entra ajustar el beta de regularización de MaxEnt, aunque esa palabra por sí sola da para otro artículo completo.

Si el punto de partida es aprender a limpiar estos datos satelitales antes de correr cualquier modelo, ahí sí vale la pena revisar algunos cursos de R para modelar especies raras con pocos datos de observación, porque basura que entra es basura que sale, y esa parte casi nadie la enseña bien de forma gratuita.

Dejé de recomendar bajar escenas sueltas de repositorios satelitales genéricos sin filtrar antes por nubosidad. En Costa Rica, con la nubosidad que hay buena parte del año, eso significa horas botadas limpiando imágenes que ni siquiera sirven, y prefiero mandar a la gente directo a buscar productos ya compuestos por temporada.

Tampoco adelgacé los puntos de avistamiento al principio, y eso también pasa factura: si tenés varios registros pegados en el mismo sitio, el modelo les da más peso del que deberían tener, así que ahora reviso ese filtrado espacial antes de correr nada. Ese modelo en particular, dicho sea de paso, no terminó con el mejor valor de AUC de toda la temporada, pero sí acertó justo en los senderos donde encontramos al ave, así que tampoco me obsesiono con perseguir el número más alto. Nunca corrí un GLM tradicional contra este mismo set de datos, aunque sé que hay quien jura que esa comparación vale la pena para entender qué gana y qué pierde uno usando MaxEnt en vez de un modelo lineal.

La lección que me llevo de esa temporada de campo

Si tuviera que quedarme con una sola lección de esa temporada, sería esta: revisá el extent de cada capa antes de correr cualquier proyección, aunque estés seguro de que ya lo hiciste, porque ese es el error que menos se nota hasta que el mapa te manda un ave a nadar en el mar. Cuando alguien me pregunta si vale la pena invertir tiempo o plata en aprender esto, pienso en las noches persiguiendo un error que al final era un simple recorte mal hecho, y ahí entra la pregunta real: cuánto pesa la inversión necesaria para dominar MaxEnt en R sin ser programador frente a las horas que ya perdiste aprendiendo solo. No soy biólogo de carrera ni programador de oficio, pero después de esa temporada en Palo Verde puedo decir que la terquedad, bien dirigida, también cuenta como método.

Artículos relacionados