## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 7 ) ## ----setup, message=FALSE----------------------------------------------------- library(dplyr) library(tsibble) library(fable) library(icomb) library(feasts) library(ggplot2) library(plotly) ## ----------------------------------------------------------------------------- tourism_gts <- tourism |> aggregate_key(State * Purpose, Trips = sum(Trips)) tourism_gts ## ----------------------------------------------------------------------------- fit <- tourism_gts |> model(base = ETS(Trips)) fit ## ----eval=FALSE, echo=FALSE--------------------------------------------------- # # storing precomputed results to build vignette quickly # fit_recon <- fit |> # reconcile( # ols = min_trace(base, method = "ols"), # icomb = icomb(base, train_size = 55) # ) # saveRDS(fit_recon, file = "../inst/extdata/fit_recon.rds") ## ----eval=FALSE--------------------------------------------------------------- # fit_recon <- fit |> # reconcile( # ols = min_trace(base, method = "ols"), # icomb = icomb(base, train_size = 55) # ) ## ----echo=FALSE--------------------------------------------------------------- fit_recon <- readRDS(system.file("extdata", "fit_recon.rds", package = "icomb")) ## ----------------------------------------------------------------------------- fit_recon ## ----------------------------------------------------------------------------- glance_output <- fit_recon |> glance() glance_output ## ----------------------------------------------------------------------------- tourism_features <- tourism_gts |> features(Trips, feature_set(pkgs = "feasts")) tourism_features ## ----------------------------------------------------------------------------- pcs <- tourism_features |> select(-State, -Purpose, -zero_run_mean, -zero_start_prop, -zero_end_prop) |> prcomp(scale = TRUE) |> broom::augment(tourism_features) pcs ## ----------------------------------------------------------------------------- all_info <- glance_output |> filter(.model == "icomb") |> select(State, Purpose, .included) |> full_join(pcs, by = c("State", "Purpose")) all_info <- accuracy(fit) |> select(-.model, -.type) |> full_join(all_info, by = c("State", "Purpose")) all_info ## ----------------------------------------------------------------------------- tourism_viz <- all_info |> ggplot(aes( x = .fittedPC1, y = .fittedPC2, colour = .included, text = paste0( "PC1: ", round(.fittedPC1, 2), "
", "PC2: ", round(.fittedPC2, 2), "
", "State: ", State, "
", "Purpose: ", Purpose, "
", "MAPE: ", round(MAPE, 2), "
", "RMSSE: ", round(RMSSE, 2), "
", "MASE: ", round(MASE, 2) ) )) + geom_point() tourism_viz ## ----------------------------------------------------------------------------- tourism_viz |> ggplotly(tooltip = "text") ## ----------------------------------------------------------------------------- tourism_feature_plot <- all_info |> ggplot(aes( x = trend_strength, y = seasonal_strength_year, colour = .included, text = paste0( "Trend_strength: ", round(trend_strength, 2), "
", "Seasonal_strength_year: ", round(seasonal_strength_year, 2), "
", "State: ", State, "
", "Purpose: ", Purpose, "
" ) )) + geom_point() tourism_feature_plot ## ----------------------------------------------------------------------------- tourism_feature_plot |> ggplotly(tooltip = "text") ## ----------------------------------------------------------------------------- tourism_purpose_plot <- all_info |> ggplot(aes( x = trend_strength, y = seasonal_strength_year, colour = .included, text = paste0( "State: ", State, "
", "Purpose: ", Purpose, "
") )) + geom_point() + facet_wrap(vars(Purpose)) tourism_purpose_plot ## ----------------------------------------------------------------------------- tourism_purpose_plot |> ggplotly(text = "text") ## ----------------------------------------------------------------------------- tourism_avg_gts <- tourism_gts |> filter(!is_aggregated(State), !is_aggregated(Purpose)) |> aggregate_key(State * Purpose, Trips = mean(Trips)) ## ----echo=FALSE, eval=FALSE--------------------------------------------------- # fc <- tourism_avg_gts |> # model(base = ETS(Trips)) |> # reconcile(icomb = icomb(base, train_size = 55)) |> # forecast() # saveRDS(fc, file = "../inst/extdata/fc.rds") ## ----eval=FALSE--------------------------------------------------------------- # fc <- tourism_avg_gts |> # model(base = ETS(Trips)) |> # reconcile(icomb = icomb(base, train_size = 55)) |> # forecast() ## ----echo=FALSE--------------------------------------------------------------- fc <- readRDS(system.file("extdata", "fc.rds", package = "icomb")) ## ----------------------------------------------------------------------------- fc |> filter(!is_aggregated(State), !is_aggregated(Purpose), .model == "icomb") |> aggregate_key(State * Purpose, mean_fc = mean(.mean)) |> full_join(fc |> filter(.model == "icomb")) |> mutate(diff = mean_fc - .mean) |> pull(diff) |> range()