diff --git a/ProductDemandForecast/Code/ProductDemandForecast-hts.ipynb b/ProductDemandForecast/Code/ProductDemandForecast-hts.ipynb
new file mode 100644
index 0000000..a79ebbb
--- /dev/null
+++ b/ProductDemandForecast/Code/ProductDemandForecast-hts.ipynb
@@ -0,0 +1,1638 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "title: \"Product Demand Forecast (hts)\"\n",
+ "author: \"Fang Zhou, Data Scientist, Microsoft\"\n",
+ "output: \n",
+ " rmarkdown::html_vignette:\n",
+ " toc: true\n",
+ "\n",
+ "vignette: >\n",
+ " %\\VignetteIndexEntry{Vignette Title}\n",
+ " %\\VignetteEngine{knitr::rmarkdown}\n",
+ " %\\VignetteEncoding{UTF-8}\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "attributes": {
+ "classes": [],
+ "echo": "FALSE",
+ "id": ""
+ },
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "\n",
+ "knitr::opts_chunk$set(fig.width = 6,\n",
+ " fig.height = 4,\n",
+ " fig.align ='center',\n",
+ " dev = \"png\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Introduction\n",
+ "\n",
+ "In this documentation, we are trying to build a quartly by category demand forecast model on product booking quantity data using the package 'hts'. We implement the advanced analytics process with R in the principle of step-by-step. \n",
+ "\n",
+ "## Product booking quantity data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "attributes": {
+ "classes": [],
+ "id": "",
+ "message": "FALSE"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "Attaching package: 'dplyr'\n",
+ "\n",
+ "The following objects are masked from 'package:stats':\n",
+ "\n",
+ " filter, lag\n",
+ "\n",
+ "The following objects are masked from 'package:base':\n",
+ "\n",
+ " intersect, setdiff, setequal, union\n",
+ "\n",
+ "\n",
+ "Attaching package: 'zoo'\n",
+ "\n",
+ "The following objects are masked from 'package:base':\n",
+ "\n",
+ " as.Date, as.Date.numeric\n",
+ "\n",
+ "Warning message in as.POSIXlt.POSIXct(Sys.time()):\n",
+ "\"unable to identify current timezone 'C':\n",
+ "please set environment variable 'TZ'\"Loading required package: SparseM\n",
+ "\n",
+ "Attaching package: 'SparseM'\n",
+ "\n",
+ "The following object is masked from 'package:base':\n",
+ "\n",
+ " backsolve\n",
+ "\n",
+ "Loading required package: Matrix\n",
+ "Loading required package: matrixcalc\n",
+ "Loading required package: fma\n",
+ "Loading required package: expsmooth\n",
+ "Loading required package: lmtest\n",
+ "Loading required package: tseries\n"
+ ]
+ }
+ ],
+ "source": [
+ "## Load the required packages into the R session.\n",
+ "\n",
+ "library(dplyr) # Missing value treatment with Filter.\n",
+ "library(zoo) # Missing value treatment with locf method.\n",
+ "library(forecast) # Time Series forecasting.\n",
+ "library(hts) # Hierarchical time series forecasting.\n",
+ "library(fpp) # Time Series cross validation.\n",
+ "library(foreach) # Run for loop in parallel."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's load the data and take a brief glimpse of it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "attributes": {
+ "classes": [],
+ "id": "",
+ "message": "FALSE"
+ },
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "## Set directory\n",
+ "\n",
+ "setwd(\"C:/Demo/ProductDemandForecast\")\n",
+ "\n",
+ "wd <- getwd()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "attributes": {
+ "classes": [],
+ "error": "FALSE",
+ "id": "",
+ "message": "FALSE,",
+ "warning": "FALSE,"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\t- 56
\n",
+ "\t- 10
\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{enumerate*}\n",
+ "\\item 56\n",
+ "\\item 10\n",
+ "\\end{enumerate*}\n"
+ ],
+ "text/markdown": [
+ "1. 56\n",
+ "2. 10\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "[1] 56 10"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "'data.frame':\t56 obs. of 10 variables:\n",
+ " $ Year : int 1998 1998 1998 1998 1999 1999 1999 1999 2000 2000 ...\n",
+ " $ Quarter : Factor w/ 4 levels \"Q1\",\"Q2\",\"Q3\",..: 1 2 3 4 1 2 3 4 1 2 ...\n",
+ " $ Product.1: int 7320 6117 6282 6368 6602 5651 5710 6509 6589 5392 ...\n",
+ " $ Product.2: int 21782 16881 13495 15963 22718 14775 14634 15669 20474 14522 ...\n",
+ " $ Product.3: int 4865 4100 4418 5157 5550 3902 3970 3825 5706 4228 ...\n",
+ " $ Product.4: int 14054 8237 6731 7675 13581 7883 6516 6834 12561 7801 ...\n",
+ " $ Product.5: int 9055 5616 8298 6674 9168 7351 8322 7017 8706 7045 ...\n",
+ " $ Product.6: int 8016 8461 13175 9092 10224 9672 14376 10620 9668 8885 ...\n",
+ " $ Product.7: int 9178 6362 7965 6864 8908 7690 7998 7068 10484 7377 ...\n",
+ " $ Product.8: int 10232 9540 12385 13098 10140 9948 10653 10781 11462 9217 ...\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "Year | Quarter | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 |
\n",
+ "\n",
+ "\t1998 | Q1 | 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 |
\n",
+ "\t1998 | Q2 | 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 |
\n",
+ "\t1998 | Q3 | 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 |
\n",
+ "\t1998 | Q4 | 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 |
\n",
+ "\t1999 | Q1 | 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 |
\n",
+ "\t1999 | Q2 | 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 |
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{tabular}{r|llllllllll}\n",
+ " Year & Quarter & Product.1 & Product.2 & Product.3 & Product.4 & Product.5 & Product.6 & Product.7 & Product.8\\\\\n",
+ "\\hline\n",
+ "\t 1998 & Q1 & 7320 & 21782 & 4865 & 14054 & 9055 & 8016 & 9178 & 10232\\\\\n",
+ "\t 1998 & Q2 & 6117 & 16881 & 4100 & 8237 & 5616 & 8461 & 6362 & 9540\\\\\n",
+ "\t 1998 & Q3 & 6282 & 13495 & 4418 & 6731 & 8298 & 13175 & 7965 & 12385\\\\\n",
+ "\t 1998 & Q4 & 6368 & 15963 & 5157 & 7675 & 6674 & 9092 & 6864 & 13098\\\\\n",
+ "\t 1999 & Q1 & 6602 & 22718 & 5550 & 13581 & 9168 & 10224 & 8908 & 10140\\\\\n",
+ "\t 1999 & Q2 & 5651 & 14775 & 3902 & 7883 & 7351 & 9672 & 7690 & 9948\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/markdown": [
+ "\n",
+ "Year | Quarter | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 | \n",
+ "|---|---|---|---|---|---|\n",
+ "| 1998 | Q1 | 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 | \n",
+ "| 1998 | Q2 | 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 | \n",
+ "| 1998 | Q3 | 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 | \n",
+ "| 1998 | Q4 | 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 | \n",
+ "| 1999 | Q1 | 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 | \n",
+ "| 1999 | Q2 | 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 | \n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ " Year Quarter Product.1 Product.2 Product.3 Product.4 Product.5 Product.6\n",
+ "1 1998 Q1 7320 21782 4865 14054 9055 8016 \n",
+ "2 1998 Q2 6117 16881 4100 8237 5616 8461 \n",
+ "3 1998 Q3 6282 13495 4418 6731 8298 13175 \n",
+ "4 1998 Q4 6368 15963 5157 7675 6674 9092 \n",
+ "5 1999 Q1 6602 22718 5550 13581 9168 10224 \n",
+ "6 1999 Q2 5651 14775 3902 7883 7351 9672 \n",
+ " Product.7 Product.8\n",
+ "1 9178 10232 \n",
+ "2 6362 9540 \n",
+ "3 7965 12385 \n",
+ "4 6864 13098 \n",
+ "5 8908 10140 \n",
+ "6 7690 9948 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "## Read data\n",
+ "\n",
+ "dspath <- file.path(wd, \"Data\", \"productQuantity.csv\")\n",
+ "\n",
+ "data <- read.table(dspath, header=TRUE, sep=\",\")\n",
+ "\n",
+ "dim(data) # 56 11\n",
+ "\n",
+ "str(data)\n",
+ "\n",
+ "head(data)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Handling missing value\n",
+ "\n",
+ "To clean the data, we remove some of columns with too many NAs (>10%) and replace other missing values with last-observation-carried-forward method."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "attributes": {
+ "classes": [],
+ "error": "FALSE",
+ "id": "",
+ "message": "FALSE,",
+ "warning": "FALSE,"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\t- 56
\n",
+ "\t- 10
\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{enumerate*}\n",
+ "\\item 56\n",
+ "\\item 10\n",
+ "\\end{enumerate*}\n"
+ ],
+ "text/markdown": [
+ "1. 56\n",
+ "2. 10\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "[1] 56 10"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\t- 56
\n",
+ "\t- 10
\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{enumerate*}\n",
+ "\\item 56\n",
+ "\\item 10\n",
+ "\\end{enumerate*}\n"
+ ],
+ "text/markdown": [
+ "1. 56\n",
+ "2. 10\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "[1] 56 10"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\t- 56
\n",
+ "\t- 10
\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{enumerate*}\n",
+ "\\item 56\n",
+ "\\item 10\n",
+ "\\end{enumerate*}\n"
+ ],
+ "text/markdown": [
+ "1. 56\n",
+ "2. 10\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "[1] 56 10"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "Year | Quarter | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 |
\n",
+ "\n",
+ "\t1998 | Q1 | 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 |
\n",
+ "\t1998 | Q2 | 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 |
\n",
+ "\t1998 | Q3 | 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 |
\n",
+ "\t1998 | Q4 | 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 |
\n",
+ "\t1999 | Q1 | 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 |
\n",
+ "\t1999 | Q2 | 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 |
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{tabular}{r|llllllllll}\n",
+ " Year & Quarter & Product.1 & Product.2 & Product.3 & Product.4 & Product.5 & Product.6 & Product.7 & Product.8\\\\\n",
+ "\\hline\n",
+ "\t 1998 & Q1 & 7320 & 21782 & 4865 & 14054 & 9055 & 8016 & 9178 & 10232\\\\\n",
+ "\t 1998 & Q2 & 6117 & 16881 & 4100 & 8237 & 5616 & 8461 & 6362 & 9540\\\\\n",
+ "\t 1998 & Q3 & 6282 & 13495 & 4418 & 6731 & 8298 & 13175 & 7965 & 12385\\\\\n",
+ "\t 1998 & Q4 & 6368 & 15963 & 5157 & 7675 & 6674 & 9092 & 6864 & 13098\\\\\n",
+ "\t 1999 & Q1 & 6602 & 22718 & 5550 & 13581 & 9168 & 10224 & 8908 & 10140\\\\\n",
+ "\t 1999 & Q2 & 5651 & 14775 & 3902 & 7883 & 7351 & 9672 & 7690 & 9948\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/markdown": [
+ "\n",
+ "Year | Quarter | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 | \n",
+ "|---|---|---|---|---|---|\n",
+ "| 1998 | Q1 | 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 | \n",
+ "| 1998 | Q2 | 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 | \n",
+ "| 1998 | Q3 | 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 | \n",
+ "| 1998 | Q4 | 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 | \n",
+ "| 1999 | Q1 | 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 | \n",
+ "| 1999 | Q2 | 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 | \n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ " Year Quarter Product.1 Product.2 Product.3 Product.4 Product.5 Product.6\n",
+ "1 1998 Q1 7320 21782 4865 14054 9055 8016 \n",
+ "2 1998 Q2 6117 16881 4100 8237 5616 8461 \n",
+ "3 1998 Q3 6282 13495 4418 6731 8298 13175 \n",
+ "4 1998 Q4 6368 15963 5157 7675 6674 9092 \n",
+ "5 1999 Q1 6602 22718 5550 13581 9168 10224 \n",
+ "6 1999 Q2 5651 14775 3902 7883 7351 9672 \n",
+ " Product.7 Product.8\n",
+ "1 9178 10232 \n",
+ "2 6362 9540 \n",
+ "3 7965 12385 \n",
+ "4 6864 13098 \n",
+ "5 8908 10140 \n",
+ "6 7690 9948 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "## Clean missing value\n",
+ "\n",
+ "# Remove columns with only NA\n",
+ "\n",
+ "data <- Filter(function(x)!all(is.na(x)), data)\n",
+ "dim(data) # 56 10\n",
+ "\n",
+ "# Remove columns with too many NAs \n",
+ "\n",
+ "data <- Filter(function(x)!(sum(is.na(x))/length(x)) > 0.1, data)\n",
+ "dim(data) # 56 10\n",
+ "\n",
+ "# Remove rows with only missing values\n",
+ "\n",
+ "missingRows <- apply(data, 1, function(x) all(is.na(x)))\n",
+ "data <- data[!missingRows, ]\n",
+ "dim(data)\n",
+ "\n",
+ "# Replace NA values with last-observation-carried-forward method\n",
+ "\n",
+ "data[,3:10] <- lapply(data[,3:10], function(x) { \n",
+ " x <- na.locf(x)\n",
+ " x\n",
+ "})\n",
+ "\n",
+ "head(data)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Model building\n",
+ "\n",
+ "We aim to build a time series model to fit the whole product booking quantity data. \n",
+ "\n",
+ "### Hierachical time series model\n",
+ "\n",
+ "Hierarchical time series forecasting methods can be implemented in the hts package (Hyndman et al. 2014) for R (R Core Team 2013).\n",
+ "\n",
+ "We can use hts function to create a hierarchical time series. The required inputs are the bottom-level time series, and information about the hierarchical structure. Knowing from the product category dataset, we can try this hierarchical structure: the series for product 1 and 2 belong to category A, series for product 3-8 belong to the category B.\n",
+ "\n",
+ "Let's have a look at this 3-level hierarchical time series."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 |
\n",
+ "\n",
+ "\t7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 |
\n",
+ "\t6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 |
\n",
+ "\t6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 |
\n",
+ "\t6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 |
\n",
+ "\t6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 |
\n",
+ "\t5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 |
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{tabular}{llllllll}\n",
+ " Product.1 & Product.2 & Product.3 & Product.4 & Product.5 & Product.6 & Product.7 & Product.8\\\\\n",
+ "\\hline\n",
+ "\t 7320 & 21782 & 4865 & 14054 & 9055 & 8016 & 9178 & 10232\\\\\n",
+ "\t 6117 & 16881 & 4100 & 8237 & 5616 & 8461 & 6362 & 9540\\\\\n",
+ "\t 6282 & 13495 & 4418 & 6731 & 8298 & 13175 & 7965 & 12385\\\\\n",
+ "\t 6368 & 15963 & 5157 & 7675 & 6674 & 9092 & 6864 & 13098\\\\\n",
+ "\t 6602 & 22718 & 5550 & 13581 & 9168 & 10224 & 8908 & 10140\\\\\n",
+ "\t 5651 & 14775 & 3902 & 7883 & 7351 & 9672 & 7690 & 9948\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/markdown": [
+ "\n",
+ "Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 | \n",
+ "|---|---|---|---|---|---|\n",
+ "| 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 | \n",
+ "| 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 | \n",
+ "| 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 | \n",
+ "| 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 | \n",
+ "| 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 | \n",
+ "| 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 | \n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ " Product.1 Product.2 Product.3 Product.4 Product.5 Product.6 Product.7\n",
+ "[1,] 7320 21782 4865 14054 9055 8016 9178 \n",
+ "[2,] 6117 16881 4100 8237 5616 8461 6362 \n",
+ "[3,] 6282 13495 4418 6731 8298 13175 7965 \n",
+ "[4,] 6368 15963 5157 7675 6674 9092 6864 \n",
+ "[5,] 6602 22718 5550 13581 9168 10224 8908 \n",
+ "[6,] 5651 14775 3902 7883 7351 9672 7690 \n",
+ " Product.8\n",
+ "[1,] 10232 \n",
+ "[2,] 9540 \n",
+ "[3,] 12385 \n",
+ "[4,] 13098 \n",
+ "[5,] 10140 \n",
+ "[6,] 9948 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "## Hierarchical time series modeling \n",
+ "\n",
+ "# Construct time series matrix\n",
+ "\n",
+ "bts <- ts(data[, 3:10], frequency=4, start=c(1998, 1))\n",
+ "\n",
+ "head(bts)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Since argument characters are not specified, the default labelling system is used.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\t- $bts
\n",
+ "\t\t\n",
+ "Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 |
\n",
+ "\n",
+ "\t7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 |
\n",
+ "\t6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 |
\n",
+ "\t6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 |
\n",
+ "\t6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 |
\n",
+ "\t6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 |
\n",
+ "\t5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 |
\n",
+ "\t5710 | 14634 | 3970 | 6516 | 8322 | 14376 | 7998 | 10653 |
\n",
+ "\t6509 | 15669 | 3825 | 6834 | 7017 | 10620 | 7068 | 10781 |
\n",
+ "\t6589 | 20474 | 5706 | 12561 | 8706 | 9668 | 10484 | 11462 |
\n",
+ "\t5392 | 14522 | 4228 | 7801 | 7045 | 8885 | 7377 | 9217 |
\n",
+ "\t7156 | 13761 | 4066 | 6393 | 8501 | 11980 | 6965 | 11586 |
\n",
+ "\t8426 | 15378 | 4617 | 7976 | 6856 | 10241 | 8360 | 11005 |
\n",
+ "\t6981 | 19960 | 5675 | 13000 | 7706 | 9460 | 7765 | 9842 |
\n",
+ "\t6333 | 15152 | 4585 | 7478 | 7017 | 9804 | 7192 | 10412 |
\n",
+ "\t6062 | 13806 | 4743 | 6754 | 8728 | 12406 | 7391 | 9946 |
\n",
+ "\t6088 | 14125 | 5724 | 7314 | 8302 | 10667 | 7325 | 11901 |
\n",
+ "\t5579 | 21047 | 5378 | 13045 | 9173 | 9915 | 9009 | 10786 |
\n",
+ "\t5780 | 14835 | 3884 | 7904 | 6612 | 7600 | 7023 | 9888 |
\n",
+ "\t5833 | 16198 | 4978 | 6808 | 7955 | 14730 | 7825 | 11221 |
\n",
+ "\t5977 | 16748 | 5289 | 8521 | 8964 | 9950 | 7310 | 12892 |
\n",
+ "\t6203 | 21010 | 5220 | 12193 | 9970 | 9952 | 8110 | 11205 |
\n",
+ "\t5313 | 14527 | 4722 | 8460 | 7131 | 9448 | 7170 | 10420 |
\n",
+ "\t5119 | 14095 | 4124 | 6886 | 8271 | 13691 | 7020 | 12189 |
\n",
+ "\t5734 | 15309 | 4680 | 7938 | 7927 | 11110 | 7129 | 11835 |
\n",
+ "\t6167 | 20957 | 4878 | 13186 | 9087 | 9279 | 9665 | 12619 |
\n",
+ "\t5708 | 14813 | 4868 | 8723 | 6995 | 9161 | 7671 | 9040 |
\n",
+ "\t5021 | 14590 | 4177 | 6807 | 8756 | 15078 | 7391 | 12017 |
\n",
+ "\t5357 | 15773 | 4176 | 7635 | 8491 | 9616 | 7885 | 11291 |
\n",
+ "\t5901 | 21953 | 5438 | 13129 | 9325 | 10281 | 8927 | 11040 |
\n",
+ "\t4491 | 13146 | 3870 | 6744 | 6835 | 8853 | 6955 | 8741 |
\n",
+ "\t5092 | 13025 | 4370 | 5820 | 8269 | 11874 | 7867 | 10523 |
\n",
+ "\t5246 | 12835 | 4377 | 7111 | 6986 | 10990 | 6794 | 9051 |
\n",
+ "\t6819 | 20139 | 5704 | 12397 | 9156 | 9528 | 8018 | 10885 |
\n",
+ "\t5663 | 14433 | 5285 | 7600 | 7077 | 9417 | 8276 | 9769 |
\n",
+ "\t4997 | 13912 | 4165 | 6049 | 7044 | 12744 | 7487 | 9546 |
\n",
+ "\t5751 | 14294 | 4700 | 7393 | 8552 | 10930 | 7941 | 9989 |
\n",
+ "\t6521 | 19774 | 4703 | 14071 | 8705 | 11103 | 9992 | 11372 |
\n",
+ "\t4910 | 14682 | 4488 | 7286 | 7750 | 9958 | 8648 | 9675 |
\n",
+ "\t4784 | 12651 | 4698 | 5800 | 8163 | 14211 | 7650 | 11555 |
\n",
+ "\t5844 | 14475 | 5192 | 7472 | 7806 | 10207 | 7938 | 10270 |
\n",
+ "\t6252 | 21300 | 5217 | 13768 | 8466 | 12449 | 8597 | 10963 |
\n",
+ "\t5023 | 12874 | 4201 | 6844 | 6345 | 9091 | 6598 | 8786 |
\n",
+ "\t5264 | 12216 | 5042 | 5911 | 7151 | 12049 | 7910 | 10870 |
\n",
+ "\t4708 | 14938 | 5087 | 7160 | 8299 | 9095 | 7110 | 8281 |
\n",
+ "\t5356 | 19148 | 4688 | 11017 | 7830 | 8918 | 8004 | 9417 |
\n",
+ "\t4769 | 11967 | 4392 | 7054 | 5812 | 9174 | 6686 | 8082 |
\n",
+ "\t4118 | 12199 | 4609 | 6460 | 7348 | 14094 | 6817 | 9758 |
\n",
+ "\t5264 | 14866 | 4879 | 7216 | 6521 | 10465 | 7317 | 7991 |
\n",
+ "\t6000 | 18314 | 4844 | 11791 | 7545 | 9350 | 8134 | 8657 |
\n",
+ "\t4283 | 12653 | 4437 | 7319 | 6566 | 9266 | 7597 | 7583 |
\n",
+ "\t5253 | 14023 | 4821 | 5990 | 7717 | 13311 | 6252 | 10167 |
\n",
+ "\t5355 | 13785 | 4621 | 7245 | 7992 | 9915 | 6886 | 7722 |
\n",
+ "\t6193 | 19021 | 5163 | 11910 | 6401 | 6335 | 7336 | 9915 |
\n",
+ "\t5102 | 13989 | 4502 | 7769 | 7747 | 9348 | 6394 | 8055 |
\n",
+ "\t5577 | 13627 | 4966 | 6574 | 7283 | 14285 | 7268 | 10919 |
\n",
+ "\t5064 | 13951 | 4474 | 7571 | 7359 | 10112 | 7637 | 8726 |
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "\t- $nodes
\n",
+ "\t\t\n",
+ "\t- $`Level 1`
\n",
+ "\t\t- 2
\n",
+ "\t- $`Level 2`
\n",
+ "\t\t\n",
+ "\t- 2
\n",
+ "\t- 6
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ " \n",
+ "\t- $labels
\n",
+ "\t\t\n",
+ "\t- $Total
\n",
+ "\t\t- 'Total'
\n",
+ "\t- $Category
\n",
+ "\t\t\n",
+ "\t- 'Category.A'
\n",
+ "\t- 'Category.B'
\n",
+ "
\n",
+ " \n",
+ "\t- $Product
\n",
+ "\t\t\n",
+ "\t- 'Product.1'
\n",
+ "\t- 'Product.2'
\n",
+ "\t- 'Product.3'
\n",
+ "\t- 'Product.4'
\n",
+ "\t- 'Product.5'
\n",
+ "\t- 'Product.6'
\n",
+ "\t- 'Product.7'
\n",
+ "\t- 'Product.8'
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ " \n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{description}\n",
+ "\\item[\\$bts] \\begin{tabular}{llllllll}\n",
+ " Product.1 & Product.2 & Product.3 & Product.4 & Product.5 & Product.6 & Product.7 & Product.8\\\\\n",
+ "\\hline\n",
+ "\t 7320 & 21782 & 4865 & 14054 & 9055 & 8016 & 9178 & 10232\\\\\n",
+ "\t 6117 & 16881 & 4100 & 8237 & 5616 & 8461 & 6362 & 9540\\\\\n",
+ "\t 6282 & 13495 & 4418 & 6731 & 8298 & 13175 & 7965 & 12385\\\\\n",
+ "\t 6368 & 15963 & 5157 & 7675 & 6674 & 9092 & 6864 & 13098\\\\\n",
+ "\t 6602 & 22718 & 5550 & 13581 & 9168 & 10224 & 8908 & 10140\\\\\n",
+ "\t 5651 & 14775 & 3902 & 7883 & 7351 & 9672 & 7690 & 9948\\\\\n",
+ "\t 5710 & 14634 & 3970 & 6516 & 8322 & 14376 & 7998 & 10653\\\\\n",
+ "\t 6509 & 15669 & 3825 & 6834 & 7017 & 10620 & 7068 & 10781\\\\\n",
+ "\t 6589 & 20474 & 5706 & 12561 & 8706 & 9668 & 10484 & 11462\\\\\n",
+ "\t 5392 & 14522 & 4228 & 7801 & 7045 & 8885 & 7377 & 9217\\\\\n",
+ "\t 7156 & 13761 & 4066 & 6393 & 8501 & 11980 & 6965 & 11586\\\\\n",
+ "\t 8426 & 15378 & 4617 & 7976 & 6856 & 10241 & 8360 & 11005\\\\\n",
+ "\t 6981 & 19960 & 5675 & 13000 & 7706 & 9460 & 7765 & 9842\\\\\n",
+ "\t 6333 & 15152 & 4585 & 7478 & 7017 & 9804 & 7192 & 10412\\\\\n",
+ "\t 6062 & 13806 & 4743 & 6754 & 8728 & 12406 & 7391 & 9946\\\\\n",
+ "\t 6088 & 14125 & 5724 & 7314 & 8302 & 10667 & 7325 & 11901\\\\\n",
+ "\t 5579 & 21047 & 5378 & 13045 & 9173 & 9915 & 9009 & 10786\\\\\n",
+ "\t 5780 & 14835 & 3884 & 7904 & 6612 & 7600 & 7023 & 9888\\\\\n",
+ "\t 5833 & 16198 & 4978 & 6808 & 7955 & 14730 & 7825 & 11221\\\\\n",
+ "\t 5977 & 16748 & 5289 & 8521 & 8964 & 9950 & 7310 & 12892\\\\\n",
+ "\t 6203 & 21010 & 5220 & 12193 & 9970 & 9952 & 8110 & 11205\\\\\n",
+ "\t 5313 & 14527 & 4722 & 8460 & 7131 & 9448 & 7170 & 10420\\\\\n",
+ "\t 5119 & 14095 & 4124 & 6886 & 8271 & 13691 & 7020 & 12189\\\\\n",
+ "\t 5734 & 15309 & 4680 & 7938 & 7927 & 11110 & 7129 & 11835\\\\\n",
+ "\t 6167 & 20957 & 4878 & 13186 & 9087 & 9279 & 9665 & 12619\\\\\n",
+ "\t 5708 & 14813 & 4868 & 8723 & 6995 & 9161 & 7671 & 9040\\\\\n",
+ "\t 5021 & 14590 & 4177 & 6807 & 8756 & 15078 & 7391 & 12017\\\\\n",
+ "\t 5357 & 15773 & 4176 & 7635 & 8491 & 9616 & 7885 & 11291\\\\\n",
+ "\t 5901 & 21953 & 5438 & 13129 & 9325 & 10281 & 8927 & 11040\\\\\n",
+ "\t 4491 & 13146 & 3870 & 6744 & 6835 & 8853 & 6955 & 8741\\\\\n",
+ "\t 5092 & 13025 & 4370 & 5820 & 8269 & 11874 & 7867 & 10523\\\\\n",
+ "\t 5246 & 12835 & 4377 & 7111 & 6986 & 10990 & 6794 & 9051\\\\\n",
+ "\t 6819 & 20139 & 5704 & 12397 & 9156 & 9528 & 8018 & 10885\\\\\n",
+ "\t 5663 & 14433 & 5285 & 7600 & 7077 & 9417 & 8276 & 9769\\\\\n",
+ "\t 4997 & 13912 & 4165 & 6049 & 7044 & 12744 & 7487 & 9546\\\\\n",
+ "\t 5751 & 14294 & 4700 & 7393 & 8552 & 10930 & 7941 & 9989\\\\\n",
+ "\t 6521 & 19774 & 4703 & 14071 & 8705 & 11103 & 9992 & 11372\\\\\n",
+ "\t 4910 & 14682 & 4488 & 7286 & 7750 & 9958 & 8648 & 9675\\\\\n",
+ "\t 4784 & 12651 & 4698 & 5800 & 8163 & 14211 & 7650 & 11555\\\\\n",
+ "\t 5844 & 14475 & 5192 & 7472 & 7806 & 10207 & 7938 & 10270\\\\\n",
+ "\t 6252 & 21300 & 5217 & 13768 & 8466 & 12449 & 8597 & 10963\\\\\n",
+ "\t 5023 & 12874 & 4201 & 6844 & 6345 & 9091 & 6598 & 8786\\\\\n",
+ "\t 5264 & 12216 & 5042 & 5911 & 7151 & 12049 & 7910 & 10870\\\\\n",
+ "\t 4708 & 14938 & 5087 & 7160 & 8299 & 9095 & 7110 & 8281\\\\\n",
+ "\t 5356 & 19148 & 4688 & 11017 & 7830 & 8918 & 8004 & 9417\\\\\n",
+ "\t 4769 & 11967 & 4392 & 7054 & 5812 & 9174 & 6686 & 8082\\\\\n",
+ "\t 4118 & 12199 & 4609 & 6460 & 7348 & 14094 & 6817 & 9758\\\\\n",
+ "\t 5264 & 14866 & 4879 & 7216 & 6521 & 10465 & 7317 & 7991\\\\\n",
+ "\t 6000 & 18314 & 4844 & 11791 & 7545 & 9350 & 8134 & 8657\\\\\n",
+ "\t 4283 & 12653 & 4437 & 7319 & 6566 & 9266 & 7597 & 7583\\\\\n",
+ "\t 5253 & 14023 & 4821 & 5990 & 7717 & 13311 & 6252 & 10167\\\\\n",
+ "\t 5355 & 13785 & 4621 & 7245 & 7992 & 9915 & 6886 & 7722\\\\\n",
+ "\t 6193 & 19021 & 5163 & 11910 & 6401 & 6335 & 7336 & 9915\\\\\n",
+ "\t 5102 & 13989 & 4502 & 7769 & 7747 & 9348 & 6394 & 8055\\\\\n",
+ "\t 5577 & 13627 & 4966 & 6574 & 7283 & 14285 & 7268 & 10919\\\\\n",
+ "\t 5064 & 13951 & 4474 & 7571 & 7359 & 10112 & 7637 & 8726\\\\\n",
+ "\\end{tabular}\n",
+ "\n",
+ "\\item[\\$nodes] \\begin{description}\n",
+ "\\item[\\$`Level 1`] 2\n",
+ "\\item[\\$`Level 2`] \\begin{enumerate*}\n",
+ "\\item 2\n",
+ "\\item 6\n",
+ "\\end{enumerate*}\n",
+ "\n",
+ "\\end{description}\n",
+ "\n",
+ "\\item[\\$labels] \\begin{description}\n",
+ "\\item[\\$Total] 'Total'\n",
+ "\\item[\\$Category] \\begin{enumerate*}\n",
+ "\\item 'Category.A'\n",
+ "\\item 'Category.B'\n",
+ "\\end{enumerate*}\n",
+ "\n",
+ "\\item[\\$Product] \\begin{enumerate*}\n",
+ "\\item 'Product.1'\n",
+ "\\item 'Product.2'\n",
+ "\\item 'Product.3'\n",
+ "\\item 'Product.4'\n",
+ "\\item 'Product.5'\n",
+ "\\item 'Product.6'\n",
+ "\\item 'Product.7'\n",
+ "\\item 'Product.8'\n",
+ "\\end{enumerate*}\n",
+ "\n",
+ "\\end{description}\n",
+ "\n",
+ "\\end{description}\n"
+ ],
+ "text/markdown": [
+ "$bts\n",
+ ": \n",
+ "Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 | \n",
+ "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n",
+ "| 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 | \n",
+ "| 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 | \n",
+ "| 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 | \n",
+ "| 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 | \n",
+ "| 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 | \n",
+ "| 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 | \n",
+ "| 5710 | 14634 | 3970 | 6516 | 8322 | 14376 | 7998 | 10653 | \n",
+ "| 6509 | 15669 | 3825 | 6834 | 7017 | 10620 | 7068 | 10781 | \n",
+ "| 6589 | 20474 | 5706 | 12561 | 8706 | 9668 | 10484 | 11462 | \n",
+ "| 5392 | 14522 | 4228 | 7801 | 7045 | 8885 | 7377 | 9217 | \n",
+ "| 7156 | 13761 | 4066 | 6393 | 8501 | 11980 | 6965 | 11586 | \n",
+ "| 8426 | 15378 | 4617 | 7976 | 6856 | 10241 | 8360 | 11005 | \n",
+ "| 6981 | 19960 | 5675 | 13000 | 7706 | 9460 | 7765 | 9842 | \n",
+ "| 6333 | 15152 | 4585 | 7478 | 7017 | 9804 | 7192 | 10412 | \n",
+ "| 6062 | 13806 | 4743 | 6754 | 8728 | 12406 | 7391 | 9946 | \n",
+ "| 6088 | 14125 | 5724 | 7314 | 8302 | 10667 | 7325 | 11901 | \n",
+ "| 5579 | 21047 | 5378 | 13045 | 9173 | 9915 | 9009 | 10786 | \n",
+ "| 5780 | 14835 | 3884 | 7904 | 6612 | 7600 | 7023 | 9888 | \n",
+ "| 5833 | 16198 | 4978 | 6808 | 7955 | 14730 | 7825 | 11221 | \n",
+ "| 5977 | 16748 | 5289 | 8521 | 8964 | 9950 | 7310 | 12892 | \n",
+ "| 6203 | 21010 | 5220 | 12193 | 9970 | 9952 | 8110 | 11205 | \n",
+ "| 5313 | 14527 | 4722 | 8460 | 7131 | 9448 | 7170 | 10420 | \n",
+ "| 5119 | 14095 | 4124 | 6886 | 8271 | 13691 | 7020 | 12189 | \n",
+ "| 5734 | 15309 | 4680 | 7938 | 7927 | 11110 | 7129 | 11835 | \n",
+ "| 6167 | 20957 | 4878 | 13186 | 9087 | 9279 | 9665 | 12619 | \n",
+ "| 5708 | 14813 | 4868 | 8723 | 6995 | 9161 | 7671 | 9040 | \n",
+ "| 5021 | 14590 | 4177 | 6807 | 8756 | 15078 | 7391 | 12017 | \n",
+ "| 5357 | 15773 | 4176 | 7635 | 8491 | 9616 | 7885 | 11291 | \n",
+ "| 5901 | 21953 | 5438 | 13129 | 9325 | 10281 | 8927 | 11040 | \n",
+ "| 4491 | 13146 | 3870 | 6744 | 6835 | 8853 | 6955 | 8741 | \n",
+ "| 5092 | 13025 | 4370 | 5820 | 8269 | 11874 | 7867 | 10523 | \n",
+ "| 5246 | 12835 | 4377 | 7111 | 6986 | 10990 | 6794 | 9051 | \n",
+ "| 6819 | 20139 | 5704 | 12397 | 9156 | 9528 | 8018 | 10885 | \n",
+ "| 5663 | 14433 | 5285 | 7600 | 7077 | 9417 | 8276 | 9769 | \n",
+ "| 4997 | 13912 | 4165 | 6049 | 7044 | 12744 | 7487 | 9546 | \n",
+ "| 5751 | 14294 | 4700 | 7393 | 8552 | 10930 | 7941 | 9989 | \n",
+ "| 6521 | 19774 | 4703 | 14071 | 8705 | 11103 | 9992 | 11372 | \n",
+ "| 4910 | 14682 | 4488 | 7286 | 7750 | 9958 | 8648 | 9675 | \n",
+ "| 4784 | 12651 | 4698 | 5800 | 8163 | 14211 | 7650 | 11555 | \n",
+ "| 5844 | 14475 | 5192 | 7472 | 7806 | 10207 | 7938 | 10270 | \n",
+ "| 6252 | 21300 | 5217 | 13768 | 8466 | 12449 | 8597 | 10963 | \n",
+ "| 5023 | 12874 | 4201 | 6844 | 6345 | 9091 | 6598 | 8786 | \n",
+ "| 5264 | 12216 | 5042 | 5911 | 7151 | 12049 | 7910 | 10870 | \n",
+ "| 4708 | 14938 | 5087 | 7160 | 8299 | 9095 | 7110 | 8281 | \n",
+ "| 5356 | 19148 | 4688 | 11017 | 7830 | 8918 | 8004 | 9417 | \n",
+ "| 4769 | 11967 | 4392 | 7054 | 5812 | 9174 | 6686 | 8082 | \n",
+ "| 4118 | 12199 | 4609 | 6460 | 7348 | 14094 | 6817 | 9758 | \n",
+ "| 5264 | 14866 | 4879 | 7216 | 6521 | 10465 | 7317 | 7991 | \n",
+ "| 6000 | 18314 | 4844 | 11791 | 7545 | 9350 | 8134 | 8657 | \n",
+ "| 4283 | 12653 | 4437 | 7319 | 6566 | 9266 | 7597 | 7583 | \n",
+ "| 5253 | 14023 | 4821 | 5990 | 7717 | 13311 | 6252 | 10167 | \n",
+ "| 5355 | 13785 | 4621 | 7245 | 7992 | 9915 | 6886 | 7722 | \n",
+ "| 6193 | 19021 | 5163 | 11910 | 6401 | 6335 | 7336 | 9915 | \n",
+ "| 5102 | 13989 | 4502 | 7769 | 7747 | 9348 | 6394 | 8055 | \n",
+ "| 5577 | 13627 | 4966 | 6574 | 7283 | 14285 | 7268 | 10919 | \n",
+ "| 5064 | 13951 | 4474 | 7571 | 7359 | 10112 | 7637 | 8726 | \n",
+ "\n",
+ "\n",
+ "\n",
+ "$nodes\n",
+ ": $`Level 1`\n",
+ ": 2\n",
+ "$`Level 2`\n",
+ ": 1. 2\n",
+ "2. 6\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "$labels\n",
+ ": $Total\n",
+ ": 'Total'\n",
+ "$Category\n",
+ ": 1. 'Category.A'\n",
+ "2. 'Category.B'\n",
+ "\n",
+ "\n",
+ "\n",
+ "$Product\n",
+ ": 1. 'Product.1'\n",
+ "2. 'Product.2'\n",
+ "3. 'Product.3'\n",
+ "4. 'Product.4'\n",
+ "5. 'Product.5'\n",
+ "6. 'Product.6'\n",
+ "7. 'Product.7'\n",
+ "8. 'Product.8'\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ "$bts\n",
+ " Product.1 Product.2 Product.3 Product.4 Product.5 Product.6 Product.7\n",
+ "1998 Q1 7320 21782 4865 14054 9055 8016 9178\n",
+ "1998 Q2 6117 16881 4100 8237 5616 8461 6362\n",
+ "1998 Q3 6282 13495 4418 6731 8298 13175 7965\n",
+ "1998 Q4 6368 15963 5157 7675 6674 9092 6864\n",
+ "1999 Q1 6602 22718 5550 13581 9168 10224 8908\n",
+ "1999 Q2 5651 14775 3902 7883 7351 9672 7690\n",
+ "1999 Q3 5710 14634 3970 6516 8322 14376 7998\n",
+ "1999 Q4 6509 15669 3825 6834 7017 10620 7068\n",
+ "2000 Q1 6589 20474 5706 12561 8706 9668 10484\n",
+ "2000 Q2 5392 14522 4228 7801 7045 8885 7377\n",
+ "2000 Q3 7156 13761 4066 6393 8501 11980 6965\n",
+ "2000 Q4 8426 15378 4617 7976 6856 10241 8360\n",
+ "2001 Q1 6981 19960 5675 13000 7706 9460 7765\n",
+ "2001 Q2 6333 15152 4585 7478 7017 9804 7192\n",
+ "2001 Q3 6062 13806 4743 6754 8728 12406 7391\n",
+ "2001 Q4 6088 14125 5724 7314 8302 10667 7325\n",
+ "2002 Q1 5579 21047 5378 13045 9173 9915 9009\n",
+ "2002 Q2 5780 14835 3884 7904 6612 7600 7023\n",
+ "2002 Q3 5833 16198 4978 6808 7955 14730 7825\n",
+ "2002 Q4 5977 16748 5289 8521 8964 9950 7310\n",
+ "2003 Q1 6203 21010 5220 12193 9970 9952 8110\n",
+ "2003 Q2 5313 14527 4722 8460 7131 9448 7170\n",
+ "2003 Q3 5119 14095 4124 6886 8271 13691 7020\n",
+ "2003 Q4 5734 15309 4680 7938 7927 11110 7129\n",
+ "2004 Q1 6167 20957 4878 13186 9087 9279 9665\n",
+ "2004 Q2 5708 14813 4868 8723 6995 9161 7671\n",
+ "2004 Q3 5021 14590 4177 6807 8756 15078 7391\n",
+ "2004 Q4 5357 15773 4176 7635 8491 9616 7885\n",
+ "2005 Q1 5901 21953 5438 13129 9325 10281 8927\n",
+ "2005 Q2 4491 13146 3870 6744 6835 8853 6955\n",
+ "2005 Q3 5092 13025 4370 5820 8269 11874 7867\n",
+ "2005 Q4 5246 12835 4377 7111 6986 10990 6794\n",
+ "2006 Q1 6819 20139 5704 12397 9156 9528 8018\n",
+ "2006 Q2 5663 14433 5285 7600 7077 9417 8276\n",
+ "2006 Q3 4997 13912 4165 6049 7044 12744 7487\n",
+ "2006 Q4 5751 14294 4700 7393 8552 10930 7941\n",
+ "2007 Q1 6521 19774 4703 14071 8705 11103 9992\n",
+ "2007 Q2 4910 14682 4488 7286 7750 9958 8648\n",
+ "2007 Q3 4784 12651 4698 5800 8163 14211 7650\n",
+ "2007 Q4 5844 14475 5192 7472 7806 10207 7938\n",
+ "2008 Q1 6252 21300 5217 13768 8466 12449 8597\n",
+ "2008 Q2 5023 12874 4201 6844 6345 9091 6598\n",
+ "2008 Q3 5264 12216 5042 5911 7151 12049 7910\n",
+ "2008 Q4 4708 14938 5087 7160 8299 9095 7110\n",
+ "2009 Q1 5356 19148 4688 11017 7830 8918 8004\n",
+ "2009 Q2 4769 11967 4392 7054 5812 9174 6686\n",
+ "2009 Q3 4118 12199 4609 6460 7348 14094 6817\n",
+ "2009 Q4 5264 14866 4879 7216 6521 10465 7317\n",
+ "2010 Q1 6000 18314 4844 11791 7545 9350 8134\n",
+ "2010 Q2 4283 12653 4437 7319 6566 9266 7597\n",
+ "2010 Q3 5253 14023 4821 5990 7717 13311 6252\n",
+ "2010 Q4 5355 13785 4621 7245 7992 9915 6886\n",
+ "2011 Q1 6193 19021 5163 11910 6401 6335 7336\n",
+ "2011 Q2 5102 13989 4502 7769 7747 9348 6394\n",
+ "2011 Q3 5577 13627 4966 6574 7283 14285 7268\n",
+ "2011 Q4 5064 13951 4474 7571 7359 10112 7637\n",
+ " Product.8\n",
+ "1998 Q1 10232\n",
+ "1998 Q2 9540\n",
+ "1998 Q3 12385\n",
+ "1998 Q4 13098\n",
+ "1999 Q1 10140\n",
+ "1999 Q2 9948\n",
+ "1999 Q3 10653\n",
+ "1999 Q4 10781\n",
+ "2000 Q1 11462\n",
+ "2000 Q2 9217\n",
+ "2000 Q3 11586\n",
+ "2000 Q4 11005\n",
+ "2001 Q1 9842\n",
+ "2001 Q2 10412\n",
+ "2001 Q3 9946\n",
+ "2001 Q4 11901\n",
+ "2002 Q1 10786\n",
+ "2002 Q2 9888\n",
+ "2002 Q3 11221\n",
+ "2002 Q4 12892\n",
+ "2003 Q1 11205\n",
+ "2003 Q2 10420\n",
+ "2003 Q3 12189\n",
+ "2003 Q4 11835\n",
+ "2004 Q1 12619\n",
+ "2004 Q2 9040\n",
+ "2004 Q3 12017\n",
+ "2004 Q4 11291\n",
+ "2005 Q1 11040\n",
+ "2005 Q2 8741\n",
+ "2005 Q3 10523\n",
+ "2005 Q4 9051\n",
+ "2006 Q1 10885\n",
+ "2006 Q2 9769\n",
+ "2006 Q3 9546\n",
+ "2006 Q4 9989\n",
+ "2007 Q1 11372\n",
+ "2007 Q2 9675\n",
+ "2007 Q3 11555\n",
+ "2007 Q4 10270\n",
+ "2008 Q1 10963\n",
+ "2008 Q2 8786\n",
+ "2008 Q3 10870\n",
+ "2008 Q4 8281\n",
+ "2009 Q1 9417\n",
+ "2009 Q2 8082\n",
+ "2009 Q3 9758\n",
+ "2009 Q4 7991\n",
+ "2010 Q1 8657\n",
+ "2010 Q2 7583\n",
+ "2010 Q3 10167\n",
+ "2010 Q4 7722\n",
+ "2011 Q1 9915\n",
+ "2011 Q2 8055\n",
+ "2011 Q3 10919\n",
+ "2011 Q4 8726\n",
+ "\n",
+ "$nodes\n",
+ "$nodes$`Level 1`\n",
+ "[1] 2\n",
+ "\n",
+ "$nodes$`Level 2`\n",
+ "[1] 2 6\n",
+ "\n",
+ "\n",
+ "$labels\n",
+ "$labels$Total\n",
+ "[1] \"Total\"\n",
+ "\n",
+ "$labels$Category\n",
+ "[1] \"Category.A\" \"Category.B\"\n",
+ "\n",
+ "$labels$Product\n",
+ "[1] \"Product.1\" \"Product.2\" \"Product.3\" \"Product.4\" \"Product.5\" \"Product.6\"\n",
+ "[7] \"Product.7\" \"Product.8\"\n",
+ "\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Hierarchical Time Series \n",
+ "3 Levels \n",
+ "Number of nodes at each level: 1 2 8 \n",
+ "Total number of series: 11 \n",
+ "Number of observations per series: 56 \n",
+ "Top level series: \n",
+ " Qtr1 Qtr2 Qtr3 Qtr4\n",
+ "1998 84502 65314 72749 70891\n",
+ "1999 86891 66872 72179 68323\n",
+ "2000 85650 64467 70408 72859\n",
+ "2001 80389 67973 69836 71446\n",
+ "2002 83932 63526 75548 75651\n",
+ "2003 83863 67191 71395 71662\n",
+ "2004 85838 66979 73837 70224\n",
+ "2005 85994 59635 66840 63390\n",
+ "2006 82646 67520 65944 69550\n",
+ "2007 86241 67397 69512 69204\n",
+ "2008 87012 59762 66413 64678\n",
+ "2009 74378 57936 65403 64519\n",
+ "2010 74635 59704 67534 63521\n",
+ "2011 72274 62906 70499 64894\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Create 3-level hierarchical time series\n",
+ "\n",
+ "demandgts <- hts(bts, nodes=list(2, c(2, 6)))\n",
+ "\n",
+ "# Rename the nodes of the hierarchy\n",
+ "\n",
+ "demandgts$labels$`Level 1` <- c(\"Category.A\", \"Category.B\")\n",
+ "demandgts$labels$`Level 2` <- c(\"Product.1\", \"Product.2\", \"Product.3\", \"Product.4\", \n",
+ " \"Product.5\", \"Product.6\", \"Product.7\", \"Product.8\")\n",
+ "names(demandgts$labels) <- c(\"Total\", \"Category\", \"Product\")\n",
+ "\n",
+ "head(demandgts)\n",
+ "print(demandgts)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "Total | Category.A | Category.B | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 |
\n",
+ "\n",
+ "\t84502 | 29102 | 55400 | 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 |
\n",
+ "\t65314 | 22998 | 42316 | 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 |
\n",
+ "\t72749 | 19777 | 52972 | 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 |
\n",
+ "\t70891 | 22331 | 48560 | 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 |
\n",
+ "\t86891 | 29320 | 57571 | 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 |
\n",
+ "\t66872 | 20426 | 46446 | 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 |
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{tabular}{lllllllllll}\n",
+ " Total & Category.A & Category.B & Product.1 & Product.2 & Product.3 & Product.4 & Product.5 & Product.6 & Product.7 & Product.8\\\\\n",
+ "\\hline\n",
+ "\t 84502 & 29102 & 55400 & 7320 & 21782 & 4865 & 14054 & 9055 & 8016 & 9178 & 10232\\\\\n",
+ "\t 65314 & 22998 & 42316 & 6117 & 16881 & 4100 & 8237 & 5616 & 8461 & 6362 & 9540\\\\\n",
+ "\t 72749 & 19777 & 52972 & 6282 & 13495 & 4418 & 6731 & 8298 & 13175 & 7965 & 12385\\\\\n",
+ "\t 70891 & 22331 & 48560 & 6368 & 15963 & 5157 & 7675 & 6674 & 9092 & 6864 & 13098\\\\\n",
+ "\t 86891 & 29320 & 57571 & 6602 & 22718 & 5550 & 13581 & 9168 & 10224 & 8908 & 10140\\\\\n",
+ "\t 66872 & 20426 & 46446 & 5651 & 14775 & 3902 & 7883 & 7351 & 9672 & 7690 & 9948\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/markdown": [
+ "\n",
+ "Total | Category.A | Category.B | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 | \n",
+ "|---|---|---|---|---|---|\n",
+ "| 84502 | 29102 | 55400 | 7320 | 21782 | 4865 | 14054 | 9055 | 8016 | 9178 | 10232 | \n",
+ "| 65314 | 22998 | 42316 | 6117 | 16881 | 4100 | 8237 | 5616 | 8461 | 6362 | 9540 | \n",
+ "| 72749 | 19777 | 52972 | 6282 | 13495 | 4418 | 6731 | 8298 | 13175 | 7965 | 12385 | \n",
+ "| 70891 | 22331 | 48560 | 6368 | 15963 | 5157 | 7675 | 6674 | 9092 | 6864 | 13098 | \n",
+ "| 86891 | 29320 | 57571 | 6602 | 22718 | 5550 | 13581 | 9168 | 10224 | 8908 | 10140 | \n",
+ "| 66872 | 20426 | 46446 | 5651 | 14775 | 3902 | 7883 | 7351 | 9672 | 7690 | 9948 | \n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ " Total Category.A Category.B Product.1 Product.2 Product.3 Product.4\n",
+ "[1,] 84502 29102 55400 7320 21782 4865 14054 \n",
+ "[2,] 65314 22998 42316 6117 16881 4100 8237 \n",
+ "[3,] 72749 19777 52972 6282 13495 4418 6731 \n",
+ "[4,] 70891 22331 48560 6368 15963 5157 7675 \n",
+ "[5,] 86891 29320 57571 6602 22718 5550 13581 \n",
+ "[6,] 66872 20426 46446 5651 14775 3902 7883 \n",
+ " Product.5 Product.6 Product.7 Product.8\n",
+ "[1,] 9055 8016 9178 10232 \n",
+ "[2,] 5616 8461 6362 9540 \n",
+ "[3,] 8298 13175 7965 12385 \n",
+ "[4,] 6674 9092 6864 13098 \n",
+ "[5,] 9168 10224 8908 10140 \n",
+ "[6,] 7351 9672 7690 9948 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Aggregate the hierarchy time series\n",
+ "\n",
+ "alldemand <- aggts(demandgts) \n",
+ "\n",
+ "head(alldemand)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\nClAkQhT4f9xeT1ky35u0AAAAAElFTkSuQmCC",
+ "text/plain": [
+ "Plot with title \"Product\""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(demandgts, levels=c(0, 1, 2))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "# Set up the training sample and testing sample\n",
+ "\n",
+ "traingts <- window(demandgts, start=c(1998, 1), end=c(2009, 4))\n",
+ "testgts <- window(demandgts, start=c(2010, 1), end=c(2011, 4))\n",
+ "\n",
+ "demandfcast <- forecast(object = traingts, \n",
+ " h = 8, \n",
+ " method = \"bu\", \n",
+ " fmethod = \"arima\",\n",
+ " keep.fitted = TRUE)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "Total | Category.A | Category.B | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 |
\n",
+ "\n",
+ "\t80910.32 | 25503.27 | 55407.04 | 5664.790 | 19838.48 | 4517.327 | 12756.530 | 8421.304 | 10418.541 | 9269.589 | 10023.754 |
\n",
+ "\t60955.16 | 17453.11 | 43502.04 | 4556.185 | 12896.93 | 4580.720 | 7140.095 | 6485.093 | 9190.637 | 7737.238 | 8368.259 |
\n",
+ "\t65529.24 | 16506.67 | 49022.56 | 4515.956 | 11990.72 | 4599.585 | 6089.073 | 7538.714 | 13150.783 | 7595.421 | 10048.987 |
\n",
+ "\t65158.95 | 19359.68 | 45799.27 | 5017.735 | 14341.94 | 4764.995 | 7330.315 | 7478.676 | 10180.782 | 7597.098 | 8447.406 |
\n",
+ "\t79841.63 | 25218.80 | 54622.83 | 5390.090 | 19828.71 | 4715.358 | 13041.323 | 8421.304 | 10051.862 | 8528.523 | 9864.458 |
\n",
+ "\t59045.18 | 16654.93 | 42390.25 | 4417.989 | 12236.94 | 4715.358 | 6991.294 | 6485.093 | 9186.572 | 6802.969 | 8208.963 |
\n",
+ "\t65235.18 | 16124.68 | 49110.50 | 4377.760 | 11746.92 | 4715.358 | 6046.043 | 7538.714 | 13381.272 | 7539.418 | 9889.692 |
\n",
+ "\t64429.14 | 19211.76 | 45217.38 | 4879.539 | 14332.22 | 4715.358 | 7237.603 | 7478.676 | 10250.235 | 7247.400 | 8288.111 |
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{tabular}{lllllllllll}\n",
+ " Total & Category.A & Category.B & Product.1 & Product.2 & Product.3 & Product.4 & Product.5 & Product.6 & Product.7 & Product.8\\\\\n",
+ "\\hline\n",
+ "\t 80910.32 & 25503.27 & 55407.04 & 5664.790 & 19838.48 & 4517.327 & 12756.530 & 8421.304 & 10418.541 & 9269.589 & 10023.754\\\\\n",
+ "\t 60955.16 & 17453.11 & 43502.04 & 4556.185 & 12896.93 & 4580.720 & 7140.095 & 6485.093 & 9190.637 & 7737.238 & 8368.259\\\\\n",
+ "\t 65529.24 & 16506.67 & 49022.56 & 4515.956 & 11990.72 & 4599.585 & 6089.073 & 7538.714 & 13150.783 & 7595.421 & 10048.987\\\\\n",
+ "\t 65158.95 & 19359.68 & 45799.27 & 5017.735 & 14341.94 & 4764.995 & 7330.315 & 7478.676 & 10180.782 & 7597.098 & 8447.406\\\\\n",
+ "\t 79841.63 & 25218.80 & 54622.83 & 5390.090 & 19828.71 & 4715.358 & 13041.323 & 8421.304 & 10051.862 & 8528.523 & 9864.458\\\\\n",
+ "\t 59045.18 & 16654.93 & 42390.25 & 4417.989 & 12236.94 & 4715.358 & 6991.294 & 6485.093 & 9186.572 & 6802.969 & 8208.963\\\\\n",
+ "\t 65235.18 & 16124.68 & 49110.50 & 4377.760 & 11746.92 & 4715.358 & 6046.043 & 7538.714 & 13381.272 & 7539.418 & 9889.692\\\\\n",
+ "\t 64429.14 & 19211.76 & 45217.38 & 4879.539 & 14332.22 & 4715.358 & 7237.603 & 7478.676 & 10250.235 & 7247.400 & 8288.111\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/markdown": [
+ "\n",
+ "Total | Category.A | Category.B | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 | \n",
+ "|---|---|---|---|---|---|---|---|\n",
+ "| 80910.32 | 25503.27 | 55407.04 | 5664.790 | 19838.48 | 4517.327 | 12756.530 | 8421.304 | 10418.541 | 9269.589 | 10023.754 | \n",
+ "| 60955.16 | 17453.11 | 43502.04 | 4556.185 | 12896.93 | 4580.720 | 7140.095 | 6485.093 | 9190.637 | 7737.238 | 8368.259 | \n",
+ "| 65529.24 | 16506.67 | 49022.56 | 4515.956 | 11990.72 | 4599.585 | 6089.073 | 7538.714 | 13150.783 | 7595.421 | 10048.987 | \n",
+ "| 65158.95 | 19359.68 | 45799.27 | 5017.735 | 14341.94 | 4764.995 | 7330.315 | 7478.676 | 10180.782 | 7597.098 | 8447.406 | \n",
+ "| 79841.63 | 25218.80 | 54622.83 | 5390.090 | 19828.71 | 4715.358 | 13041.323 | 8421.304 | 10051.862 | 8528.523 | 9864.458 | \n",
+ "| 59045.18 | 16654.93 | 42390.25 | 4417.989 | 12236.94 | 4715.358 | 6991.294 | 6485.093 | 9186.572 | 6802.969 | 8208.963 | \n",
+ "| 65235.18 | 16124.68 | 49110.50 | 4377.760 | 11746.92 | 4715.358 | 6046.043 | 7538.714 | 13381.272 | 7539.418 | 9889.692 | \n",
+ "| 64429.14 | 19211.76 | 45217.38 | 4879.539 | 14332.22 | 4715.358 | 7237.603 | 7478.676 | 10250.235 | 7247.400 | 8288.111 | \n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ " Total Category.A Category.B Product.1 Product.2 Product.3 Product.4\n",
+ "[1,] 80910.32 25503.27 55407.04 5664.790 19838.48 4517.327 12756.530\n",
+ "[2,] 60955.16 17453.11 43502.04 4556.185 12896.93 4580.720 7140.095\n",
+ "[3,] 65529.24 16506.67 49022.56 4515.956 11990.72 4599.585 6089.073\n",
+ "[4,] 65158.95 19359.68 45799.27 5017.735 14341.94 4764.995 7330.315\n",
+ "[5,] 79841.63 25218.80 54622.83 5390.090 19828.71 4715.358 13041.323\n",
+ "[6,] 59045.18 16654.93 42390.25 4417.989 12236.94 4715.358 6991.294\n",
+ "[7,] 65235.18 16124.68 49110.50 4377.760 11746.92 4715.358 6046.043\n",
+ "[8,] 64429.14 19211.76 45217.38 4879.539 14332.22 4715.358 7237.603\n",
+ " Product.5 Product.6 Product.7 Product.8\n",
+ "[1,] 8421.304 10418.541 9269.589 10023.754\n",
+ "[2,] 6485.093 9190.637 7737.238 8368.259\n",
+ "[3,] 7538.714 13150.783 7595.421 10048.987\n",
+ "[4,] 7478.676 10180.782 7597.098 8447.406\n",
+ "[5,] 8421.304 10051.862 8528.523 9864.458\n",
+ "[6,] 6485.093 9186.572 6802.969 8208.963\n",
+ "[7,] 7538.714 13381.272 7539.418 9889.692\n",
+ "[8,] 7478.676 10250.235 7247.400 8288.111"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Explore and visualize the forecasted hts\n",
+ "\n",
+ "aggts(demandfcast)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Hierarchical Time Series \n",
+ "3 Levels \n",
+ "Number of nodes at each level: 1 2 8 \n",
+ "Total number of series: 11 \n",
+ "Number of observations in each historical series: 48 \n",
+ "Number of forecasts per series: 8 \n",
+ "Top level series of forecasts: \n",
+ " Qtr1 Qtr2 Qtr3 Qtr4\n",
+ "2010 80910.32 60955.16 65529.24 65158.95\n",
+ "2011 79841.63 59045.18 65235.18 64429.14\n",
+ "\n",
+ "Method: Bottom-up forecasts \n",
+ "Forecast method: Arima \n",
+ "In-sample error measures at the bottom level: \n",
+ " Product.1 Product.2 Product.3 Product.4 Product.5 Product.6\n",
+ "ME 1.8928374 -4.8896114 -1.2204182 -142.3460472 -14.0070931 228.3550637\n",
+ "RMSE 499.0780725 964.9571426 478.7228408 628.7161059 698.1542998 900.4151901\n",
+ "MAE 382.1519945 729.0429985 397.0558637 441.4047924 512.9018563 683.3038439\n",
+ "MAPE 6.5989311 4.7198640 8.5556556 5.2848997 6.7025632 6.1783808\n",
+ "MPE -0.6422800 -0.3170459 -1.0771666 -1.9827212 -0.6736957 1.7844811\n",
+ "MASE 0.6440435 0.7252355 0.8330373 0.8035503 0.7797554 0.5915236\n",
+ " Product.7 Product.8\n",
+ "ME -13.8547048 -8.7052069\n",
+ "RMSE 673.2750519 964.8422175\n",
+ "MAE 511.9939875 768.0957031\n",
+ "MAPE 6.5367455 7.4557366\n",
+ "MPE -0.6566870 -0.7626077\n",
+ "MASE 0.6766102 0.7945506\n"
+ ]
+ }
+ ],
+ "source": [
+ "summary(demandfcast)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\nImWVzDnSJaFI0fJBSol0uD9ZfC1qEwlPXrABWTNIjkiXpC6PKhMp6zZDkS5JZSKBnFUkLjaQ\nTSm9ep9TOJe/yeE4rUgckciW1PY8+Q3nSORwVPY4uYcikcNBkQiRoLLHYG8oEjkeJxWJiw1k\nW+rziMvf5ICcVaR3Io5I5MpIzZEaT2KKRC4BRSJEAIpEiABiy9+zTXh+Qg5P8eVvQi6BhEhH\n5dSNs7hWa2trbmXVkeXUjbO4Vmtra25l1ZHl1I2zuFZra2tuZdWR5dSNs7hWa2trbmXVkeXU\njbO4Vmtra25l1ZHl1I2zuFZra2tuZdWR5dSNs7hWa2trbmXVkeXUjbO4Vmtra25l1SHkmFAk\nQgSgSIQIQJEIEYAiESIARSJEAIpEiAAUiRABKBIhAlAkQgQ4m0jjLwU7X86Ht7VXaO70x0Tq\naG0NdRBk/Dstzpfz4W7mGVvaY17OJvTnrbamgiqIcxmReq4jUo/aTopUlmuLdNqGDqiXkyKV\n5eIiVTJpKARF2oymu5JI12qt0tyOIpVFObsX6Fp2azvl5XTo6lCkgqin+fwiOVrbKS9no7F/\n1HJxK6iCKOoDhvOLdK3W6s3tKFJBpj/TfI0HstdqrdncSaI6mltDHQg5PBSJEAEoEiECUCRC\nBKBIhAhAkQgRgCIRIgBFIkQAikSIABSJEAEoEiECUCRCBKBIhAhAkQgRgCIRIgBFIkQAikSI\nABSJEAEoEiECUCRCBKBIhAhAkQgRgCIRIgBFIkQAikSIABSJEAEoEiECUCRCBKBIhAhAkQgR\ngCIRIgBFIkQAikSIABSJEAEoEiECUCRCBKBIhAhAkQgRgCIRIgBFIkQAikSIABSJEAEoEiEC\nUCRCBKBIhAhAkQgRgCLVx3/fmubj79/qpp/f9qoMSYMiVcffTc/HL2Vbw+tUObxAtfGzaf79\n/PlX85eykSLVDi9QbXx/e9R1v779/Pz570fTfP/V9UNU1/340nz58d75+ebbr16uX9/7BG/V\n/vv40nz0RXzwqm4OT3ltfGmW2dG/vUHfRpF+9i8/u+HNl7dIvz/6KPB31yf59nfz32eu/5q/\n96v+VaFItaFGcR/Nj64fefqN3z8l+tl8f7/5+/2jec+npo9N80/3+2fzpXur+HOvyl8XilQb\n+nToxz9/zSJ9DIsQ70+fQ9Dv97aP4d20rXfopza7IttAkWrjQwntfnyMs6NepGE1b/rUud79\n+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\nm4ck9XY5ezSapA1LzgnJsMOsyyCSMp4+rAu2FLyMAn1ac/5ijndTpV0iPdxfe9MW+9tu6KGa\n3K1WI/Vpl3pCh2a4e53yPdzxRtYnt8K01pzP9o+xh4hwqc9wI2wzTJrSP3zTPN1sqxsBVD0i\n9f+prVv60Xwnca8QvTuI9m1QJagwPRp7ojnFeKo9bjCpvzEuh3WGDrZIU3Cn3NaNPm7FpVN8\naXQZz2rYuCDQqTPzseO4+pxy6LFzPrT7kjn10dYnZi+UGtkYMas/KrNMGuuj3SbniDcyp/Kh\nnZVF7G5a4V1qE1mZCLHbYkPCNxv6L4LrrVMCp2EByrfS+jmFNrvh9GD/YQswmqTseH56pBbw\nnAKWZThJ9EibVKtDz9wQOy6dFzzUJkwm2ged5zRjofOY5+xyj7ldy33hsazH20sI+kqfNuX0\n9ekUwYYa6JsfRsXUEXiJavNN6sZJ4Rh4ml3EcUnfN2A1i48qVu2UbzbMq3bztxyMIUmN1hwr\ndjP61R8yPIZO4hZJ2/7sS9eG/WmUGC/y/a523+UW7eznD7UCY0PGLukKOfqqKI9kOuWd8565\nrBgoAa1bo24ZkoyVzvF4nlmY1RnVSll4Ij5HzbX4cBx6lthSWy6cawaIZJxEI7q0xXZsnafZ\nQWpeteue/as2JKnDySPUt3rME/XO7RiQluho5Dlaqk5Wnsv7IYpX/elmo1zVmL50sdwB5wVi\nd90f1tdvZyvcGVp9ct4FNOqmE6cfezik0yPLpKhH7h3uhYklgjYWLR/WM7x2TOOW2n027elw\npEZK5GueoZBLNc+Rplf1YWur3qLVlS43Znd6PJwedePTlPFcPadF4nbe23WLSb1K/eMVvfS7\nr/O24xR6idWi99TFyvv4IyDqVH2l5OAB2mG9xjzke5LV+nvjXfsUOYhrV0SkKaxTauQaGg2T\n2vm7JJ+zYteQ56+jp/7Liq+eN3RrqnvV7vO177zLkKRMqIcFrIdnhFmwBiVPuvGG/g6NnsvF\n6rdO4cBTST0tdSgjQOA8t8sSwn3+kcBDIZxyOQn3LnbN56Uxa2vrW7hqVdQjebF3+u4yD3Uq\nZHyLw0w7VFNp33iB+tUb9wGMkTrOKJLZryIlVC7S56RfnWMsMcbYrPYRHJCUlJ6PjuRPNXxo\n1Uv7fDrSDx03XGw7/+gzgJNlLPk9qtH7tDnvPp/34ODZvAc+RRIHkrePeQ1J18g3vjyWncPn\n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",
+ "text/plain": [
+ "Plot with title \"Product\""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(demandfcast)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " | Total | Category.A | Category.B | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 |
\n",
+ "\n",
+ "\tME | -642.2230633 | 769.636570 | -1411.8596334 | 500.869555 | 268.767016 | 62.9927473 | -57.9094758 | -154.696664 | -486.0854327 | -601.7071073 | -174.453701 |
\n",
+ "\tRMSE | 4297.4666959 | 1762.617949 | 3417.5795191 | 654.667459 | 1333.511536 | 265.5443482 | 637.9615525 | 923.545538 | 1410.7055499 | 824.2037457 | 733.337312 |
\n",
+ "\tMAE | 3540.7892002 | 1301.541868 | 2479.5780546 | 569.165681 | 1147.337404 | 248.6004751 | 512.4007731 | 663.302664 | 811.2695039 | 699.1071823 | 583.391671 |
\n",
+ "\tMAPE | 5.1052214 | 6.663495 | 5.2033361 | 10.476458 | 7.760610 | 5.1928806 | 5.6760678 | 9.321062 | 10.5272499 | 9.8886736 | 6.695530 |
\n",
+ "\tMPE | -0.7830154 | 4.126951 | -2.9651999 | 8.881871 | 2.442825 | 1.0706089 | 0.5462723 | -2.757447 | -8.0096851 | -8.6133027 | -2.666663 |
\n",
+ "\tMASE | 1.0928975 | 1.050883 | 0.9203532 | 0.959219 | 1.141345 | 0.5215726 | 0.9327941 | 1.008407 | 0.7023011 | 0.9238839 | 0.603485 |
\n",
+ "\n",
+ "
\n"
+ ],
+ "text/latex": [
+ "\\begin{tabular}{r|lllllllllll}\n",
+ " & Total & Category.A & Category.B & Product.1 & Product.2 & Product.3 & Product.4 & Product.5 & Product.6 & Product.7 & Product.8\\\\\n",
+ "\\hline\n",
+ "\tME & -642.2230633 & 769.636570 & -1411.8596334 & 500.869555 & 268.767016 & 62.9927473 & -57.9094758 & -154.696664 & -486.0854327 & -601.7071073 & -174.453701 \\\\\n",
+ "\tRMSE & 4297.4666959 & 1762.617949 & 3417.5795191 & 654.667459 & 1333.511536 & 265.5443482 & 637.9615525 & 923.545538 & 1410.7055499 & 824.2037457 & 733.337312 \\\\\n",
+ "\tMAE & 3540.7892002 & 1301.541868 & 2479.5780546 & 569.165681 & 1147.337404 & 248.6004751 & 512.4007731 & 663.302664 & 811.2695039 & 699.1071823 & 583.391671 \\\\\n",
+ "\tMAPE & 5.1052214 & 6.663495 & 5.2033361 & 10.476458 & 7.760610 & 5.1928806 & 5.6760678 & 9.321062 & 10.5272499 & 9.8886736 & 6.695530 \\\\\n",
+ "\tMPE & -0.7830154 & 4.126951 & -2.9651999 & 8.881871 & 2.442825 & 1.0706089 & 0.5462723 & -2.757447 & -8.0096851 & -8.6133027 & -2.666663 \\\\\n",
+ "\tMASE & 1.0928975 & 1.050883 & 0.9203532 & 0.959219 & 1.141345 & 0.5215726 & 0.9327941 & 1.008407 & 0.7023011 & 0.9238839 & 0.603485 \\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/markdown": [
+ "\n",
+ "| | Total | Category.A | Category.B | Product.1 | Product.2 | Product.3 | Product.4 | Product.5 | Product.6 | Product.7 | Product.8 | \n",
+ "|---|---|---|---|---|---|\n",
+ "| ME | -642.2230633 | 769.636570 | -1411.8596334 | 500.869555 | 268.767016 | 62.9927473 | -57.9094758 | -154.696664 | -486.0854327 | -601.7071073 | -174.453701 | \n",
+ "| RMSE | 4297.4666959 | 1762.617949 | 3417.5795191 | 654.667459 | 1333.511536 | 265.5443482 | 637.9615525 | 923.545538 | 1410.7055499 | 824.2037457 | 733.337312 | \n",
+ "| MAE | 3540.7892002 | 1301.541868 | 2479.5780546 | 569.165681 | 1147.337404 | 248.6004751 | 512.4007731 | 663.302664 | 811.2695039 | 699.1071823 | 583.391671 | \n",
+ "| MAPE | 5.1052214 | 6.663495 | 5.2033361 | 10.476458 | 7.760610 | 5.1928806 | 5.6760678 | 9.321062 | 10.5272499 | 9.8886736 | 6.695530 | \n",
+ "| MPE | -0.7830154 | 4.126951 | -2.9651999 | 8.881871 | 2.442825 | 1.0706089 | 0.5462723 | -2.757447 | -8.0096851 | -8.6133027 | -2.666663 | \n",
+ "| MASE | 1.0928975 | 1.050883 | 0.9203532 | 0.959219 | 1.141345 | 0.5215726 | 0.9327941 | 1.008407 | 0.7023011 | 0.9238839 | 0.603485 | \n",
+ "\n",
+ "\n"
+ ],
+ "text/plain": [
+ " Total Category.A Category.B Product.1 Product.2 Product.3 \n",
+ "ME -642.2230633 769.636570 -1411.8596334 500.869555 268.767016 62.9927473\n",
+ "RMSE 4297.4666959 1762.617949 3417.5795191 654.667459 1333.511536 265.5443482\n",
+ "MAE 3540.7892002 1301.541868 2479.5780546 569.165681 1147.337404 248.6004751\n",
+ "MAPE 5.1052214 6.663495 5.2033361 10.476458 7.760610 5.1928806\n",
+ "MPE -0.7830154 4.126951 -2.9651999 8.881871 2.442825 1.0706089\n",
+ "MASE 1.0928975 1.050883 0.9203532 0.959219 1.141345 0.5215726\n",
+ " Product.4 Product.5 Product.6 Product.7 Product.8 \n",
+ "ME -57.9094758 -154.696664 -486.0854327 -601.7071073 -174.453701\n",
+ "RMSE 637.9615525 923.545538 1410.7055499 824.2037457 733.337312\n",
+ "MAE 512.4007731 663.302664 811.2695039 699.1071823 583.391671\n",
+ "MAPE 5.6760678 9.321062 10.5272499 9.8886736 6.695530\n",
+ "MPE 0.5462723 -2.757447 -8.0096851 -8.6133027 -2.666663\n",
+ "MASE 0.9327941 1.008407 0.7023011 0.9238839 0.603485"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Calculate perforemance metrics\n",
+ "\n",
+ "accuracy.gts(demandfcast, testgts, levels=c(0, 1, 2))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Cross-validation for hierarchical time series\n",
+ "\n",
+ "Next, we use cross validation to compare performance of different forecast methods for hierarchical time series model."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "## Time series cross validation\n",
+ "\n",
+ "# Define function that runs hierarchical forecast on training data set\n",
+ "# and returns forecast on test data set\n",
+ "\n",
+ "forecast_hts <- function (traindata, testdata, htsmethod, tsmethod) {\n",
+ " \n",
+ " # Forecasting horizon\n",
+ " \n",
+ " horiz = dim(aggts(testdata))[1]\n",
+ "\n",
+ " # Run hierarchical forecast\n",
+ " \n",
+ " hts_fcast <- forecast(object = traindata, \n",
+ " h = horiz,\n",
+ " method = htsmethod,\n",
+ " fmethod = tsmethod,\n",
+ " keep.fitted = TRUE)\n",
+ " \n",
+ " # Return forecasted ts\n",
+ " \n",
+ " hts_fcast\n",
+ " \n",
+ " # Return evaluation metrics at the top level\n",
+ " #fcast_acc <- accuracy.gts(hts_fcast, test = testdata, levels = 0)\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Warning message:\n",
+ "\"executing %dopar% sequentially: no parallel backend registered\"Warning message in window.default(x, ...):\n",
+ "\"'end' value not changed\"Warning message in window.default(x, ...):\n",
+ "\"'end' value not changed\""
+ ]
+ }
+ ],
+ "source": [
+ "# Set parameters for cross validation\n",
+ "\n",
+ "k <- 48 \n",
+ "n <- dim(demandgts$bts)[1]\n",
+ "st <- tsp(demandgts$bts)[1]+(k-2)/4\n",
+ "\n",
+ "# Define parameter space for hts\n",
+ "\n",
+ "hts_method <- c(\"bu\", \"comb\", \"tdgsa\")\n",
+ "ts_method <- c(\"arima\", \"ets\", \"rw\")\n",
+ "\n",
+ "param_space <- expand.grid(hts_method, \n",
+ " ts_method, \n",
+ " stringsAsFactors = FALSE)\n",
+ "\n",
+ "colnames(param_space) <- c(\"hts_method\", \"ts_method\")\n",
+ "\n",
+ "# Define empty matric matrix\n",
+ "\n",
+ "mape11 <- mape12 <- mape13 <- mape21 <- mape22 <- mape23 <- mape31 <- mape32 <- mape33 <- matrix(NA,n-k,4)\n",
+ "\n",
+ "# Conduct time series cross validation for hts forecasting in parallel\n",
+ "\n",
+ "rxSetComputeContext(\"localpar\")\n",
+ "\n",
+ "tscv_time <- system.time({\n",
+ " \n",
+ "foreach(i=1:(n-k)) %dopar%\n",
+ "{\n",
+ " datashort <- window(demandgts, end=st + i/4)\n",
+ " datanext <- window(demandgts, start=st + (i+1)/4, end=st + (i+4)/4)\n",
+ " \n",
+ " # Run many distributed jobs\n",
+ " \n",
+ " rxResult <- rxExec(FUN=forecast_hts, \n",
+ " traindata=datashort, \n",
+ " testdata=datanext, \n",
+ " htsmethod=rxElemArg(param_space$hts_method), \n",
+ " tsmethod=rxElemArg(param_space$ts_method),\n",
+ " consoleOutput=TRUE,\n",
+ " packagesToLoad=c('hts'))\n",
+ " \n",
+ " horiz <- dim(datanext$bts)[1]\n",
+ " \n",
+ " mape11[i, 1:horiz] <- accuracy(aggts(rxResult[[1]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape12[i, 1:horiz] <- accuracy(aggts(rxResult[[2]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape13[i, 1:horiz] <- accuracy(aggts(rxResult[[3]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape21[i, 1:horiz] <- accuracy(aggts(rxResult[[4]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape22[i, 1:horiz] <- accuracy(aggts(rxResult[[5]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape23[i, 1:horiz] <- accuracy(aggts(rxResult[[6]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape31[i, 1:horiz] <- accuracy(aggts(rxResult[[7]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape32[i, 1:horiz] <- accuracy(aggts(rxResult[[8]]), aggts(datanext))[1, \"MAPE\"]\n",
+ " mape33[i, 1:horiz] <- accuracy(aggts(rxResult[[9]]), aggts(datanext))[1, \"MAPE\"]\n",
+ "}\n",
+ " \n",
+ "})"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\nY3WCWsL18SEtvbXgdQMXtcToI0MKZmsBuSTjU0JaesZz99LMB+5ySVJcIb29ozOAdoZmN5+3\nyyVJMYU04mCaIGY87y2pfd4ulyRFFZJ1an13+XZmruSwXpSAiEKy3nCweDtsHkBdZCEtuJma\ndNAjspDsr46xURpviCgk52+BoxxMFlVI8rfAkQ5EYgpJ8RY40oETcYU0bdsy6cC5mEIaueuS\ncuBfVCFZp/ULSAcLiygk+/BO0kFYIguJdBCmyEKyvwLhiCgk3nCAcEUVEm84wKJOp1PXRTGF\nxBsOsKTT6evrqyuluEIClvP1dT9pQUjAKKdrQl/tsyRCAvqdrr5O11Wk9lkSIcGJr65loHCd\n7r66lYQEj3pXJ3zqaaK3lrabui7TnQgJ3nxZp6qbnOTUYvI9uPxkR0eEBAe+Gl+bF+tmE5W2\nWuYU0zVVX9ViX/uFhAQRSRO9PAXTree+ExJGG53HdbflqWsxaNDSwUxASHiSzUlGriMtPovR\nIaTlzVjYmTKWg2WuptNtq929iISC6UJIS1NvKfaTSodnI1/2FjPHo4aAkJb29pZi2fLXDAOz\nmObXD0BIC2vbUhxAKTdTl8lO1ulnIKQlBZDKjXgl5rbVTngHQ0dIfr0UM7DvUs3bav+/f//k\nt7m4nokiJNeGZjZf1fsu1R0tvJ2sesGlllLvRBGS3nvLaTO32i0bTJd/1mkyeieKkARmreKc\nqv1Iw6vvYRbT7l/jaxL6J4qQJtFtHHjZYhxTMDf/PkdJSDO52K52a+T8/IQYzFuvrsaPNr4m\n4Twxf//+JaR3yTdJt89lTrdVWE8FvffLd/ow1mky/p0rKv+yjjRIWs7ohTPBa85THW/do5Kt\ndkMSCkmWzvR1mn+3fZcty0eh1fGWQO/WDH9vE/W39dJPC0mSjmBTQKR5fJC/rco0Qprw2p+/\nqjNjbjOikiTXy8vbenl42vPoSKbxo42vdTGFNHLX5cxy3s5m5jwlyfXy669uXymNr2PWPfpr\nnb6IKiTrtH7B9HTGzm7cLYIluV7e+5obeRN+6njrHpXdvx0iCunrtrJ3nS9NSmcgm4VWWNJb\nH+peCgqujrf03K2YQjq/3r7OJ6PTac8mvNX7QF81o7wx3wg2D4moQqq+/OuoqJ5McLV08rs6\n0ePdJnrC6F8vT1JEId0KuvY0UEtwuXQTrE683KSwiYn3wDr9DFGF9FXGWku3gV/eiycxTTCz\n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\nAoQECPwf86XE8P+4QCcAAAAASUVORK5CYII=",
+ "text/plain": [
+ "plot without title"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Visualize overall mape vs horiz\n",
+ "\n",
+ "plot(1:4, colMeans(mape11,na.rm=TRUE), type=\"o\", col=2, \n",
+ " xlab=\"horizon\", ylab=\"Overall MAPE\", ylim=c(0, 25))\n",
+ "lines(1:4, colMeans(mape12,na.rm=TRUE), type=\"o\",col=3)\n",
+ "lines(1:4, colMeans(mape13,na.rm=TRUE), type=\"o\",col=4)\n",
+ "lines(1:4, colMeans(mape21,na.rm=TRUE), type=\"o\",col=5)\n",
+ "lines(1:4, colMeans(mape22,na.rm=TRUE), type=\"o\",col=6)\n",
+ "lines(1:4, colMeans(mape23,na.rm=TRUE), type=\"o\",col=7)\n",
+ "lines(1:4, colMeans(mape31,na.rm=TRUE), type=\"o\",col=8)\n",
+ "lines(1:4, colMeans(mape32,na.rm=TRUE), type=\"o\",col=9)\n",
+ "lines(1:4, colMeans(mape33,na.rm=TRUE), type=\"o\",col=10)\n",
+ "legend(\"topleft\", \n",
+ " legend=c(\"bu-ARIMA\", \"bu-ETS\", \"bu-RW\",\n",
+ " \"comb-ARIMA\", \"comb-ETS\", \"comb-RW\",\n",
+ " \"tdgsa-ARIMA\", \"tdgsa-ETS\", \"tdgsa-RW\"), \n",
+ " col=2:10, lty=1, cex=0.5)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "# Show the run time of time series cross validation\n",
+ "\n",
+ "print(tscv_time)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "# Forecast the product demand of 2012 using the optimal parameters\n",
+ "\n",
+ "opt_fcast <- forecast(object = demandgts, \n",
+ " h = 4,\n",
+ " method = \"comb\",\n",
+ " fmethod = \"arima\",\n",
+ " keep.fitted = TRUE)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "# Explore and visualize the forecasted hts\n",
+ "\n",
+ "aggts(opt_fcast)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "summary(opt_fcast)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attributes": {
+ "classes": [],
+ "error": "FALSE",
+ "id": "",
+ "message": "FALSE,",
+ "warning": "FALSE,"
+ },
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "plot(opt_fcast)"
+ ]
+ }
+ ],
+ "metadata": {
+ "anaconda-cloud": {},
+ "kernelspec": {
+ "display_name": "R",
+ "language": "R",
+ "name": "ir"
+ },
+ "language_info": {
+ "codemirror_mode": "r",
+ "file_extension": ".r",
+ "mimetype": "text/x-r-source",
+ "name": "R",
+ "pygments_lexer": "r",
+ "version": "3.3.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}