Módulo 5·Suavizamiento no paramétrico con regresión local

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.

Principio de LOESSParámetro span (α)Kernel tricúbicoDescomposición STLEstacionalidad cambiante

¿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 TtT_t ajustando un polinomio local en cada punto del tiempo, usando únicamente las observaciones vecinas dentro de una ventana.

La idea central

Para estimar Tt0T_{t_0} en el punto t0t_0:

  • Se selecciona una fracción α\alpha (span) de los datos más cercanos a t0t_0.
  • Se calculan pesos para cada observación mediante el kernel tricúbico. Definiendo la distancia relativa ut=(t−t0) / d(t0)u_t = (t - t_0)\,/\,d(t_0), donde d(t0)d(t_0) es la distancia euclidiana al ⌈αn⌉\lceil \alpha n \rceil-ésimo vecino más cercano de t0t_0, los pesos son:

w(ut)=(1−∣ut∣3)3⋅1 ⁣[∣ut∣<1]w(u_t) = \bigl(1 - |u_t|^3\bigr)^3 \cdot \mathbf{1}\!\left[|u_t| < 1\right]

El kernel garantiza w=1w = 1 en t=t0t = t_0, decaimiento suave hasta w=0w = 0 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 t0t_0:

β^(t0)=arg⁡min⁡β∑t=1nw(ut)(Yt−∑j=0dβj tj) ⁣2\hat{\boldsymbol{\beta}}(t_0) = \arg\min_{\boldsymbol{\beta}} \sum_{t=1}^{n} w(u_t)\left(Y_t - \sum_{j=0}^{d} \beta_j\, t^j\right)^{\!2}

con d∈{1,2}d \in \{1, 2\} (parámetro degree en R).

  • T^t0=β^0(t0)\hat{T}_{t_0} = \hat{\beta}_0(t_0) — el valor ajustado del polinomio local evaluado en el punto t0t_0 mismo. El proceso se repite para cada t0∈{1,…,n}t_0 \in \{1, \ldots, n\}.

El parámetro span (α)

El parámetro α∈(0,1]\alpha \in (0, 1] 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).

▶ LOESS sobre AirPassengers — efecto del span

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:

Yt=Tt+St+RtY_t = T_t + S_t + R_t

donde TtT_t es la tendencia estimada por LOESS de largo plazo, StS_t es la componente estacional (periódica con periodo ss, con restricción ∑j=1sSt−s+j=0\sum_{j=1}^s S_{t-s+j} = 0 en cada ciclo completo para garantizar identificabilidad) y Rt=Yt−Tt−StR_t = Y_t - T_t - S_t es el residuo o componente irregular.

Algoritmo de STL (versión simplificada)

  1. Inicializar: se parte de una tendencia inicial (media móvil centrada de orden ss).
  2. Loop interno (inner loop):
    • Remover la tendencia: Yt−TtY_t - T_t.
    • Para cada estación ii, 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: Yt−StY_t - S_t y suavizar con LOESS de largo plazo (ventana t.window) para obtener TtT_t actualizada.
  3. Loop externo (outer loop): calcula pesos robustos basados en los residuos para reducir la influencia de valores atípicos.
  4. 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 FsF_s y la fuerza de tendencia FtF_t: miden qué fracción de la varianza total explica cada componente.

¿Qué significan Fs y Ft?

Fs>0.64F_s > 0.64 indica estacionalidad fuerte. Para co2, esperamos Fs≈0.99F_s \approx 0.99 y Ft≈0.99F_t \approx 0.99: la serie está casi completamente dominada por tendencia y estacionalidad, con muy poco ruido. Ese es un resultado ideal.

Cuando FsF_s es bajo (por ejemplo, 0.3), la componente estacional es débil relativa al ruido —quizás no vale la pena modelarla. Cuando FtF_t es bajo, la tendencia es débil o inexistente. Estos indicadores guían la selección de componentes.

▶ STL sobre co2 — estacionalidad fija vs evolutiva

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.

▶ STL sobre AirPassengers — estacionalidad fija vs evolutiva

Para AirPassengers, la estacionalidad evolutiva (rojo) captura el crecimiento gradual de la amplitud estacional, algo que el modelo fijo no puede hacer.

▶ Pronóstico post-STL con stlf() — AirPassengers

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.

LOESS: efecto del parámetro span

tDatosLOESS α=0.2LOESS α=0.8Tendencia real

Figura 5.1 — Un span pequeño sobreajusta (rojo), un span mayor suaviza apropiadamente (azul).