#- 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")#

Descripción de la imagen 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.