
En Google Earth Engine todo corre en la nube y se supone que ni siquiera hace falta instalar nada; en RStudio tuve que pelear con cada paquete a mano, y fue justo esa pelea la que finalmente me enseñó a limpiar de verdad un punto de presencia antes de meterlo en un modelo de nicho. La diferencia no es solo de comodidad: es la diferencia entre confiar ciegamente en un dato de GBIF y entender, columna por columna, por qué ese dato puede estar mintiendo. Llevo metida varios meses en esto de la teledetección para quien parte de cero, armando mapas de dónde podría vivir el Roble más adelante, y si hay algo que le repetiría a cualquiera que recién se asoma a R espacial es esto: la limpieza de los datos de GBIF pesa más que el algoritmo que uses después.
Antes de instalar RStudio en serio, probé Google Earth Engine porque alguien en un foro juraba que ahí todo era más simple. La interfaz basada en JavaScript me cerró la puerta desde el primer ejemplo del tutorial: yo nunca había programado nada y ese editor lleno de corchetes y funciones anidadas me hizo sentir que esto sencillamente no era para mí. Cerré la pestaña sin terminar ni el primer ejercicio. Fue por esos días que Boris Irarrázaval, el vecino de al lado que trabaja en infraestructura de servidores, me ayudó una tarde cuando la instalación de R se me atascó justo en la configuración del PATH, aunque él no tenía ni idea de qué era un shapefile y probablemente sigue sin saberlo.
¿Por qué la mitad de mis puntos aparecían en pleno Pacífico?
Todo esto arrancó cuando quise ver dónde más podría crecer el Roble si el clima sigue cambiando, y pensé, con una inocencia que ahora me da un poco de risa, que bastaba con descargar los puntos de presencia de GBIF (una especie de Facebook de biólogos, donde cualquiera sube dónde vio qué especie) y meterlos directo en el modelo. La mitad de esos puntos terminaron flotando en pleno Pacífico, como si el árbol se hubiese ido de vacaciones al mar. No es que GBIF esté mal armado: son errores humanos acumulados, alguien que anotó la latitud donde iba la longitud, alguien que redondeó una coordenada hasta dejarla justo en el centro de una plaza donde no crece nada nativo.

Un tutorial ya me había advertido que revisara dos veces el orden de las columnas antes de importar el CSV, y aun así, una tarde de bastante lluvia, las invertí de todos modos y me quedé un buen rato preguntándome por qué el modelo no arrojaba nada. Aprendí, a la mala, que todo tiene que estar en el mismo sistema de coordenadas (WGS84 es el nombre técnico, para quien lo busque después), porque si no R no te avisa con ningún cartel rojo: simplemente te entrega un mapa sin sentido. No soy programadora ni geógrafa, apenas alguien que va aprendiendo esto los sábados, así que cada uno de estos golpes se sintió más grande de lo que probablemente era.
Limpieza de datos en R espacial: por qué no borro todos los duplicados del mismo píxel
Superados los puntos en el mar, aparecen errores más finos. Registros con coordenadas muy redondeadas que caen todos amontonados en el mismo píxel, por ejemplo, y ahí es donde entra la limpieza espacial de verdad. Me puse a estudiar Teledetección Satelital con R y R-Studio porque me di cuenta de que si no entendía la lógica de los objetos espaciales, iba a seguir copiando código de foros sin entender nada de lo que hacía. Ahí fue cuando los paquetes dismo y sp se volvieron mis herramientas de cabecera para filtrar duplicados, aunque cuál paquete es realmente el más adecuado para cada caso es una pregunta que da para su propio texto.

La mayoría de los manuales dice algo así: si tienes cinco puntos en el mismo píxel, borra cuatro y deja uno, para evitar la autocorrelación espacial (el modelo obsesionándose con un solo lugar). Ahí tengo una opinión distinta. Si borro todo lo que está apretado en un mismo sector, pierdo la intensidad real de la distribución: si hay mucha densidad de la especie en un bosque, ¿por qué esconderle eso al modelo? Sospecho que borrar todos los duplicados dentro de un mismo píxel a veces le quita al algoritmo justo la información que necesita para entender dónde la especie es realmente exitosa, no solo dónde aparece de pasada.
Las bandas de Sentinel-2 casi tumban la RAM de mi laptop
Para la cuarta semana, ya podía abrir las bandas de una imagen Sentinel-2 directo en RStudio y quedarme trabajando ahí sin que el programa se cerrara solo ni tuviera que reiniciar el computador entero — antes, eso pasaba casi cada vez que lo intentaba. Esas bandas después alimentan índices como el NDVI, y hay como media docena de índices parecidos (NDWI, EVI, y otros con siglas que todavía no domino) con su propio glosario aparte. Los errores de memoria que me tiraba RStudio cada vez que cargaba un raster pesado —esos mensajes de "memory allocation" que no dicen nada útil— tienen su propia solución, que fui aprendiendo por separado a fuerza de que se me colgara el programa un rato largo.
No te obsesiones con el número de puntos de fondo
Una vez que los puntos están limpios (sin ceros, sin NA, sin nada flotando en el mar), viene el trabajo con las variables ambientales, que suelen ser las capas bioclimáticas de WorldClim. Escribí sobre cómo preparar variables bioclimáticas para Maxent en R sin fallos de proyección hace un tiempo, así que no voy a repetirlo aquí. Maxent es un algoritmo de presencia-fondo: sabe dónde viste la especie, pero no dónde con certeza no está, y para compensar genera un montón de puntos de fondo que representan el paisaje general. Cómo funciona el modelo por dentro, con sus curvas de respuesta y sus parámetros, es tema para un texto propio; a mí lo que me quitaba el sueño era la calidad de lo que le daba de comer, no el motor en sí. Si estás recién empezando y todo esto suena a chino, el curso de Modelado de Nicho Ecológico con Maxent en R es más corto y va directo a este tema puntual, aunque no entra tanto en la parte satelital como el otro que mencioné.

El mapa por fin calzó con la bahía que veo camino a Corral
Un sábado, después de dejar los datos realmente limpios, el modelo por fin generó un mapa de idoneidad decente: un mapa de calor con amarillos y rojos donde es más probable que el Roble crezca. Las manchas más rojas calzaban casi exactas con la ladera que se ve cuando el camino se abre hacia Corral y aparece la bahía de Valdivia al fondo. Le mandé captura a Denise Alarcón, un contacto de un foro de R, apenas vi el resultado — ella es de las pocas personas que conozco capaz de compartir sus propios errores en pantalla sin ningún filtro, así que sabía que iba a entender la alegría un poco tonta que me dio ver que el computador por fin entendía el paisaje como yo lo siento caminando por ahí. Esos mismos puntos limpios, dicho sea de paso, son los que después uno usa para sacarle el valor a cada raster de clima punto por punto, aunque ese truco de extracción también da para su propia entrada aparte. Terminé creando mapas de idoneidad de hábitat en R para especies locales que por fin tenían sentido biológico, y de ahí saqué lo que aprendí usando Maxent en R para modelar especies: que la herramienta responde exactamente tan bien como los datos que le entregas, ni un poco más.

Lo que todavía no he tocado: nubes, clasificaciones y series de tiempo
Quedan varias cosas pendientes en mi lista, para que quede claro que esto no se acaba con un mapa bonito. No he llegado todavía a quitarle las nubes a una imagen satelital paso a paso, ni a clasificar coberturas vegetales completas, ni a validar esa clasificación con una matriz de confusión, ni a armar una serie de tiempo para ver cómo cambia el bosque año a año, ni a recortar un raster grande al tamaño exacto de un shapefile de la zona que me interesa. Un raster, para quien nunca lo ha visto en pantalla, es básicamente una imagen cuadriculada donde cada casillero guarda un dato de clima o vegetación, aunque ahí hay mucha más letra chica de la que puedo meter en un solo párrafo. Ese mapa final tampoco quedó bonito en la primera versión — dejarlo presentable para mostrárselo a alguien es su propio aprendizaje aparte, que fui masticando por separado.
Si te estás trabando con puntos duplicados o coordenadas que te mandan al mar, no es que hagas algo mal: es parte del proceso. Lo único que realmente cambió mis resultados fue meterle ojo al mapa antes de correr cualquier modelo — plotear los puntos crudos sobre un mapa base simple y mirar, uno por uno si hace falta, cuáles no tienen ningún sentido geográfico. Esa costumbre, más que cualquier ajuste fino del algoritmo, es la que me ahorró más tardes perdidas. Si quieres una guía más estructurada para no dar tantas vueltas como di yo, el curso de Teledetección Satelital con R y R-Studio te da esa base para dejar de pelear con las proyecciones y empezar a disfrutar lo que el mapa te cuenta del bosque.