Serie temporal

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ías
library(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 1
            230, 240, 225, 250, 265, 280, 230, 240, 225, 250, 265, 280,  # Año 2
            250, 260, 245, 270, 285, 300, 250, 260, 245, 270, 285, 300,  # Año 3
            270, 280, 265, 290, 305, 320, 270, 280, 265, 290, 305, 320,  # Año 4
            290, 300, 285, 310, 325, 340, 290, 300, 285, 310, 325, 340)  # Año 5

# Convertir a serie de tiempo con frecuencia mensual
ventas_ts <- ts(ventas, start=c(2019, 1), frequency=12)

# Visualizar la serie de tiempo
plot(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 tiempo
descomposicion <- decompose(ventas_ts)

# Graficar la descomposición
plot(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 estacionalidad
modelo_arima <- auto.arima(ventas_ts, seasonal=TRUE)

# Resumen del modelo ARIMA
summary(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 meses
pronostico <- forecast(modelo_arima, h=12)

# Graficar el pronóstico
plot(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 error
accuracy(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ñadida
plot(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.