Para realizar un análisis de series de tiempo en R, seguiré los pasos fundamentales utilizando un conjunto de datos típico, como las ventas mensuales de una empresa. Te explicaré cada paso, las salidas que se generan y cómo agregar estacionalidad a la serie. Aquí está el flujo de trabajo y las explicaciones correspondientes:
Paso 1: Cargar y preparar los datos
Primero, cargamos los datos y los preparamos como una serie de tiempo.
Supongamos que tienes datos mensuales de ventas para los últimos 5 años. Usaremos el paquete forecast y ggplot2 para visualizar y analizar la serie temporal.
# Cargar las libreríaslibrary(forecast)
Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
library(ggplot2)# Simulación de datos de ejemplo: ventas mensuales durante 5 años (60 meses)ventas <-c(210, 220, 205, 230, 245, 260, 210, 220, 205, 230, 245, 260, # Año 1230, 240, 225, 250, 265, 280, 230, 240, 225, 250, 265, 280, # Año 2250, 260, 245, 270, 285, 300, 250, 260, 245, 270, 285, 300, # Año 3270, 280, 265, 290, 305, 320, 270, 280, 265, 290, 305, 320, # Año 4290, 300, 285, 310, 325, 340, 290, 300, 285, 310, 325, 340) # Año 5# Convertir a serie de tiempo con frecuencia mensualventas_ts <-ts(ventas, start=c(2019, 1), frequency=12)# Visualizar la serie de tiempoplot(ventas_ts, main="Ventas mensuales (2019-2023)", xlab="Tiempo", ylab="Ventas", col="blue", lwd=2)
Salida:
Este gráfico muestra la evolución de las ventas a lo largo del tiempo. En esta etapa, observamos si hay alguna tendencia evidente, como un aumento o disminución en las ventas, y si se observan patrones de estacionalidad.
Paso 2: Descomposición de la serie de tiempo
La descomposición de la serie temporal nos ayuda a entender sus componentes: tendencia, estacionalidad y residuales.
# Descomposición de la serie de tiempodescomposicion <-decompose(ventas_ts)# Graficar la descomposiciónplot(descomposicion)
Salida:
Aquí obtienes cuatro gráficos: 1. Datos originales: La serie completa. 2. Tendencia: Muestra la tendencia subyacente en las ventas. 3. Estacionalidad: Representa los patrones repetitivos mensuales. 4. Residuos: Los errores o fluctuaciones no explicadas por la tendencia o estacionalidad.
Explicación:
La tendencia puede ser creciente o decreciente dependiendo de cómo evolucionan las ventas a largo plazo.
La estacionalidad muestra variaciones que se repiten cada año (en nuestro caso, cada 12 meses).
Los residuos son las variaciones que no se explican por tendencia ni estacionalidad. Si los residuos son aleatorios, indica que el modelo es adecuado.
Paso 3: Estacionalidad y ajuste de modelos ARIMA
Si se identifica un componente estacional, puedes ajustar un modelo ARIMA estacional (SARIMA) para capturar tanto la estacionalidad como la tendencia en la serie de tiempo.
# Ajustar un modelo ARIMA con estacionalidadmodelo_arima <-auto.arima(ventas_ts, seasonal=TRUE)# Resumen del modelo ARIMAsummary(modelo_arima)
Series: ventas_ts
ARIMA(0,0,0)(0,1,0)[12] with drift
Coefficients:
drift
1.6667
sigma^2 = 0.0119: log likelihood = 1488.73
AIC=-2975.45 AICc=-2975.37 BIC=-2973.58
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set 0.04349998 0.09758515 0.04349998 0.01906251 0.01906251 0.002174999
ACF1
Training set 0.8997175
Salida:
El resumen del modelo incluye: - Coeficientes AR (autoregresivos) y MA (promedio móvil): indican el impacto de los valores pasados de la serie sobre los actuales. - Componentes estacionales (SAR y SMA): capturan la estacionalidad. - AIC y BIC: son criterios para la selección del modelo; cuanto más bajos, mejor ajustado está el modelo. - Residuales: análisis de los residuos del modelo para verificar si son aleatorios.
Explicación:
Este modelo captura tanto las fluctuaciones a corto plazo como los patrones estacionales. Por ejemplo, si el componente estacional es fuerte, las ventas de un mes están influenciadas por las ventas del mismo mes en años anteriores.
Paso 4: Pronóstico de la serie de tiempo
Una vez ajustado el modelo, podemos generar un pronóstico para los próximos meses.
# Generar un pronóstico para los próximos 12 mesespronostico <-forecast(modelo_arima, h=12)# Graficar el pronósticoplot(pronostico)
Salida:
Obtendrás un gráfico con la serie de tiempo observada y una extensión del pronóstico para los próximos 12 meses, junto con intervalos de confianza. Esto ayuda a visualizar el comportamiento esperado de las ventas futuras, incluidas las fluctuaciones estacionales.
Explicación:
Líneas de pronóstico: Las líneas sólidas representan el valor central pronosticado.
Intervalos de confianza: Las bandas grises alrededor del pronóstico muestran el rango probable de valores futuros, considerando la incertidumbre del modelo.
Paso 5: Evaluación del modelo
Es crucial evaluar la precisión del modelo para asegurarnos de que el pronóstico es confiable. Se pueden utilizar varias métricas como el error cuadrático medio o el error absoluto medio.
# Evaluar el modelo con una métrica de erroraccuracy(modelo_arima)
ME RMSE MAE MPE MAPE MASE
Training set 0.04349998 0.09758515 0.04349998 0.01906251 0.01906251 0.002174999
ACF1
Training set 0.8997175
Salida:
Las métricas comunes que se devuelven son: - ME: Error medio. - RMSE: Raíz del error cuadrático medio. - MAE: Error absoluto medio. - MAPE: Error porcentual medio absoluto.
Explicación:
Estas métricas permiten verificar la precisión del modelo. Si los valores son bajos, el modelo predice bien.
Paso 6: Agregar estacionalidad si no es evidente
En algunos casos, la estacionalidad no es evidente. Para añadir estacionalidad explícita en una serie de tiempo que parece carecer de ella, podemos crear manualmente un componente estacional.
# Añadir un componente estacional ficticio (ejemplo: ventas altas en diciembre)ventas_seasonal <- ventas +rep(c(20, -5, 0, -5, 5, 10, 0, -5, 0, 5, 20, 50), 5)ventas_ts_seasonal <-ts(ventas_seasonal, start=c(2019, 1), frequency=12)# Graficar la nueva serie con estacionalidad añadidaplot(ventas_ts_seasonal, main="Ventas mensuales con estacionalidad añadida", xlab="Tiempo", ylab="Ventas", col="red", lwd=2)
Explicación:
En este ejemplo, he añadido una estacionalidad manualmente al aumentar las ventas en ciertos meses (ej. diciembre). Esto genera un patrón estacional más claro.
Conclusión:
Este flujo de trabajo cubre un análisis típico de series de tiempo en R, donde hemos preparado los datos, descompuesto la serie en sus componentes, ajustado un modelo ARIMA con estacionalidad, realizado un pronóstico y evaluado la precisión del modelo. Añadir o destacar estacionalidad ayuda a capturar patrones periódicos en los datos, lo que mejora la capacidad predictiva del modelo.