
Cuando corres un modelo de nicho en R y el mapa de vegetación sale pintado con un solo color verde, frecuentemente no está claro si la culpa es de tu código o del índice que elegiste. A mí me ha pasado tantas veces que ya perdí la cuenta, y la respuesta casi nunca es la que uno espera cuando arranca con esto de la teledetección en R. Con los años pegado a mapas de distribución de especies armados con MaxEnt, aprendí que de todos los pasos del proceso, escoger bien el índice de vegetación es de los que más dolores de cabeza da.
El sábado pasado, contando aves con el grupo de siempre en los Cerros de Escazú, comparé lo que veía en el campo —parches de bosque más ralo entre potreros y cafetales— con el mapa que tenía guardado en la laptop, y no cuadraban ni de cerca. Esa fue la señal de que el problema estaba en mi elección de índice, no en el modelo en sí.
Por qué el NDVI funciona bien en tutoriales pero falla en el bosque nuboso
El NDVI es lo primero que te tiran por la cabeza en cualquier tutorial, y con razón: la fórmula es sencilla, (NIR - Rojo) / (NIR + Rojo), y da un rango de valores que va de -1 a 1, donde lo que se acerca a 1 se supone que es selva cerrada. El problema aparece en zonas de mucha biomasa, como nuestros bosques tropicales: el índice se satura rápido y dos parches de bosque bien distintos terminan con casi el mismo número. Para un modelo de nicho eso pesa, porque el algoritmo deja de ver diferencias donde sí las hay sobre el terreno.
Dejé de mandar a la gente a puros tutoriales sueltos de YouTube para esto, porque casi ninguno de los que están en inglés menciona qué pasa cuando cambiás de sensor, y ahí es justo donde se arma el enredo de verdad.

El susto del mapa en blanco con Sentinel-2
Cansado de pelear con capas viejas, me pasé a Sentinel-2 por la resolución: las bandas visibles y del infrarrojo cercano vienen a 10 metros, casi como para distinguir el patio de la casa desde el espacio. Cargué las capas con la librería terra, corrí el script y me salió un mapa completamente blanco. Nada. (La verdad sea dicha, casi tiro la laptop por la ventana esa tarde.) Resulta que los valores de reflectancia de Sentinel-2 vienen escalados por 10,000, y si no dividís las bandas antes de calcular el índice, R simplemente no tiene nada que mostrarte. Dos horas revisando rutas de archivo que no encontraba para terminar topándome con un detalle de escala que ni el manual menciona con claridad.
Si trabajás con distintos sensores vale la pena revisar las diferencias entre imágenes Sentinel y Landsat para procesar con R, porque cada uno trae sus propias mañas de escala y resolución antes de que puedas calcular cualquier índice. La resolución de una capa no es un detalle menor: cambia bastante qué tan fino podés diferenciar la vegetación en un mapa de nicho, así que conviene mirarla con calma antes de fijarte solo en qué tan bonitas se ven las variables ambientales que vas a usar.
Ahí es donde mucha gente mezcla dos cosas que no son lo mismo: las capas bioclimáticas que alimentan un modelo de nicho, como las de WorldClim, describen un clima promediado de años, mientras que un índice de vegetación sacado de teledetección satelital te muestra lo que hay en el terreno en un momento puntual. Me acuerdo de la vez que bajé las capas de WorldClim completas, sin recortarlas al área de estudio, y la RAM de la computadora se ahogó tratando de cargar medio continente cuando lo único que necesitaba era un pedazo de Costa Rica.
EVI y SAVI hacen lo que el NDVI no puede en el trópico
El EVI (Enhanced Vegetation Index) es más sensible en zonas de alta biomasa porque trae términos de corrección atmosférica que lo hacen más resistente al ruido que sobra en el trópico. Cuando lo probé, el mapa por fin empezó a mostrar texturas en el bosque nuboso que con el NDVI se veían como una sola mancha. El SAVI (Soil-Adjusted Vegetation Index) lo aprendí a usar casi de casualidad, mapeando una zona con mucha tierra expuesta y parches de vegetación seca: usa un factor de ajuste de suelo para que el brillo de la tierra no te haga pensar que hay menos verde del que en realidad hay.
Le mandé captura del mapa nuevo a Nathalie Fallas, una colega de la comunidad de R con la que comparo errores de vez en cuando, y su primera pregunta fue por qué no lo había resuelto en QGIS de una vez, ella maneja ese programa mejor que MaxEnt y no entiende mi terquedad con R (y hay días en que, para ser sincero, yo tampoco me entiendo del todo con R). Puede que tenga razón, pero a mí me gusta ver qué hace cada línea de código, aunque me tome el triple de tiempo.

Para la semana cuatro de estar metido con estas capas para el proyecto de aves, ya llevaba dos mapas descartados. La proyección a futuro del modelo salió pintada de un rojo parejo de punta a punta, como si toda la región fuera igual de apta para la especie, sin ningún matiz. Esa imagen tan plana fue la que me hizo sospechar en serio de las capas de vegetación que le estaba dando de comer al modelo, más que del algoritmo.
En el foro de modelado de nicho donde ando metido, Plácido Arce —un ornitólogo aficionado que discute con argumentos sólidos aunque nunca escribe una línea de código— comentó que prefiere biomod2 sobre MaxEnt, aunque nunca termina de explicar del todo por qué. Con el tiempo entendí que en esto cada quien defiende su herramienta como defiende su equipo de fútbol.
Elegí el índice de vegetación según el terreno, no según la fama
La lección que me llevo de todo esto es simple: el NDVI sirve, pero no para todo, y confiar en él solo porque es el primer resultado de Google te puede costar semanas de trabajo. Si estás en zona de bosque denso, probá con EVI. Si estás en terreno con suelo expuesto o vegetación rala, el SAVI te va a dar un panorama más honesto. Repasé de nuevo mi propia reseña sobre la mejor formación en teledetección con R para automatizar mapas de vegetación y confirmé que ese es justo el tipo de detalle que separa un curso que vale la pena de uno que se queda en lo básico del NDVI y ya. Al final, el índice correcto no es el más famoso: es el que realmente te deja ver lo que está pasando en tu bosque.