# ══════════════════════════════════════════════════ # T05 · Series Temporales — Metodología Box-Jenkins: ARIMA # Abre primero mSeriesTemporales.Rproj en RStudio # ══════════════════════════════════════════════════ library(tidyverse) library(forecast) library(tseries) pausa <- function(msg = "\n [Pulsa ENTER para continuar...]") { if (interactive()) { cat(msg); invisible(readline()) } } set.seed(2026) # ── 1. LA TRAMPA DE LA DERIVA ───────────────────── # Un ARIMA(0,1,1) sobre un paseo aleatorio CON deriva positiva, # estimado SIN deriva, produce un ajuste peor. n <- 200; mu <- 0.3 y <- cumsum(mu + rnorm(n)) m_sin <- Arima(y, order = c(0, 1, 1), include.drift = FALSE) m_con <- Arima(y, order = c(0, 1, 1), include.drift = TRUE) cat(sprintf("Sin deriva: AIC = %.2f\n", AIC(m_sin))) cat(sprintf("Con deriva: AIC = %.2f (deriva estimada = %.3f, verdadera = %.1f)\n", AIC(m_con), coef(m_con)["drift"], mu)) pausa() # ── 2. PREDICCION Y ANCHURA DEL INTERVALO ───────── # En un ARIMA(0,1,1) (raiz unitaria), el IC se ensancha sin limite con h. fc <- forecast(m_con, h = 20, level = 95) amplitud <- fc$upper - fc$lower plot(1:20, amplitud, type = "b", col = "grey30", xlab = "Horizonte h", ylab = "Amplitud IC 95%", main = "La incertidumbre crece con el horizonte (I(1))") cat("La amplitud del intervalo NO se estabiliza: crece con h, a diferencia de un ARMA estacionario.\n") pausa() # ── 3. COMPARACION: ARMA ESTACIONARIO ───────────── # Con un AR(1) estacionario, el IC SI se estabiliza. y_ar1 <- arima.sim(list(ar = 0.6), n = 200) m_ar1 <- Arima(y_ar1, order = c(1, 0, 0), include.mean = TRUE) fc_ar1 <- forecast(m_ar1, h = 20, level = 95) amplitud_ar1 <- fc_ar1$upper - fc_ar1$lower plot(1:20, amplitud_ar1, type = "b", col = "grey30", xlab = "Horizonte h", ylab = "Amplitud IC 95%", main = "AR(1) estacionario: el IC se estabiliza") cat(sprintf("Amplitud en h=1: %.3f | en h=20: %.3f (apenas cambia)\n", amplitud_ar1[1], amplitud_ar1[20])) pausa() # ── 4. auto.arima() COMO CONTRASTE ──────────────── am <- auto.arima(y, seasonal = FALSE, stepwise = FALSE, approximation = FALSE) cat("Modelo elegido por auto.arima():\n") print(am) # === FIN Script T05 — Metodología Box-Jenkins: ARIMA ===