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.
SARIMAX: el modelo que engloba todos los anteriores
El modelo SARIMAX es la generalización más amplia de la familia ARMA. Sus casos particulares son:
Al agregar regresores externos (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 se define como:
Con esta notación, las operaciones fundamentales se escriben:
Diferencia regular
Diferencia estacional
El polinomio autorregresivo de orden :
El polinomio de media móvil de orden :
Y los polinomios estacionales análogos:
11.2 Proceso autorregresivo AR(p)
Un proceso AR(p) expresa como una combinación lineal de sus valores pasados más un error:
En notación de operador:
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 están fuera del círculo unitario (módulo > 1):
Caso particular: AR(1)
La condición de estacionariedad es . Las propiedades clave son:
- Media: (o si se incluye intercepto)
- Varianza:
- ACF: (decae exponencialmente)
- PACF: se corta en (, para )
AR(1) con raíz unitaria
Si , el proceso es una caminata aleatoria (random walk): . No es estacionario (la varianza crece con ). Este es el caso en ARIMA: se necesita diferenciar.
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 como una combinación lineal de los errores pasados:
En notación de operador:
Condición de invertibilidad del MA(q)
El proceso MA(q) es invertible si todas las raíces de 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 recursivamente a partir de observaciones.
Caso particular: MA(1)
Propiedades:
- Media:
- Varianza:
- ACF: , para (se corta en 1)
- PACF: decae exponencialmente (no se corta)
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:
En notación compacta:
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 , el proceso es estacionario (raíces de fuera del círculo unitario).
Identificación de órdenes (p,q)
El procedimiento de Box-Jenkins para identificar los órdenes es:
- Graficar la ACF y PACF muestrales.
- Identificar el patrón (corte vs. decaimiento).
- Confirmar con la EACF (función de autocorrelación extendida).
- Validar con
auto.arima()por criterio AIC/BIC. - Ajustar el modelo candidato y verificar residuos.
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:
donde:
- : órdenes no estacionales (AR, diferenciación, MA)
- : órdenes estacionales
- : período estacional (12 mensual, 4 trimestral, 52 semanal)
- : polinomios AR y MA no estacionales
- : polinomios AR y MA estacionales
- : diferencia regular de orden
- : diferencia estacional de orden
Casos particulares de SARIMA
| Modelo | Especificación | Condición | |---|---|---| | AR(p) | | Sin MA, sin diferenciación, sin estacionalidad | | MA(q) | | Sin AR, sin diferenciación, sin estacionalidad | | ARMA(p,q) | | Estacionario, sin estacionalidad | | ARIMA(p,d,q) | | Con diferenciación, sin estacionalidad | | SARMA | | Estacionario con estacionalidad | | SARIMA | | Caso general |
Cuándo usar diferenciación estacional
La diferencia estacional es necesaria cuando la ACF tiene picos significativos en los rezagos múltiplos de (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).
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:
donde son las variables explicativas (polinomios de tiempo, dummies estacionales, armónicos de Fourier, regresores externos) y sigue un proceso ARMA:
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.
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:n8yt <- 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:
Este modelo engloba todos los casos particulares vistos en el curso:
| Modelo del curso | Especificación SARIMAX | Módulo | |---|---|---| | Regresión polinomial (MCO) | | 2–4 | | Regresión con errores AR(p) | | 11 | | Regresión con errores ARMA | | 11 | | Regresión con errores SARIMA | | 11 | | ARIMA puro (sin regresores) | | 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
- 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 y/o hasta lograr estacionariedad.
- Paso 4 — Identificación: ACF/PACF de la serie diferenciada → identificar y . Confirmar con EACF y auto.arima.
- Paso 5 — Estimación: Ajustar SARIMA por ML con
Arima(). Si hay regresores, usarxreg. - 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 y nivel de confianza. - Paso 8 — Validación: Comparar con datos held-out. Calcular RMSE, MAPE, cobertura de IP.
Este es el flujo que TimeSight automatiza: exploración → transformación → modelado SARIMA → diagnóstico → pronóstico con back-transform.