Temporal hierarchical forecasting

Share:

Description

Takes a time series as input and produces forecasts using the temporal hierarchical approach of Athanasopoulos et al (2016).

Usage

1
2
3
thief(y, m = frequency(y), h = m * 2, comb = c("struc", "mse", "ols",
  "bu", "shr", "sam"), usemodel = c("ets", "arima", "theta", "naive",
  "snaive"), forecastfunction = NULL, ...)

Arguments

y

Time series input

m

Seasonal period

h

Forecast horizon

comb

Combination method of temporal hierarchies, taking one of the following values:

"struc"

Structural scaling - weights from temporal hierarchy

"mse"

Variance scaling - weights from in-sample MSE

"ols"

Unscaled OLS combination weights

"bu"

Bottom-up combination – i.e., all aggregate forecasts are ignored.

"shr"

GLS using a shrinkage (to block diagonal) estimate of residuals

"sam"

GLS using sample covariance matrix of residuals

usemodel

Model used for forecasting each aggregation level:

"ets"

exponential smoothing, using the ets function.

"arima"

arima, using the auto.arima function.

"theta"

theta method, using the stm function.

"naive"

random walk forecasts

"snaive"

seasonal naive forecasts, based on the last year of observed data.

forecastfunction

User-defined function to be used instead of usemodel. The function must take a time series as the first argument, and the forecast horizon as the second argument. It must return an object of class forecast.

...

Arguments to be passed to the time series modelling function (such as ets or auto.arima), or to forecastfunction.

Details

This function computes the temporal aggregates of y using tsaggregates, then calculates all forecasts using the model function specified by usemodel or forecastfunction, and finally reconciles the forecasts using reconcilethief. The reconciled forecasts of y are returned.

Value

forecast object.

Author(s)

Rob J Hyndman and Nikolaos Kourentzes

See Also

reconcilethief

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
## Not run: 

# Select ARIMA models for all series using auto.arima()
z <- thief(AEdemand[,12], usemodel='arima')
plot(z)

# Use your own function
ftbats <- function(y,h,...){forecast(tbats(y),h)}
z <- thief(AEdemand[,12], forecastfunction=ftbats)
plot(z)

## End(Not run)