Modelo SARIMA

SARIMA extiende ARIMA con operadores AR, de diferenciación y MA estacionales que capturan patrones que se repiten cada \(s\) periodos. Es el modelo estándar para datos mensuales, trimestrales o diarios con ciclos estacionales regulares como ventas minoristas, demanda energética o turismo.

Definición

Un modelo SARIMA(\(p,d,q\))(\(P,D,Q\))\(_s\) se escribe de forma compacta como:

\[\Phi_P(L^s)\,\phi_p(L)\,(1-L^s)^D(1-L)^d\,y_t = \Theta_Q(L^s)\,\theta_q(L)\,\varepsilon_t\]

donde:

  • \((p,d,q)\): orden AR no estacional, diferenciación, orden MA no estacional.
  • \((P,D,Q)\): orden AR estacional, diferenciación estacional, orden MA estacional.
  • \(s\): longitud de la estación (12 para datos mensuales, 4 para trimestrales, 7 para datos diarios con ciclo semanal).
  • \(\phi_p(L) = 1 - \phi_1 L - \cdots - \phi_p L^p\): polinomio AR no estacional.
  • \(\Phi_P(L^s) = 1 - \Phi_1 L^s - \cdots - \Phi_P L^{Ps}\): polinomio AR estacional.
  • \(\theta_q(L)\), \(\Theta_Q(L^s)\): polinomios MA correspondientes.
  • \((1-L)^d\): diferenciación no estacional; \((1-L^s)^D\): diferenciación estacional.

El operador de diferenciación estacional elimina una tendencia estacional estocástica:

\[(1-L^{12})y_t = y_t - y_{t-12}\]

Para datos mensuales, esto calcula el cambio interanual, eliminando el patrón estacional.

Identificación de los órdenes estacionales a partir de ACF y PACF

La estructura estacional aparece como picos en los múltiplos de \(s\) en la ACF y la PACF. Las reglas de identificación son las mismas que para el caso no estacional, pero aplicadas a los retardos estacionales:

Patrón estacional ACF en retardos \(s, 2s, 3s, \ldots\) PACF en retardos \(s, 2s, 3s, \ldots\)
SAR(\(P\)) Se atenúa Se corta tras el retardo \(Ps\)
SMA(\(Q\)) Se corta tras el retardo \(Qs\) Se atenúa
SARMA Ambas se atenúan Ambas se atenúan

ACF y PACF de la serie logarítmica de pasajeros aéreos diferenciada estacional y regularmente mostrando picos estacionales

Las líneas de puntos naranjas marcan los retardos estacionales (12, 24, 36). El pico significativo en el retardo 12 de la ACF (pero no en el 24) sugiere SMA(1). El pico en el retardo 12 de la PACF sugiere SAR(1). Combinado con la estructura no estacional, esto apunta a SARIMA(0,1,1)(0,1,1)\(_{12}\) o SARIMA(0,1,1)(1,1,0)\(_{12}\).

El modelo airline: SARIMA(0,1,1)(0,1,1)\(_{12}\)

El modelo SARIMA más famoso, propuesto por Box y Jenkins para los datos de pasajeros aéreos:

\[\Delta\Delta_{12}\log y_t = (1 + \theta L)(1 + \Theta L^{12})\varepsilon_t\]

Expandido:

\[\Delta\Delta_{12}\log y_t = \varepsilon_t + \theta\varepsilon_{t-1} + \Theta\varepsilon_{t-12} + \theta\Theta\varepsilon_{t-13}\]

Solo dos parámetros (\(\theta\) y \(\Theta\)) capturan tanto la dinámica a corto plazo como el patrón estacional. La transformación logarítmica estabiliza la varianza creciente; la diferenciación regular elimina la tendencia; la diferenciación estacional elimina la tendencia estacional.

SARIMA(0,1,1)(0,1,1)[12] ajustado a los datos de pasajeros aéreos con predicción a 24 meses que preserva el patrón estacional

La predicción (rojo) preserva el patrón estacional y la tendencia ascendente, con intervalos de predicción que se ensanchan apropiadamente.

Diagnóstico de residuos

ACF de los residuos del modelo SARIMA de pasajeros aéreos mostrando ruido blanco sin estructura estacional remanente

No hay picos significativos en ningún retardo, incluidos los estacionales 12 y 24. El modelo ha capturado toda la estructura de autocorrelación.

⚠️ La sobrediferenciación estacional infla la varianza de la predicción

Aplicar \(D = 1\) cuando \(D = 0\) es suficiente introduce una raíz unitaria en el MA estacional, haciendo el modelo no invertible y produciendo predicciones con varianza explosiva. Señales: la ACF de la serie diferenciada estacionalmente comienza con un valor negativo grande en el retardo \(s\).

Un error frecuente con datos mensuales: aplicar tanto \(D = 1\) (estacional) como \(d = 2\) (no estacional) cuando \(d = 1, D = 1\) es suficiente. Usa forecast::nsdiffs(y) para determinar \(D\) y forecast::ndiffs(diff(y, 12)) para determinar \(d\) tras la diferenciación estacional.

💡 SARIMA en R

# Ajustar SARIMA(0,1,1)(0,1,1)[12] manualmente
arima(log(y), order = c(0,1,1),
      seasonal = list(order = c(0,1,1), period = 12))

# Selección automática de SARIMA
library(forecast)
auto.arima(y, seasonal = TRUE)   # busca también órdenes estacionales (por defecto)

# Determinar los órdenes de diferenciación
nsdiffs(y)             # número de diferencias estacionales necesarias
ndiffs(diff(y, 12))   # diferencias no estacionales tras la diferenciación estacional

# Predicción y representación
fc <- forecast(fit, h = 24)
autoplot(fc)