## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup, warning=FALSE,message=FALSE--------------------------------------- library(knitr) library(tsissm) library(xts) library(tsaux) library(data.table) library(zoo) ## ----fig.width=6,fig.height=3------------------------------------------------- data("us_retail_sales") opar <- par(mfrow = c(1,1)) y <- as.xts(us_retail_sales) par(mar = c(2,2,2,2)) plot(as.zoo(y), ylab = "Sales (Mil's S)", xlab = "", main = "Advance Retail Sales") grid() par(opar) ## ----------------------------------------------------------------------------- train <- y["/2021"] test <- y["2022/"] lambda_pre_estimate <- box_cox(lambda = NA)$transform(train) |> attr("lambda") xreg <- auto_regressors(train, frequency = 12, lambda = lambda_pre_estimate, sampling = "months", h = nrow(test), method = "sequential", check.rank = TRUE, discard.cval = 3.5, maxit.iloop = 10, maxit.oloop = 10, forc_dates = index(test)) spec <- issm_modelspec(train, auto = TRUE, slope = c(TRUE, FALSE), seasonal = TRUE, seasonal_harmonics = list(c(3,4,5)), xreg = xreg$xreg[index(train), ], seasonal_frequency = 12, ar = 0:2, ma = 0:2, lambda = lambda_pre_estimate, top_n = 4) mod <- spec |> estimate() ## ----------------------------------------------------------------------------- mod$models[[1]] |> summary() |> as_flextable() ## ----------------------------------------------------------------------------- mod$table |> kable() ## ----------------------------------------------------------------------------- mod$correlation |> kable() ## ----------------------------------------------------------------------------- p_top <- mod$models[[1]] |> predict(h = nrow(test), seed = 200, nsim = 4000, newxreg = xreg$xreg[index(test),]) p_all <- mod |> predict(h = nrow(test), seed = 200, nsim = 4000, newxreg = xreg$xreg[index(test),]) p_ensemble <- p_all |> tsensemble(weights = rep(1/4,4)) ## ----fig.width=6,fig.height=3------------------------------------------------- opar <- par(mfrow = c(1,1)) par(mar = c(2,2,2,2)) p_top |> plot(n_original = 50, gradient_color = "aliceblue", interval_type = 2, interval_color = "steelblue", interval_width = 1, median_width = 1.5, xlab = "") p_ensemble$distribution |> plot(gradient_color = "aliceblue", interval_type = 3, interval_color = "green", interval_width = 1, median_width = 1.5, median_type = 1, median_color = "green", add = TRUE) lines(index(test), as.numeric(test), col = 2, lwd = 1.5) legend("topleft", c("Historical","Actual (Forecast)", "Top (Forecast)", "Ensemble (Forecast)"), col = c("red","red","black","green"), lty = c(1,1.5,1.5,1.5), bty = "n") par(opar) ## ----------------------------------------------------------------------------- tab <- rbind(tsmetrics(p_top, actual = test, alpha = 0.1), tsmetrics(p_ensemble, actual = test, alpha = 0.1)) rownames(tab) <- c("Top","Ensemble") tab |> kable()