#- TSstudio El paquete TSstudio nos brinda un conjunto de herramientas de análisis descriptivo y predictivo de datos de series temporales. Eso incluye funciones de utilidad para preprocesar datos de series temporales, funciones de visualización interactiva que es complementado con el paquetes plotly y un conjunto de herramientas para evaluar los modelos de pronóstico de series temporales
library("TSstudio")
## Warning: package 'TSstudio' was built under R version 4.2.3
##- Uso: ###- Trazar datos en serie de tiempo.
library(TSstudio)
data(USgas)
# Ploting time series object
ts_plot(USgas,
title = "Consumo mensual the Gas Naturual en US",
Ytitle = "Pies cubicos por milón",
Xtitle = "Años")
###- Analisis de estacionalidad:
# Seasonal plot
ts_seasonal(USgas, type = "all")
Vemos como la funcion está mostrando una serie de tiempo con el paquete “USgas”, y con la función de Rstudio descomponemos la serie de tiempo en todos sus componentes estacionales.
# Heatmap plot
ts_heatmap(USgas)
vemos un mapa de color muestra los valores de una matriz en una tabla de colores. para el caso de la serie de tiempo “USgas” si dos valores están correlacionados, se mostrarán en colores similares en el mapa de calor. Si dos valores no están correlacionados, se mostrarán en diferentes colores.
###-Análisis de correlación
# ACF and PACF plots
ts_cor(USgas, lag.max = 60)
el código anterior es una función para trazar los gráficos de la función de autocorrelación (ACF) y la función de autocorrelación parcial (PACF) de la serie de tiempo “USgas”. La función “ts_cor” calcula y traza los valores de la ACF y PACF para diferentes valores de retardo, y el argumento “lag.max = 60” nos condiciona que se deben trazar los valores de autocorrelación con un retraso maximo de 60.
# Lags plot
ts_lags(USgas, lags = 1:12)
La función “ts_lags” toma como argumento la serie de tiempo “USgas” y una secuencia de lags especificados por el argumento “lags = 1:12”. En este caso, se trazarán los valores de la serie de tiempo para lags de 1 a 12 intervalos de tiempo, Si los valores están correlacionados, se verá una tendencia en los datos.
# Seasonal lags plot
ts_lags(USgas, lags = c(12, 24, 36, 48))
En este caso, se trazarán los valores de la serie de tiempo para lags de 12, 24, 36 y 48 intervalos de tiempo, que corresponden a los lags estacionales.
###- Modelos de previsión de entrenamiento
# Forecasting applications
# Setting training and testing partitions
USgas_s <- ts_split(ts.obj = USgas, sample.out = 12)
train <- USgas_s$train
test <- USgas_s$test
# Forecasting with auto.arima
library(forecast)
## Warning: package 'forecast' was built under R version 4.2.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
md <- auto.arima(train)
fc <- forecast(md, h = 12)
# Plotting actual vs. fitted and forecasted
test_forecast(actual = USgas, forecast.obj = fc, test = test)
La primera parte del código divide la serie de tiempo “USgas” en dos conjuntos, un conjunto de entrenamiento y un conjunto de prueba. El conjunto de entrenamiento se utilizará para ajustar el modelo de pronóstico, mientras que el conjunto de prueba se utilizará para evaluar la precisión del modelo.
La segunda parte del código utiliza la función “auto.arima” para ajustar un modelo ARIMA automáticamente al conjunto de entrenamiento. A continuación, y la función “forecast” se utiliza para generar pronósticos para los próximos 12 períodos (los 12 meses en este caso) basados en el modelo ajustado.
La última parte del código utiliza la función “test_forecast” para trazar un gráfico que muestra los datos reales como los pronósticos del modelo para el conjunto de prueba. La función “test_forecast” toma como argumentos la serie de tiempo original “USgas”, los pronósticos generados por el modelo y el conjunto de prueba.
# Plotting the forecast
plot_forecast(fc)
La función “plot_forecast” toma como argumento los pronósticos generados por la función “forecast” en el código anterior. En este caso, los pronósticos se almacenaron en el objeto “fc”.
El gráfico de pronóstico muestra los valores pronosticados en el eje Y y el tiempo en el eje X. Además, se trazan bandas de confianza alrededor de los pronósticos para indicar el grado de incertidumbre en las predicciones.
El gráfico nos ayuda a visualizar la tendencia de la serie de tiempo pronosticada y a evaluar si los pronósticos están dentro de las bandas de confianza. Si los pronósticos están fuera de las bandas de confianza, esto puede indicar que el modelo no está capturando adecuadamente la variabilidad de la serie de tiempo.
# Run horse race between multiple models
methods <- list(ets1 = list(method = "ets",
method_arg = list(opt.crit = "lik"),
notes = "ETS model with opt.crit = lik"),
ets2 = list(method = "ets",
method_arg = list(opt.crit = "amse"),
notes = "ETS model with opt.crit = amse"),
arima1 = list(method = "arima",
method_arg = list(order = c(2,1,0)),
notes = "ARIMA(2,1,0)"),
arima2 = list(method = "arima",
method_arg = list(order = c(2,1,2),
seasonal = list(order = c(1,1,1))),
notes = "SARIMA(2,1,2)(1,1,1)"),
hw = list(method = "HoltWinters",
method_arg = NULL,
notes = "HoltWinters Model"),
tslm = list(method = "tslm",
method_arg = list(formula = input ~ trend + season),
notes = "tslm model with trend and seasonal components"))
# Training the models with backtesting
md <- train_model(input = USgas,
methods = methods,
train_method = list(partitions = 6,
sample.out = 12,
space = 3),
horizon = 12,
error = "MAPE")
## # A tibble: 6 × 7
## model_id model notes avg_mape avg_rmse `avg_coverage_80%` `avg_coverage_95%`
## <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 hw HoltWi… Holt… 0.0482 144. 0.792 0.931
## 2 ets1 ets ETS … 0.0526 156. 0.833 0.972
## 3 arima2 arima SARI… 0.0546 163. 0.583 0.819
## 4 ets2 ets ETS … 0.0650 185. 0.5 0.792
## 5 tslm tslm tslm… 0.0854 242. 0.319 0.611
## 6 arima1 arima ARIM… 0.163 539. 0.861 0.958
El codigo anterior nos hace una comparación de varios modelos de series de tiempo para predecir los valores futuros de una serie de tiempo llamada “USgas”. Los modelos que se comparan son ETS con diferentes criterios de optimización, ARIMA con diferentes órdenes y HoltWinters, y tslm con componentes de tendencia y estacionalidad.
Luego, se entrena cada modelo con backtesting utilizando diferentes particiones de datos y se evalúa su desempeño utilizando el error porcentual absoluto medio (MAPE) y el porcentaje de cobertura de los intervalos de predicción.
El resultado se almacena en un data frame llamado “md”, que muestra los diferentes modelos y sus respectivos desempeños en términos de MAPE, RMSE y cobertura de intervalos de predicción. De esta manera, se puede determinar qué modelo es el más adecuado para predecir los valores futuros de la serie de tiempo “USgas”.
# Plot the performance of the different models on the testing partitions
plot_model(md)
el codigo genera un gráfico que muestra el rendimiento de los diferentes modelos en las particiones de prueba, y es útil para comparar visualmente el rendimiento de los diferentes modelos en términos de precisión de la predicción.
# Holt-Winters tunning parameters with grid search
#hw_grid <- ts_grid(USgas,
#model = "HoltWinters",
#periods = 6,
#window_space = 6,
#window_test = 12,
#hyper_params = list(alpha = seq(0,1,0.1),#
#beta = seq(0,1,0.1),
#gamma = seq(0,1,0.1)))#
#plot_grid(hw_grid, type = "3D")#
Este código
es utilizado para realizar una búsqueda en cuadrícula de los mejores
parámetros para el modelo de Holt-Winters aplicado a la serie temporal
USgas. El objetivo es encontrar los valores óptimos para los parámetros
de suavizado (alpha, beta y gamma) que minimizan la suma de los errores
cuadráticos en el conjunto de prueba. La función ts_grid() genera una
cuadrícula de posibles combinaciones de valores de parámetros y devuelve
un objeto de clase tsibble con los valores de los parámetros y las
métricas de rendimiento de cada modelo. La función plot_grid() se
utiliza para visualizar los resultados de la búsqueda en cuadrícula en
un gráfico 3D que muestra cómo las diferentes combinaciones de valores
de parámetros afectan al rendimiento del modelo.