Visualizar series temporales de satélite en R para cambios forestales

Afuera la lluvia no para, es ese sonido rítmico contra el techo de zinc que ya es parte de mi música de fondo mientras trato de entender por qué mi mapa se ve tan raro. Tengo el termo de mate al lado y el reflejo de las líneas de código verde sobre el vidrio empañado de mi ventana me hace sentir un poco como en una película de hackers, aunque en realidad soy solo yo, con el ventilador de la laptop zumbando mientras procesa un raster pesado que parece que nunca va a terminar. Es una de esas noches de invierno en Valdivia donde el frío se cuela por las rendijas y la única forma de entrar en calor es peleando con RStudio hasta que algo, por fin, haga clic.

Llevo intentando esto por quinta vez. Lo que quiero es simple, o eso pensaba yo: ver cómo ha cambiado el verde del cerro que tengo al frente en los últimos años usando imágenes de satélite. Pero la consola de R me devuelve un error de dimensiones cada vez que intento crear un gráfico de serie temporal. Y entonces me quedo ahí, mirando el cursor parpadear, preguntándome en qué momento se me ocurrió que aprender teledetección por mi cuenta era una buena idea para los fines de semana.

El primer choque con la realidad de los píxeles

Cuando empecé con esto, pensaba que los satélites sacaban fotos, como las de mi celular pero desde más arriba. Qué inocente era. Resulta que lo que descargamos son datos, matrices gigantescas de números que representan cuánta luz rebota en las hojas o en la tierra. Durante una tarde de lluvia intensa el invierno pasado, me di cuenta de que mi mayor problema no era el código en sí, sino entender que estaba tratando de alinear cosas que no querían estar juntas.

Primer plano de pantalla con código R y una imagen satelital pixelada de un bosque.

Me pasaba que quería comparar una imagen de Landsat 8 con una más reciente, y los píxeles de 30 metros no querían coincidir entre años. Es frustrante porque tú ves la imagen y dices "pero si es el mismo bosque", pero para R, si un píxel está un milímetro corrido del otro, ya no puede hacer la resta. Aprendí a palos que la resolución espacial de Landsat 8/9 es de 30 metros, y que si quería algo más fino como las bandas visibles de Sentinel-2, que tienen 10 metros, tenía que ser súper cuidadosa con las proyecciones. Y bueno, hablando de proyecciones, ahí fue donde casi tiro la toalla.

Tuve una frustración horrible después de haber pasado unas tres horas procesando imágenes solo para descubrir que usé el sistema de coordenadas equivocado. Mi bosque, ese que veo todos los días, aparecía flotando en medio del océano Pacífico según el mapa. Fue un momento de "quiero apagar todo y dormir", pero después me reí sola. Resulta que para Chile central-sur, el código EPSG para WGS 84 / UTM zone 18S es el 32718, y si no le dices eso a R, él asume cualquier cosa. Si te pasa algo parecido, te recomiendo leer sobre cómo corregir proyecciones cartográficas en R de forma sencilla, porque de verdad te salva la vida y la salud mental.

Limpiando el ruido: El truco de las nubes

Después de unos tres meses de intentos, por fin logré que las imágenes se quedaran quietas en su lugar. Pero entonces apareció el enemigo número uno de los que vivimos en el sur: las nubes. Mis gráficos de series temporales parecían un electrocardiograma de alguien que se acaba de tomar cinco cafés; el verdor subía y bajaba de forma violenta. No era que el bosque estuviera muriendo y reviviendo cada semana, era que las nubes me estaban ensuciando los datos.

Comparación en pantalla entre una imagen satelital con nubes y un mapa NDVI limpio.

Ahí descubrí la bendita máscara de calidad (QA). Todos estos satélites traen una capa que te dice "aquí hay una nube" o "aquí hay sombra". Aprender a usar esa capa para limpiar mis datos fue como si alguien me hubiera limpiado los lentes empañados por la humedad de Valdivia. Pasé de tener un ruido caótico a ver una línea suave que empezaba a contar una historia coherente sobre el bosque. Fue en esos fines de semana de primavera cuando empecé a ver que el índice NDVI, que va de -1 a 1, realmente se mantenía estable cerca del 0.8 en las zonas de bosque nativo más cerradas.

Si estás empezando y te pierdes con los nombres de los índices, yo me hice un glosario de índices espectrales que siempre tengo a mano. Me sirve para no olvidar que el NDVI usa la banda roja y la infrarroja cercana para decirnos qué tan sana está la vegetación. Es matemático, sí, pero cuando lo ves en un gráfico, se siente como si estuvieras escuchando el pulso de la tierra.

Por qué las anomalías son más importantes que el valor crudo

Aquí es donde me puse un poco contraria a lo que dicen los tutoriales básicos. Casi siempre te enseñan a graficar la serie temporal completa y ya está. Pero yo me di cuenta, mirando mis datos una y otra vez, que visualizar series temporales completas suele ocultar la degradación sutil. El bosque nativo es resiliente y siempre se ve "verde" en el NDVI, incluso si le están pasando cosas malas por debajo.

Gráfico de serie temporal en R mostrando una caída brusca en el verdor de la vegetación.

Lo que me cambió la perspectiva fue dejar de mirar el valor crudo y empezar a analizar las anomalías estadísticas. En vez de decir "hoy el NDVI es 0.7", empecé a calcular cuánto se alejaba ese 0.7 del promedio histórico de ese mismo mes. Es un paso extra en R, usando funciones de resta sobre stacks de rasters, pero es donde aparece la verdad. Es como cuando conoces tanto a alguien que notas que está triste aunque te sonría; las anomalías te muestran esa tristeza del bosque que el gráfico normal ignora.

Usando este enfoque, una noche fría de junio, me llevé una sorpresa gigante. Estaba visualizando una caída abrupta en el verdor de un cerro cercano y me di cuenta de que los datos reflejaban exactamente el rastro de un pequeño incendio que recordaba de hace un par de veranos. Verlo ahí, en píxeles rojos en medio de un mar verde, me dio una sensación extraña de poder y responsabilidad. Los datos no mentían, estaban contando lo que yo ya había visto desde mi ventana, pero con una precisión que me dejó helada.

El camino de aprender sola (y por qué vale la pena)

No te voy a mentir, ha habido sábados en los que he querido borrar RStudio y dedicarme a tejer. Pero entonces me acuerdo de por qué elegí RStudio para estudiar el bosque nativo chileno y se me pasa. Hay algo muy empoderador en no depender de un software carísimo o de que alguien más te cuente qué está pasando con tu entorno. El programa Landsat, por ejemplo, es increíble porque tiene registros desde 1972; es como tener una máquina del tiempo en la computadora.

Mano sosteniendo una taza frente a un mapa satelital de bosques chilenos en RStudio.

Para visualizar estos cambios forestales, a veces me pierdo en los detalles técnicos, pero lo que de verdad importa es la persistencia. Si estás trabada con un cálculo de NDVI usando imágenes Sentinel, respira, prepárate un té y vuelve a mirar el código. A veces es solo un paréntesis mal cerrado o una coma que falta. A mí me pasa siempre.

Aprender R de forma autodidacta me ha permitido ver mi propio entorno con una profundidad que ningún mapa estático me había dado antes. Ya no miro el cerro y veo solo árboles; veo una serie temporal viva, veo ciclos de crecimiento, veo las cicatrices de las sequías y la alegría de los inviernos lluviosos. Al final del día, estos mapas son mi forma de conectarme con la tierra, incluso cuando el clima de Valdivia me obliga a quedarme adentro, pegada a la pantalla, esperando que el próximo raster termine de cargar.

Artículos relacionados