Módulo 11·Modelos estocásticos para series de tiempo

Procesos ARMA, SARIMA y Regresión con Errores ARMA

Procesos AR(p), MA(q), ARMA(p,q) y SARIMA(p,d,q)(P,D,Q). Identificación por Box-Jenkins (ACF, PACF, EACF), ajuste por máxima verosimilitud, diagnóstico de residuos y pronóstico. Regresión con errores ARMA (SARIMAX) como modelo unificador. Ejemplo completo: salario real colombiano.

Operador de retardo BProceso AR(p) y condición de estacionariedadProceso MA(q) y condición de invertibilidadProceso ARMA(p,q)Modelo SARIMA(p,d,q)(P,D,Q)[S]Regresión con errores ARMA (SARIMAX)Identificación Box-JenkinsPronóstico con SARIMA

SARIMAX: el modelo que engloba todos los anteriores

El modelo SARIMAX (p,d,q)(P,D,Q)S×X(p,d,q)(P,D,Q)_S \times \mathbf{X} es la generalización más amplia de la familia ARMA. Sus casos particulares son:

AR(p): (p,0,0)(0,0,0)(p,0,0)(0,0,0)
MA(q): (0,0,q)(0,0,0)(0,0,q)(0,0,0)
ARMA(p,q): (p,0,q)(0,0,0)(p,0,q)(0,0,0)
ARIMA(p,d,q): (p,d,q)(0,0,0)(p,d,q)(0,0,0)
SARMA: (p,0,q)(P,0,Q)S(p,0,q)(P,0,Q)_S
SARIMA: (p,d,q)(P,D,Q)S(p,d,q)(P,D,Q)_S

Al agregar regresores externos X\mathbf{X} (componente X de SARIMAX), se obtiene el modelo de regresión con errores SARIMA, que es el marco unificador del análisis de series de tiempo.

Definición formal de los procesos AR(p), MA(q), ARMA(p,q) y SARIMA(p,d,q)(P,D,Q). Identificación mediante ACF, PACF y EACF. Ajuste por máxima verosimilitud, diagnóstico de residuos y pronóstico. Regresión con errores ARMA: el modelo del salario real colombiano.

11.1 Notación con el operador de retardo B

El operador de retardo BB se define como:

B Yt=Yt−1,Bk Yt=Yt−kB \, Y_t = Y_{t-1}, \quad B^k \, Y_t = Y_{t-k}

Con esta notación, las operaciones fundamentales se escriben:

Diferencia regular

(1−B) Yt=Yt−Yt−1=∇Yt(1 - B) \, Y_t = Y_t - Y_{t-1} = \nabla Y_t

Diferencia estacional

(1−BS) Yt=Yt−Yt−S=∇SYt(1 - B^S) \, Y_t = Y_t - Y_{t-S} = \nabla_S Y_t

El polinomio autorregresivo de orden pp:

ϕ(B)=1−ϕ1B−ϕ2B2−⋯−ϕpBp\phi(B) = 1 - \phi_1 B - \phi_2 B^2 - \cdots - \phi_p B^p

El polinomio de media móvil de orden qq:

θ(B)=1+θ1B+θ2B2+⋯+θqBq\theta(B) = 1 + \theta_1 B + \theta_2 B^2 + \cdots + \theta_q B^q

Y los polinomios estacionales análogos:

Φ(BS)=1−Φ1BS−⋯−ΦPBPS\Phi(B^S) = 1 - \Phi_1 B^S - \cdots - \Phi_P B^{PS}

Θ(BS)=1+Θ1BS+⋯+ΘQBQS\Theta(B^S) = 1 + \Theta_1 B^S + \cdots + \Theta_Q B^{QS}

11.2 Proceso autorregresivo AR(p)

Un proceso AR(p) expresa YtY_t como una combinación lineal de sus pp valores pasados más un error:

Yt=ϕ1Yt−1+ϕ2Yt−2+⋯+ϕpYt−p+atY_t = \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + \cdots + \phi_p Y_{t-p} + a_t

En notación de operador:

ϕ(B) Yt=at\phi(B) \, Y_t = a_t

Condición de estacionariedad del AR(p)

El proceso AR(p) es estacionario en covarianza si y solo si todas las raíces del polinomio ϕ(z)=0\phi(z) = 0 están fuera del círculo unitario (módulo > 1):

∣zi∣>1para toda raıˊz zi de ϕ(z)=0|z_i| > 1 \quad \text{para toda raíz } z_i \text{ de } \phi(z) = 0

Caso particular: AR(1)

Yt=ϕ1Yt−1+atY_t = \phi_1 Y_{t-1} + a_t

La condición de estacionariedad es ∣ϕ1∣<1|\phi_1| < 1. Las propiedades clave son:

  • Media: E[Yt]=0E[Y_t] = 0 (o μ\mu si se incluye intercepto)
  • Varianza: γ(0)=σa2/(1−ϕ12)\gamma(0) = \sigma^2_a / (1 - \phi_1^2)
  • ACF: ρ(k)=ϕ1k\rho(k) = \phi_1^k (decae exponencialmente)
  • PACF: se corta en k=1k = 1 (ϕ(1)=ϕ1\phi(1) = \phi_1, ϕ(k)=0\phi(k) = 0 para k>1k > 1)

AR(1) con raíz unitaria

Si ϕ1=1\phi_1 = 1, el proceso es una caminata aleatoria (random walk): Yt=Yt−1+atY_t = Y_{t-1} + a_t. No es estacionario (la varianza crece con tt). Este es el caso d=1d = 1 en ARIMA: se necesita diferenciar.

▶ Ajuste AR(1) — serie simulada Z1t

Arima() del paquete forecast ajusta por máxima verosimilitud (method='ML'). coeftest() del paquete lmtest da los p-valores.

11.3 Proceso de media móvil MA(q)

Un proceso MA(q) expresa YtY_t como una combinación lineal de los qq errores pasados:

Yt=at+θ1at−1+θ2at−2+⋯+θqat−qY_t = a_t + \theta_1 a_{t-1} + \theta_2 a_{t-2} + \cdots + \theta_q a_{t-q}

En notación de operador:

Yt=θ(B) atY_t = \theta(B) \, a_t

Condición de invertibilidad del MA(q)

El proceso MA(q) es invertible si todas las raíces de θ(z)=0\theta(z) = 0 están fuera del círculo unitario. La invertibilidad garantiza que el proceso puede expresarse como un AR de orden infinito, lo que permite estimar los ata_t recursivamente a partir de observaciones.

Caso particular: MA(1)

Yt=at+θ1at−1Y_t = a_t + \theta_1 a_{t-1}

Propiedades:

  • Media: E[Yt]=0E[Y_t] = 0
  • Varianza: γ(0)=σa2(1+θ12)\gamma(0) = \sigma^2_a (1 + \theta_1^2)
  • ACF: ρ(1)=θ1/(1+θ12)\rho(1) = \theta_1 / (1 + \theta_1^2), ρ(k)=0\rho(k) = 0 para k>1k > 1 (se corta en 1)
  • PACF: decae exponencialmente (no se corta)
▶ Ajuste MA(1) — serie simulada Z4t

Para MA(1), el pronóstico converge rápidamente a la media (cero) porque los errores futuros no son observables.

11.4 Proceso ARMA(p,q)

El proceso ARMA(p,q) combina la estructura autorregresiva y de media móvil:

Yt=ϕ1Yt−1+⋯+ϕpYt−p+at+θ1at−1+⋯+θqat−qY_t = \phi_1 Y_{t-1} + \cdots + \phi_p Y_{t-p} + a_t + \theta_1 a_{t-1} + \cdots + \theta_q a_{t-q}

En notación compacta:

ϕ(B) Yt=θ(B) at\phi(B) \, Y_t = \theta(B) \, a_t

Ventajas del modelo ARMA

  • Parsimonia: un ARMA(1,1) con 2 parámetros puede modelar lo que un AR(p) o MA(q) necesitaría muchos más.
  • Flexibilidad: captura tanto la inercia (AR) como los choques persistentes (MA).
  • Estacionariedad: si d=0d = 0, el proceso es estacionario (raíces de ϕ(z)\phi(z) fuera del círculo unitario).

Identificación de órdenes (p,q)

El procedimiento de Box-Jenkins para identificar los órdenes (p,q)(p, q) es:

  1. Graficar la ACF y PACF muestrales.
  2. Identificar el patrón (corte vs. decaimiento).
  3. Confirmar con la EACF (función de autocorrelación extendida).
  4. Validar con auto.arima() por criterio AIC/BIC.
  5. Ajustar el modelo candidato y verificar residuos.
▶ Identificación y ajuste ARMA(1,2) — serie simulada Z3t

El procedimiento Box-Jenkins: identificar → estimar → diagnosticar. Si los residuos no son ruido blanco, iterar.

11.5 Modelo SARIMA(p,d,q)(P,D,Q)[S]

El modelo SARIMA extiende ARIMA incorporando estructura estacional. La especificación completa es:

ϕ(B) Φ(BS) (1−B)d (1−BS)D Yt=θ(B) Θ(BS) at\phi(B) \, \Phi(B^S) \, (1-B)^d \, (1-B^S)^D \, Y_t = \theta(B) \, \Theta(B^S) \, a_t

donde:

  • (p,d,q)(p, d, q): órdenes no estacionales (AR, diferenciación, MA)
  • (P,D,Q)(P, D, Q): órdenes estacionales
  • SS: período estacional (12 mensual, 4 trimestral, 52 semanal)
  • ϕ(B),θ(B)\phi(B), \theta(B): polinomios AR y MA no estacionales
  • Φ(BS),Θ(BS)\Phi(B^S), \Theta(B^S): polinomios AR y MA estacionales
  • (1−B)d(1-B)^d: diferencia regular de orden dd
  • (1−BS)D(1-B^S)^D: diferencia estacional de orden DD

Casos particulares de SARIMA

| Modelo | Especificación | Condición | |---|---|---| | AR(p) | (p,0,0)(0,0,0)(p,0,0)(0,0,0) | Sin MA, sin diferenciación, sin estacionalidad | | MA(q) | (0,0,q)(0,0,0)(0,0,q)(0,0,0) | Sin AR, sin diferenciación, sin estacionalidad | | ARMA(p,q) | (p,0,q)(0,0,0)(p,0,q)(0,0,0) | Estacionario, sin estacionalidad | | ARIMA(p,d,q) | (p,d,q)(0,0,0)(p,d,q)(0,0,0) | Con diferenciación, sin estacionalidad | | SARMA | (p,0,q)(P,0,Q)S(p,0,q)(P,0,Q)_S | Estacionario con estacionalidad | | SARIMA | (p,d,q)(P,D,Q)S(p,d,q)(P,D,Q)_S | Caso general |

Cuándo usar diferenciación estacional

La diferencia estacional (1−BS)D(1-B^S)^D es necesaria cuando la ACF tiene picos significativos en los rezagos múltiplos de SS (12, 24, 36, ...) que no decaen. Esto indica una raíz unitaria estacional: el patrón estacional es no estacionario (cambia de nivel a lo largo del tiempo).

▶ SARIMA automático con auto.arima()

auto.arima() con seasonal=TRUE evalúa automáticamente modelos SARIMA. La diferencia estacional diff(yt, 12) remueve el patrón estacional no estacionario.

11.6 Regresión con errores ARMA

El modelo de regresión con errores ARMA combina una componente determinística (tendencia + estacionalidad) con una estructura estocástica en los errores:

Yt=xt⊤β+ZtY_t = \mathbf{x}_t^\top \boldsymbol{\beta} + Z_t

donde xt\mathbf{x}_t son las variables explicativas (polinomios de tiempo, dummies estacionales, armónicos de Fourier, regresores externos) y ZtZ_t sigue un proceso ARMA:

ϕ(B) Zt=θ(B) at\phi(B) \, Z_t = \theta(B) \, a_t

Esto es equivalente a un modelo SARIMAX con regresores externos. La función Arima() del paquete forecast lo implementa mediante el argumento xreg.

Por qué modelar los errores como ARMA

Cuando los residuos de una regresión por MCO están autocorrelacionados, los errores estándar de los coeficientes son incorrectos (subestimados), las pruebas t y F son inválidas, y los pronósticos son ineficientes. Modelar los errores como ARMA:

  • Corrige la inferencia (errores estándar válidos)
  • Mejora la eficiencia del pronóstico
  • Proporciona intervalos de predicción bien calibrados

Ejemplo completo: Salario real colombiano

La serie del índice de salario real de Colombia (enero 1990 – junio 2012, mensual) tiene tendencia creciente y estacionalidad. Se ajusta un modelo polinomial de grado 4 con dummies estacionales y se comparan cinco especificaciones de errores: sin modelar (MCO), AR(13), ARMA(2,0)(1,1)[12], ARMA(6,4), y ARMA(9,12) con restricciones.

Regresión con errores ARMA — Salario real Colombia
1library(forecast); library(lmtest)
2source("https://raw.githubusercontent.com/NelfiGonzalez/Funciones-de-Usuario-Estadistica-III/main/Funcion-Mipoly.R")
3source("https://raw.githubusercontent.com/NelfiGonzalez/Funciones-de-Usuario-Estadistica-III/main/Funciones-Criterios.Informacion-Calidad.Intervalos.R")
4source("https://raw.githubusercontent.com/NelfiGonzalez/Funciones-de-Usuario-Estadistica-III/main/Funciones-BP.LB.test-pruebaDW1.R")
5salario <- read.table("DATOSSALARIOREALENER1990-JUNIO2012.txt", header = TRUE)
6salario <- ts(salario, freq = 12, start = c(1990, 1))
7n <- length(salario) - 12; t <- 1:n
8yt <- ts(salario[1:n], freq = 12, start = c(1990, 1))
9mes <- seasonaldummy(yt)
10poli <- Mipoly(tiempo = t, grado = 4)
11X <- data.frame(poli, mes)
12modelo1 <- lm(yt ~ ., data = X)
13k1 <- length(coef(modelo1)[coef(modelo1) != 0])
14par(mfrow = c(1, 2))
15acf(as.numeric(residuals(modelo1)), ci.type = "ma", lag.max = 36, main = "ACF residuos MCO")
16pacf(as.numeric(residuals(modelo1)), lag.max = 36, main = "PACF residuos MCO")
17par(mfrow = c(1, 1))
18auto.arima(ts(residuals(modelo1), freq = 12), ic = "aic")
19modelo2 <- Arima(yt, order = c(13, 0, 0), xreg = as.matrix(X), method = "ML")
20modelo3 <- Arima(yt, order = c(2, 0, 0), seasonal = list(order = c(1, 0, 1), period = 12), xreg = as.matrix(X), method = "ML")
21modelo4 <- Arima(yt, order = c(6, 0, 4), xreg = as.matrix(X), method = "ML")
22criterios <- data.frame(
23Modelo = 1:4,
24AIC = c(AIC(modelo1), AIC(modelo2), AIC(modelo3), AIC(modelo4)),
25BIC = c(BIC(modelo1), BIC(modelo2), BIC(modelo3), BIC(modelo4)))
26print(criterios)
27for (i in 1:4) {
28m <- get(paste0("modelo", i))
29e <- residuals(m)
30lb <- Box.test(as.numeric(e), lag = 36, type = "Ljung-Box")
31cat(sprintf("Modelo %d: Ljung-Box Q=%.2f, p=%.4f → %s\n",
32 i, lb$statistic, lb$p.value,
33 ifelse(lb$p.value > 0.05, "ruido blanco ✓", "autocorrelación ✗")))
34}
35tnuevo <- (n + 1):length(salario)
36Xnuevo <- data.frame(Mipoly(tnuevo, 4), seasonaldummy(yt, h = 12))
37fc3 <- forecast(modelo3, xreg = as.matrix(Xnuevo), level = 95)
38plot(fc3, main = "Pronóstico salario real — Modelo 3: ARMA(2,0)(1,1)[12]")

El argumento xreg de Arima() incorpora regresores externos. Los errores se modelan como ARMA. La identificación del orden ARMA se hace sobre los residuos del MCO inicial.

11.7 SARIMAX: el modelo unificador

Combinando regresión externa con SARIMA, obtenemos el modelo SARIMAX completo:

ϕ(B) Φ(BS) (1−B)d (1−BS)D (Yt−xt⊤β)=θ(B) Θ(BS) at\phi(B) \, \Phi(B^S) \, (1-B)^d \, (1-B^S)^D \, (Y_t - \mathbf{x}_t^\top \boldsymbol{\beta}) = \theta(B) \, \Theta(B^S) \, a_t

Este modelo engloba todos los casos particulares vistos en el curso:

| Modelo del curso | Especificación SARIMAX | Módulo | |---|---|---| | Regresión polinomial (MCO) | (0,0,0)(0,0,0)+X(0,0,0)(0,0,0) + \mathbf{X} | 2–4 | | Regresión con errores AR(p) | (p,0,0)(0,0,0)+X(p,0,0)(0,0,0) + \mathbf{X} | 11 | | Regresión con errores ARMA | (p,0,q)(0,0,0)+X(p,0,q)(0,0,0) + \mathbf{X} | 11 | | Regresión con errores SARIMA | (p,d,q)(P,D,Q)S+X(p,d,q)(P,D,Q)_S + \mathbf{X} | 11 | | ARIMA puro (sin regresores) | (p,d,q)(P,D,Q)S(p,d,q)(P,D,Q)_S | 11 |

Conexión con TimeSight

TimeSight implementa el flujo SARIMAX completo en su paso de Modelado. Al seleccionar la familia ARIMA, puedes:

  • Usar auto.arima() para selección automática por AIC
  • Especificar manualmente los órdenes (p,d,q)(P,D,Q)[S](p,d,q)(P,D,Q)[S]
  • El back-transform se aplica automáticamente si la serie fue transformada

Los pasos de Diagnóstico y Pronóstico verifican que los residuos sean ruido blanco y generan intervalos de predicción con el modelo SARIMA ajustado.

11.8 Resumen del procedimiento completo

Flujo de análisis SARIMAX

  • Paso 1 — Exploración: Graficar la serie, ACF, PACF, tests ADF/KPSS.
  • Paso 2 — Transformación: log o Box-Cox si la varianza no es constante.
  • Paso 3 — Diferenciación: Aplicar ∇d\nabla^d y/o ∇SD\nabla_S^D hasta lograr estacionariedad.
  • Paso 4 — Identificación: ACF/PACF de la serie diferenciada → identificar (p,q)(p,q) y (P,Q)(P,Q). Confirmar con EACF y auto.arima.
  • Paso 5 — Estimación: Ajustar SARIMA por ML con Arima(). Si hay regresores, usar xreg.
  • Paso 6 — Diagnóstico: ACF/PACF de residuos, Ljung-Box, Shapiro-Wilk. Si no son ruido blanco, volver al paso 4.
  • Paso 7 — Pronóstico: forecast() con horizonte hh y nivel de confianza.
  • Paso 8 — Validación: Comparar con datos held-out. Calcular RMSE, MAPE, cobertura de IP.
▶ Flujo SARIMAX completo — AirPassengers

Este es el flujo que TimeSight automatiza: exploración → transformación → modelado SARIMA → diagnóstico → pronóstico con back-transform.