Modelo autorregresivo de media móvil (ARMA)

El modelo ARMA(\(p,q\)) combina \(p\) términos autorregresivos y \(q\) términos de media móvil en un único marco. Es más parsimonioso que usar un modelo AR o MA puro por separado: muchos procesos que requieren un AR o MA de orden elevado pueden representarse exacta o aproximadamente mediante un ARMA de orden bajo. Solo se aplica a series estacionarias.

Definición

\[y_t = \phi_1 y_{t-1} + \cdots + \phi_p y_{t-p} + \varepsilon_t + \theta_1 \varepsilon_{t-1} + \cdots + \theta_q \varepsilon_{t-q}\]

En notación con operador de retardo:

\[\Phi(L)\,y_t = \Theta(L)\,\varepsilon_t\]

\[\Phi(L) = 1 - \phi_1 L - \cdots - \phi_p L^p, \qquad \Theta(L) = 1 + \theta_1 L + \cdots + \theta_q L^q\]

El polinomio AR \(\Phi(L)\) actúa sobre \(y_t\); el polinomio MA \(\Theta(L)\) actúa sobre \(\varepsilon_t\).

Estacionariedad e invertibilidad

Un ARMA(\(p,q\)) es:

  • Estacionario si todas las raíces de \(\Phi(z) = 0\) están fuera del círculo unitario (misma condición que el AR(\(p\)) puro).
  • Invertible si todas las raíces de \(\Theta(z) = 0\) están fuera del círculo unitario (misma condición que el MA(\(q\)) puro).
  • Identificable: no deben existir raíces comunes entre \(\Phi(z)\) y \(\Theta(z)\) (sin cancelaciones). Si una raíz es compartida, el orden efectivo es menor y el modelo está sobreparametrizado.

⚠️ Cancelación de factores comunes: la trampa de la redundancia paramétrica

Si \(\Phi(z)\) y \(\Theta(z)\) comparten una raíz común, el modelo verdadero es de orden inferior. Por ejemplo, ARMA(2,1) con \(\phi_1 = 0{,}9\), \(\phi_2 = -0{,}2\), \(\theta_1 = 0{,}4\): si \(z = 0{,}5\) es raíz de ambos polinomios, el modelo se reduce en realidad a ARMA(1,0). Ajustar el modelo sobreparametrizado produce errores estándar grandes e inestabilidad.

Síntoma: si los coeficientes \(\phi\) y \(\theta\) ajustados son de magnitud similar con signos opuestos en el mismo retardo, sospecha de cancelación. Compruébalo calculando las raíces de ambos polinomios.

Por qué ARMA es más parsimonioso

Por el teorema de descomposición de Wold, cualquier proceso estacionario puede representarse como MA(\(\infty\)). Un ARMA(\(p,q\)) proporciona una aproximación racional usando solo \(p+q\) parámetros en lugar de infinitos.

Un ejemplo clásico: la representación MA(\(\infty\)) de un AR(1) es:

\[y_t = \varepsilon_t + \phi\varepsilon_{t-1} + \phi^2\varepsilon_{t-2} + \cdots\]

que requiere infinitos parámetros MA. El ARMA(1,0) captura esto con un único parámetro \(\phi\).

A la inversa, algunos procesos que parecen AR o MA de orden elevado al examinar la ACF/PACF pueden representarse exactamente mediante un ARMA de orden bajo. Esta es la motivación principal para usar ARMA frente a AR o MA puros.

Serie simulada ARMA(1,1) con su ACF y PACF mostrando ambas atenuándose

Tanto la ACF como la PACF se atenúan gradualmente, confirmando la estructura ARMA. Ninguna se corta bruscamente, razón por la que identificar solo AR o MA requeriría órdenes elevados.

Selección del orden: AIC y BIC

Para ARMA(\(p,q\)), la identificación por ACF/PACF es menos clara que para AR o MA puros. El enfoque estándar consiste en ajustar varios modelos candidatos y comparar por:

\[\text{AIC} = -2\log\hat{L} + 2(p+q+1), \qquad \text{BIC} = -2\log\hat{L} + \log(T)(p+q+1)\]

Mapa de calor de valores AIC para modelos ARMA de distintos órdenes que muestra el mejor modelo

El mapa de calor muestra el AIC en una cuadrícula de órdenes AR y MA. Un AIC menor (azul más oscuro) indica mejor ajuste penalizado por complejidad. El borde rojo marca el mejor modelo. Los modelos de orden alto en la esquina superior derecha muestran peor AIC a pesar de tener más parámetros.

Ejemplo: ARMA(1,1) para ventas mensuales

Los datos de ventas mensuales suelen mostrar tanto persistencia (componente AR) como corrección tras errores de predicción (componente MA). Un ARMA(1,1) captura ambos con solo dos parámetros.

ARMA(1,1) ajustado a datos de ventas mensuales simulados con verificación de la ACF de los residuos

La ACF de los residuos no muestra picos significativos: el ARMA(1,1) ha capturado la estructura de autocorrelación. Confirma con el test de Ljung-Box: Box.test(residuals(fit), lag = 20, type = "Ljung-Box", fitdf = 2).

💡 Ajustar modelos ARMA en R

# Ajustar ARMA(1,1)
fit <- arima(y, order = c(1, 0, 1))
summary(fit)

# Selección automática por AIC
library(forecast)
auto.arima(y, d = 0, max.p = 4, max.q = 4, stationary = TRUE)

# Verificar residuos
checkresiduals(fit)   # representa residuos, ACF y p-valor de Ljung-Box