← Catálogo
· Capítulo 10
T10_mST_Script_AlisadoExponencial.R
# ══════════════════════════════════════════════════
# 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 ===