---
title: "gum() - Generalised Univariate Model"
author: "Ivan Svetunkov"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{gum() - Generalised Univariate Model}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.width=6, fig.height=4, fig.path='Figs/', fig.show='hold',
warning=FALSE, message=FALSE)
```
`gum()` constructs Generalised Exponential Smoothing - pure additive state-space model. It is a part of [smooth package](smooth.html).
Let's load the necessary packages:
```{r load_libraries, message=FALSE, warning=FALSE}
require(smooth)
```
Generalised Exponential Smoothing is a next step from CES. It is a state-space model in which all the matrices and vectors are estimated. It is very demanding in sample size, but is also insanely flexible.
A simple call by default constructs GUM$(1^1,1^m)$, where $m$ is frequency of the data. So for our example with `AirPassengers` data, we will have GUM$(1^1,1^{12})$:
```{r gum_N2457}
gum(AirPassengers, h=18, holdout=TRUE)
```
But some different orders and lags can be specified. For example:
```{r gum_N2457_2[1]_1[12]}
gum(AirPassengers, h=18, holdout=TRUE, orders=c(2,1), lags=c(1,12))
```
Function `auto.gum()` is now implemented in `smooth`, but it works slowly as it needs to check a large number of models:
```{r Autogum_N2457_1[1]}
auto.gum(AirPassengers, interval=TRUE, silent=FALSE)
```
In addition to standard values that other functions accept, GUM accepts predefined values for transition matrix, measurement and persistence vectors. For example, something more common can be passed to the function:
```{r gum_N2457_predefined}
transition <- matrix(c(1,0,0,1,1,0,0,0,1),3,3)
measurement <- c(1,1,1)
gum(AirPassengers, h=18, holdout=TRUE, orders=c(2,1), lags=c(1,12), transition=transition, measurement=measurement)
```
The resulting model will be equivalent to ETS(A,A,A). However due to different initialisation of optimisers and different method of number of parameters calculation, `gum()` above and `es(y, "AAA", h=h, holdout=TRUE)` will lead to different models.