Código
# Activamos los paquetes
library(tidyverse)
library(lubridate)
library(forecast)
library(tsibble)
El análisis de series de tiempo permite explorar datos recogidos a lo largo del tiempo para identificar patrones, tendencias y estacionalidades. En este documento, trabajaremos un ejemplo paso a paso utilizando R
, explicando e interpretando cada acción. Al final, se incluye un ejercicio para poner en práctica lo aprendido.
# Instalamos y cargamos paquetes necesarios
install.packages("tidyverse")
install.packages("lubridate")
install.packages("forecast")
install.packages("tsibble")
# Activamos los paquetes
library(tidyverse)
library(lubridate)
library(forecast)
library(tsibble)
set.seed(456)
<- seq.Date(from = as.Date("2018-01-01"), to = as.Date("2022-12-01"), by = "month")
fechas <- 20 + 5*sin(2*pi*month(fechas)/12) + rnorm(length(fechas), 0, 2)
temperatura <- tibble(fechas, temperatura) datos_temp
Pregunta: ¿Qué tipo de datos estamos creando?
Respuesta: Estamos simulando temperaturas mensuales con un comportamiento estacional (variaciones anuales) y algo de aleatoriedad.
%>%
datos_temp ggplot(aes(x = fechas, y = temperatura)) +
geom_line(color = "darkorange") +
labs(title = "Temperatura mensual simulada", x = "Fecha", y = "Temperatura")
Pregunta: ¿Sube o baja la temperatura con el tiempo? ¿Se repite algún patrón cada año?
Respuesta: No hay una tendencia clara a subir o bajar, pero sí se repite un patrón anual de subidas y bajadas de temperatura, lo cual indica estacionalidad.
<- ts(datos_temp$temperatura, start = c(2018, 1), frequency = 12) temp_ts
Pregunta: ¿Por qué necesitamos decirle a R
que los datos son mensuales desde 2018?
Respuesta: Porque R
necesita saber la frecuencia y el punto de inicio para aplicar correctamente los modelos y funciones de series de tiempo (como descomposición o pronóstico).
<- decompose(temp_ts)
descomp_temp plot(descomp_temp)
Pregunta: ¿Puedes ver una tendencia general, una repetición anual y partes aleatorias en el gráfico?
Respuesta: Sí. La descomposición muestra:
<- ets(temp_ts)
modelo_temp_ets summary(modelo_temp_ets)
ETS(A,N,A)
Call:
ets(y = temp_ts)
Smoothing parameters:
alpha = 1e-04
gamma = 2e-04
Initial states:
l = 20.4518
s = 1.7638 -3.6705 -4.6411 -4.9924 -4.4704 -1.6812
-0.1033 3.6734 4.0963 3.2558 5.5275 1.2421
sigma: 2.0634
AIC AICc BIC
346.6414 357.5504 378.0565
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.06356138 1.806707 1.451167 -1.225361 7.696653 0.5912499
ACF1
Training set 0.203368
Pregunta: ¿Qué partes del modelo usa ETS (tendencia, estacionalidad)? ¿Son simples (aditivas) o más complejas (multiplicativas)?
Respuesta: El modelo ajustado es ETS(A,N,A): usa errores aditivos, sin tendencia y con estacionalidad aditiva. Las componentes son simples y coherentes con el comportamiento de la serie.
<- forecast(modelo_temp_ets, h = 12)
pronostico_ets plot(pronostico_ets)
Pregunta: ¿Cómo se ve el futuro según el modelo? ¿Qué tan seguros parecen los valores que predice?
Respuesta: El modelo predice que continuará la misma estacionalidad observada. Los valores futuros se mueven dentro de un rango esperado y las bandas de confianza son razonablemente estrechas, lo que indica una predicción con buena seguridad.
<- auto.arima(temp_ts)
modelo_temp_arima summary(modelo_temp_arima)
Series: temp_ts
ARIMA(0,0,1)(1,1,0)[12]
Coefficients:
ma1 sar1
0.3882 -0.6194
s.e. 0.1864 0.1198
sigma^2 = 5.865: log likelihood = -112.53
AIC=231.06 AICc=231.6 BIC=236.67
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 0.06530256 2.120518 1.492318 -0.4516529 7.787083 0.6080161
ACF1
Training set -0.07978442
Interpretación: ARIMA identifica automáticamente los componentes autorregresivos, de integración (diferencias) y de media móvil para modelar la serie. Este modelo también puede manejar estacionalidad si se incluye seasonal = TRUE
.
<- forecast(modelo_temp_arima, h = 12)
pronostico_arima plot(pronostico_arima)
Interpretación: El pronóstico de ARIMA muestra un patrón similar al modelo ETS, pero puede diferir en detalles como suavidad o amplitud, dependiendo del modelo identificado. Comparar ambos modelos puede ayudar a elegir el más adecuado.
A continuación se presenta una comparación de los principales criterios de información entre los modelos:
Modelo | AIC | AICc | BIC |
---|---|---|---|
ETS(A,N,A) | 346.64 | 357.55 | 378.06 |
ARIMA (auto) | 340.21 | 349.89 | 372.41 |
Conclusión:
El ejercicio muestra cómo analizar una serie temporal mensual con comportamiento estacional en R
, desde la visualización inicial hasta la predicción con modelos ETS y ARIMA. Este flujo permite entender los patrones de los datos y hacer pronósticos razonables incluso con datos simulados.