Tuning time series models with grid search approach using backtesting method. If set to "auto" (default), will use all available cores in the system minus 1

ts_grid(ts.obj, model, optim = "MAPE", periods, window_length = NULL,
  window_space, window_test, hyper_params, parallel = TRUE,
  n.cores = "auto")

Arguments

ts.obj

A univariate time series object of a class "ts"

model

A string, defines the model c("HoltWinters"), currently support only Holt-Winters model

optim

A string, set the optimization method - c("MAPE", "RMSE")

periods

A string, set the number backtesting periods

window_length

An integer, defines the length of the backtesting training window. If set to NULL (default) will use an expending window starting the from the first observation, otherwise will use a sliding window.

window_space

An integer, set the space length between each of the backtesting training partition

window_test

An integer, set the length of the backtesting testing partition

hyper_params

A list, defines the tuning parameters and their range

parallel

Logical, if TRUE use multiple cores in parallel

n.cores

Set the number of cores to use if the parallel argument is set to TRUE. If set to "auto" (default), will use n-1 of the available cores

Value

A list

Examples

# NOT RUN {
 data(USgas)

 # Starting with a shallow search (sequence between 0 and 1 with jumps of 0.1)
 # To speed up the process, will set the parallel option to TRUE 
 # to run the search in parallel using 8 cores

 hw_grid_shallow <- ts_grid(ts.obj = USgas,
                            periods = 6,
                            model = "HoltWinters",
                            optim = "MAPE",
                            window_space = 6,
                            window_test = 12,
                            hyper_params = list(alpha = seq(0.01, 1,0.1),
                                                beta =  seq(0.01, 1,0.1),
                                                gamma = seq(0.01, 1,0.1)),
                            parallel = TRUE,
                            n.cores = 8)


 # Use the parameter range of the top 20 models 
 # to set a narrow but more agressive search

 a_min <- min(hw_grid_shallow$grid_df$alpha[1:20])
 a_max <- max(hw_grid_shallow$grid_df$alpha[1:20])

 b_min <- min(hw_grid_shallow$grid_df$beta[1:20])
 b_max <- max(hw_grid_shallow$grid_df$beta[1:20])

 g_min <- min(hw_grid_shallow$grid_df$gamma[1:20])
 g_max <- max(hw_grid_shallow$grid_df$gamma[1:20])

 hw_grid_second <- ts_grid(ts.obj = USgas,
                           periods = 6,
                           model = "HoltWinters",
                           optim = "MAPE",
                           window_space = 6,
                           window_test = 12,
                           hyper_params = list(alpha = seq(a_min, a_max,0.05),
                                               beta =  seq(b_min, b_max,0.05),
                                               gamma = seq(g_min, g_max,0.05)),
                           parallel = TRUE,
                           n.cores = 8)

 md <- HoltWinters(USgas,
                   alpha = hw_grid_second$alpha,
                   beta = hw_grid_second$beta,
                   gamma = hw_grid_second$gamma)

 library(forecast)

 fc <- forecast(md, h = 60)

 plot_forecast(fc)

# }