Ajustes Locales: LOESS y STL
Regresión local ponderada (LOESS) como alternativa flexible a los polinomios globales. Descomposición STL para capturar estacionalidad que evoluciona en el tiempo.
¿Cuándo los modelos globales no son suficientes?
Los modelos de los módulos anteriores asumen que la tendencia tiene una forma fija (lineal, cuadrática) durante todo el período de observación. Eso funciona bien cuando la dinámica es estable. Pero ¿qué pasa si la tendencia cambia de forma en distintos tramos? ¿O si la amplitud estacional no es constante sino que evoluciona a lo largo de los años?
Para esos casos existen los métodos de ajuste local: en lugar de ajustar un único modelo global, se ajusta un modelo diferente en cada región del tiempo, usando solo las observaciones más cercanas. LOESS y STL son los dos métodos estándar para esto.
Nota: estos métodos son excelentes para análisis exploratorio y para datos con patrones cambiantes, pero tienen una limitación: no producen una ecuación cerrada, lo que complica la interpretación y el pronóstico.
5.1 LOESS — Regresión Localmente Estimada
LOESS (Locally Estimated Scatterplot Smoothing) es un método no paramétrico que estima la tendencia ajustando un polinomio local en cada punto del tiempo, usando únicamente las observaciones vecinas dentro de una ventana.
La idea central
Para estimar en el punto :
- Se selecciona una fracción (span) de los datos más cercanos a .
- Se calculan pesos para cada observación mediante el kernel tricúbico. Definiendo la distancia relativa , donde es la distancia euclidiana al -ésimo vecino más cercano de , los pesos son:
El kernel garantiza en , decaimiento suave hasta en el borde de la ventana, y peso nulo fuera de ella.
- Se minimiza la suma de cuadrados ponderada — es decir, se resuelve un problema de mínimos cuadrados ponderados (WLS) localmente en :
con (parámetro degree en R).
- — el valor ajustado del polinomio local evaluado en el punto mismo. El proceso se repite para cada .
El parámetro span (α)
El parámetro controla el suavizamiento:
α pequeño (ej. 0.2)
Curva muy flexible, sigue los datos de cerca. Riesgo de sobreajuste y capturar ruido.
α medio (ej. 0.5)
Balance entre sesgo y varianza. Punto de partida recomendado.
α grande (ej. 0.9)
Curva muy suave, cercana a una recta. Puede perder estructura real.
5.2 Ejemplo — LOESS sobre AirPassengers
Aplicamos LOESS a AirPassengers para estimar la tendencia de largo plazo, comparando distintos valores de span. Al trabajar con la serie completa (incluyendo estacionalidad), un span pequeño "sigue" también los picos estacionales — por eso se recomienda trabajar sobre la serie previamente suavizada o usar STL (sección 5.3).
Un span de 0.80 sobre AirPassengers revela la tendencia exponencial subyacente, ignorando el ruido estacional. El span de 0.20 sobreajusta y sigue los ciclos anuales.
5.3 Descomposición STL
STL (Seasonal-Trend decomposition using LOESS), propuesto por Cleveland et al. (1990), descompone la serie en tres componentes aditivas usando LOESS de forma iterativa:
donde es la tendencia estimada por LOESS de largo plazo, es la componente estacional (periódica con periodo , con restricción en cada ciclo completo para garantizar identificabilidad) y es el residuo o componente irregular.
Algoritmo de STL (versión simplificada)
- Inicializar: se parte de una tendencia inicial (media móvil centrada de orden ).
- Loop interno (inner loop):
- Remover la tendencia: .
- Para cada estación , agrupar las observaciones de la misma estación a lo largo de los años y suavizarlas con LOESS (ventana
s.window). - Normalizar la estacionalidad para que sume cero en cada periodo.
- Remover la estacionalidad: y suavizar con LOESS de largo plazo (ventana
t.window) para obtener actualizada.
- Loop externo (outer loop): calcula pesos robustos basados en los residuos para reducir la influencia de valores atípicos.
- Repetir hasta convergencia.
Ventanas clave de STL — guía práctica
s.window: controla la suavidad de la estacionalidad."periodic"fija el patrón estacional igual cada año —idóneo cuando la estacionalidad es estable. Valores numéricos impares (ej. 7, 11, 13) permiten que evolucione: un valor pequeño da más flexibilidad.t.window: controla la suavidad de la tendencia. Un valor mayor produce una tendencia más suave. Por defecto se calcula automáticamente.robust = TRUE: activa el loop externo para resistencia a atípicos. Úsalo siempre que la serie tenga valores extremos o cambios de nivel abruptos.
Punto de partida recomendado: stl(yt, s.window="periodic", robust=TRUE). Si el panel estacional muestra variación creciente, prueba con s.window=7 u 11.
5.4 Ejemplo — STL sobre co2 (Mauna Loa)
El dataset co2 es ideal para STL: tiene una tendencia creciente y un patrón estacional anual muy regular. STL separa ambas con precisión, dejando un residuo muy pequeño. El código también calcula la fuerza estacional y la fuerza de tendencia : miden qué fracción de la varianza total explica cada componente.
¿Qué significan Fs y Ft?
indica estacionalidad fuerte. Para co2, esperamos y : la serie está casi completamente dominada por tendencia y estacionalidad, con muy poco ruido. Ese es un resultado ideal.
Cuando es bajo (por ejemplo, 0.3), la componente estacional es débil relativa al ruido —quizás no vale la pena modelarla. Cuando es bajo, la tendencia es débil o inexistente. Estos indicadores guían la selección de componentes.
El residuo de STL para co2 es muy pequeño (~0.5 ppm), confirmando que tendencia + estacionalidad explican casi toda la variación. Ft y Fs cercanos a 1 indican ambas componentes fuertes.
Para AirPassengers, la estacionalidad evolutiva (rojo) captura el crecimiento gradual de la amplitud estacional, algo que el modelo fijo no puede hacer.
stlf() es conveniente porque combina STL + un modelo automático para el residuo. El resultado incluye bandas de incertidumbre que se amplían con el horizonte.
5.5 Comparación: modelos globales vs ajustes locales
| Criterio | Modelos globales (Mód. 2–4) | LOESS / STL | |---|---|---| | Interpretabilidad | Alta — coeficientes con significado | Baja — sin ecuación cerrada | | Flexibilidad | Limitada por el grado elegido | Alta — se adapta a cambios locales | | Estacionalidad cambiante | No captura cambios | Sí (con s.window numérico) | | Pronóstico | Directo (ecuación) | Requiere método adicional (ETS/ARIMA) | | Sensibilidad a atípicos | Moderada | Robusta (con outer loop) | | Uso recomendado | Estacionalidad estable, interpretación | Análisis exploratorio, estacionalidad cambiante |
Uso combinado — práctica recomendada
Una estrategia efectiva es ajustar primero un modelo global (tendencia + estacionalidad con indicadoras) y luego aplicar LOESS a los residuos para capturar ciclos no modelados. También se puede usar STL como paso exploratorio previo para identificar qué componentes son relevantes antes de especificar el modelo paramétrico.
Figura 5.1 — Un span pequeño sobreajusta (rojo), un span mayor suaviza apropiadamente (azul).