# ══════════════════════════════════════════════════ # T10 · Series Temporales — Alisado Exponencial y Modelos ETS # Abre primero mSeriesTemporales.Rproj en RStudio # ══════════════════════════════════════════════════ library(tidyverse) library(forecast) pausa <- function(msg = "\n [Pulsa ENTER para continuar...]") { if (interactive()) { cat(msg); invisible(readline()) } } set.seed(2026) # ── 1. PESOS GEOMETRICOS DEL SES ────────────────── # peso del dato j periodos atras = alpha * (1-alpha)^j alpha1 <- 0.2; alpha2 <- 0.7 j <- 0:14 op <- par(mfrow = c(1, 2)) plot(j, alpha1 * (1 - alpha1)^j, type = "h", lwd = 2, col = "grey30", main = paste("alfa =", alpha1), xlab = "Antiguedad (j)", ylab = "Peso") plot(j, alpha2 * (1 - alpha2)^j, type = "h", lwd = 2, col = "grey30", main = paste("alfa =", alpha2), xlab = "Antiguedad (j)", ylab = "Peso") par(op) cat(sprintf("Suma de pesos (alfa=%.1f), 15 terminos: %.4f (tiende a 1)\n", alpha1, sum(alpha1*(1-alpha1)^j))) pausa() # ── 2. SES SOBRE UNA SERIE SIMULADA SIN TENDENCIA ─ # ruido blanco con media constante: el SES deberia recuperar un alfa bajo n <- 200 y_plano <- 50 + arima.sim(model = list(), n = n, sd = 1) m_ses_sim <- ses(y_plano, h = 10) cat(sprintf("SES sobre serie simulada sin tendencia: alfa estimado = %.4f\n", m_ses_sim$model$par["alpha"])) plot(m_ses_sim, main = "SES sobre una serie simulada sin tendencia") pausa() # ── 3. EQUIVALENCIA SES = ARIMA(0,1,1) ──────────── # Sobre una serie CON tendencia estocastica (paseo aleatorio con deriva) y_pa <- 100 + cumsum(rnorm(n, mean = 0.3, sd = 1)) m_ses_pa <- ses(y_pa, h = 1) m_arima_pa <- Arima(y_pa, order = c(0, 1, 1)) alpha_pa <- unname(m_ses_pa$model$par["alpha"]) theta_ses <- alpha_pa - 1 theta_arima <- unname(coef(m_arima_pa)["ma1"]) cat(sprintf("alfa (SES) = %.4f -> theta implicito = alfa-1 = %.4f\n", alpha_pa, theta_ses)) cat(sprintf("theta (ARIMA(0,1,1) ajustado directamente) = %.4f\n", theta_arima)) cat("Ambos deberian ser muy proximos: el SES es un ARIMA(0,1,1) con theta=alfa-1.\n") pausa() # ── 4. HOLT SOBRE UNA SERIE CON TENDENCIA ───────── m_holt_pa <- holt(y_pa, h = 20) cat(sprintf("Holt: alfa=%.4f beta=%.4f\n", m_holt_pa$model$par["alpha"], m_holt_pa$model$par["beta"])) plot(m_holt_pa, main = "Holt sobre un paseo aleatorio con deriva") pausa() # ── 5. HOLT-WINTERS SOBRE UNA SERIE CON ESTACIONALIDAD ─ # tendencia + estacionalidad aditiva de periodo 12, simuladas t_idx <- 1:120 tend <- 0.4 * t_idx estac <- 5 * sin(2 * pi * t_idx / 12) y_hw <- ts(100 + tend + estac + rnorm(120, sd = 1), frequency = 12) m_hw_sim <- hw(y_hw, h = 24, seasonal = "additive") cat(sprintf("HW simulado: alfa=%.4f beta=%.4f gamma=%.4f\n", m_hw_sim$model$par["alpha"], m_hw_sim$model$par["beta"], m_hw_sim$model$par["gamma"])) plot(m_hw_sim, main = "Holt-Winters sobre una serie simulada con tendencia y estacionalidad") pausa() # ── 6. SELECCION AUTOMATICA CON ets() ───────────── m_ets_sim <- ets(y_hw) cat("Modelo ETS seleccionado automaticamente para la serie simulada:\n") print(m_ets_sim$method) cat(sprintf("AICc ETS = %.2f | AICc HW manual = %.2f\n", m_ets_sim$aicc, m_hw_sim$model$aicc)) cat("Con datos simulados exactamente aditivos, ETS deberia recuperar A,A,A o muy similar a HW.\n") # === FIN Script T10 — Alisado Exponencial y Modelos ETS ===