← Catálogo · Capítulo 5

T05_mST_Script_ModelosARIMA.R

Ver crudo
# ══════════════════════════════════════════════════
# 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 ===