Time Series Analyzer: Análisis multitemporal de índices espectrales en Google Earth Engine

He desarrollado una aplicación interactiva en Google Earth Engine para la extracción y análisis estadístico automático de series temporales de cinco índices espectrales (NDVI, EVI, SAVI, NDWI y NBR) sobre cualquier geometría definida por el usuario en cualquier sitio del mundo. El objetivo es pasar de una imagen satélite puntual a una comprensión temporal del territorio: qué ha pasado, qué patrón subyace, y qué cabe esperar.

Imagen 1 – Time Series analyzer, the interface

La app está escrita íntegramente en JavaScript usando la GEE UI API, sin dependencias externas. El procesamiento corre en la nube de GEE sobre las colecciones oficiales de Landsat (L5/L7/L8/L9, Collection 2 SR, desde 1984) y Sentinel-2 SR Harmonized (desde 2017). El cálculo de la ACF se realiza en el cliente una vez extraída la serie como FeatureCollection. La interfaz se organiza en tres paneles: controles a la izquierda (selección del índice, plataforma, fechas, nubosidad límite), mapa y serie temporal en el centro, y análisis estadístico a la derecha con sistema de pestañas para separar gráfico, resultado e interpretación. Aquí abajo puedes acceder a la aplicación:

https://analysis202601.projects.earthengine.app/view/timeseriesanalyzer

Imagen 2 – the original index data over the selected dates

Metodología

El flujo parte del filtrado de imágenes por fecha, geometría y porcentaje de nubosidad máximo, con enmascarado de nubes por QA_PIXEL (Landsat) o QA60 (Sentinel-2). Sobre esa colección se calculan los índices espectrales aplicando los factores de escala de Collection 2 sobre reflectancia de superficie. Los cinco índices disponibles son NDVI, EVI, SAVI, NDWI y NBR, cada uno orientado a una pregunta diferente sobre la cobertura: estado general de la vegetación, respuesta en zonas densas, corrección del efecto suelo, contenido hídrico o severidad de incendios.

La serie temporal resultante se analiza estadísticamente mediante cuatro módulos. El más relevante metodológicamente es la función de autocorrelación (ACF), que mide la correlación de la serie consigo misma en distintos desfases temporales. Un pico significativo en lag 1 indica que la vegetación tiene inercia: lo que ocurre hoy predice lo que ocurrirá en la siguiente adquisición. Un pico en lag 6 o lag 23 —dependiendo de la cadencia del satélite— revela un ciclo semestral o anual. El umbral de significancia se calcula según el criterio de Bartlett al 95% (±1.96/√n), lo que permite distinguir entre estructura real y ruido estadístico.

Imagen 3 – Función de Autocorrelación y sus intervalos de confianza

La interpretación de la ACF se estructura automáticamente en cuatro bloques: memoria a corto plazo, ciclo estacional con estimación del período en meses, longitud de memoria total y recomendación de modelo. Si la autocorrelación permanece significativa hasta lags altos, la serie tiene memoria larga y probablemente una tendencia no estacionaria que requiere diferenciación antes de modelar. Si hay un pico estacional claro, la estructura es compatible con un modelo SARIMA(p,d,q)(P,D,Q)[s] donde s es el período detectado. La app complementa esto con un análisis de tendencia lineal que aporta la pendiente y el R², y una curva suavizada que permite comparar la amplitud del ciclo estacional entre años.

Imagen 4 – Tendencias lineales

Comprensión de patrones y proyección

Lo que hace útil el análisis temporal no es la fotografía de un año sino la estructura que emerge a lo largo de varios ciclos. La ACF permite responder preguntas concretas: ¿es el ciclo estacional de este pastizal estable año a año o su amplitud está decreciendo? ¿La caída de NDVI en 2022 fue un evento puntual o marcó un cambio de régimen? ¿Cuántos meses tarda la vegetación en recuperar sus valores tras un incendio?

Identificada la estructura temporal, el paso natural será el modelado predictivo (para un próximo post si me lo pedís:-)). Una serie con estacionalidad anual clara y memoria moderada es directamente modelable con SARIMA, cuyo ajuste óptimo puede automatizarse con auto.arima() en R o SARIMAX en Python sobre el CSV exportado por la app. El modelo resultante permite proyectar valores futuros del índice, construir intervalos de confianza estacionales y detectar anomalías como desviaciones significativas respecto al patrón esperado, lo que equivale a una señal de alerta temprana ante degradación, sequía o cambio de uso del suelo.

Imagen 5 – Distribución de los datos

Aplicaciones

La combinación de Landsat desde 1984 con series temporales largas abre un abanico amplio de usos. En el contexto de pastizales y agricultura, permite cuantificar la respuesta de la cobertura vegetal a años secos o húmedos y comparar la dinámica entre parcelas con distinto manejo. En el ámbito forestal, la caracterización fenológica mediante el ciclo anual del NDVI o EVI permite detectar adelantos o retrasos en la brotación asociados a cambios climáticos. Con NBR, el seguimiento post-incendio revela tanto la severidad inicial como la trayectoria de recuperación. En zonas de expansión urbana, la tendencia negativa sostenida en NDVI a lo largo de décadas es un indicador directo de sellado del suelo y pérdida de cobertura vegetal.

En investigación, la exportación CSV permite integrar los resultados en flujos de trabajo más complejos: correlación con datos meteorológicos, validación con trabajo de campo o calibración de modelos de simulación de ecosistemas. En docencia, la app funciona como entorno de demostración interactivo para explicar autocorrelación, estacionalidad y modelado de series temporales sobre datos reales sin necesidad de instalar nada.

Aquí va el resultado del análisis de autocorrelation en una zona muy cercana a Zaragoza, España, usando Landsat, un periodo que comprendía los tres últimos años.

Imagen 6 – Análisis extra cerca de Ejea de los Caballeros en Zaragoza, España
Imagen 7 – Función de Autocorrelación y sus intervalos de confianza

WHAT THIS ANALYSIS DOES

The ACF measures how similar the series is to a time-shifted version of itself. Each bar is a lag: lag 1 = correlation between observation i and the next; lag 2 = two steps back, etc. Dashed lines mark the 95% significance threshold (±1.96/√n). Bars exceeding that threshold indicate a real pattern, not noise.

AUTOMATIC RESULT

1. SHORT-TERM MEMORY (lag 1 = 0.89) ► Significant (very strong). Consecutive values are correlated. A high index today predicts a high index in the next image.

2. SEASONAL CYCLE (strongest lag = 2, r = 0.75) ► Significant peak → clear periodicity detected. Landsat 8-9 cadence: cycle = 8-16 days. Sentinel cadence: cycle = 3-5 days. This is consistent with a short intra-seasonal fluctuation.

3. MEMORY LENGTH (last significant lag = 24) ► Long memory — ACF remains significant up to lag 24. This suggests a non-stationary trend in the data. Recommendation: apply first-order differencing before fitting ARIMA/SARIMA.

4. MODEL SUGGESTION ► Non-stationary series. Difference first, then fit ARIMA(p,1,q).

READING GUIDE

Reading guide: → High lag 1 (>0.5): vegetation has strong “memory”, changes slowly. → Peak at lag 6 or 12 (~16-day data): semi-annual or annual cycle — typical grassland seasonality. → ACF that decays slowly into a “tail”: possible non-stationary trend in the series. → ACF oscillating between positive and negative: clear cyclic pattern, ideal for SARIMA modeling. → All bars within the lines: series with no temporal structure — possibly noise or heterogeneous geometry.

Espero que os haya resultado interesante,

Alberto Concejal
https://geovisualization.net/

Leave a comment