Function estimates CES in state space form with information potential equal to errors and returns several variables.
ces(y, seasonality = c("none", "simple", "partial", "full"),
lags = c(frequency(y)), initial = c("backcasting", "optimal",
"two-stage", "complete"), a = NULL, b = NULL, loss = c("likelihood",
"MSE", "MAE", "HAM", "MSEh", "TMSE", "GTMSE", "MSCE"), h = 0,
holdout = FALSE, bounds = c("admissible", "none"), silent = TRUE,
model = NULL, xreg = NULL, regressors = c("use", "select", "adapt"),
initialX = NULL, ...)auto.ces(y, seasonality = c("none", "simple", "partial", "full"),
lags = c(frequency(y)), initial = c("backcasting", "optimal",
"two-stage", "complete"), ic = c("AICc", "AIC", "BIC", "BICc"),
loss = c("likelihood", "MSE", "MAE", "HAM", "MSEh", "TMSE", "GTMSE",
"MSCE"), h = 0, holdout = FALSE, bounds = c("admissible", "none"),
silent = TRUE, xreg = NULL, regressors = c("use", "select", "adapt"),
...)
ces_old(y, seasonality = c("none", "simple", "partial", "full"),
initial = c("backcasting", "optimal"), a = NULL, b = NULL,
ic = c("AICc", "AIC", "BIC", "BICc"), loss = c("likelihood", "MSE",
"MAE", "HAM", "MSEh", "TMSE", "GTMSE", "MSCE"), h = 10, holdout = FALSE,
bounds = c("admissible", "none"), silent = c("all", "graph", "legend",
"output", "none"), xreg = NULL, regressors = c("use", "select"),
initialX = NULL, ...)
Object of class "adam" is returned with similar elements to the adam function.
Vector or ts object, containing data needed to be forecasted.
The type of seasonality used in CES. Can be: none
- No seasonality; simple
- Simple seasonality, using lagged CES
(based on t-m
observation, where m
is the seasonality lag);
partial
- Partial seasonality with the real seasonal component
(equivalent to additive seasonality); full
- Full seasonality with
complex seasonal component (can do both multiplicative and additive
seasonality, depending on the data). First letter can be used instead of
full words.
In case of the auto.ces()
function, this parameter defines which models
to try.
Vector of lags to use in the model. Allows defining multiple seasonal models.
Can be either character or a list, or a vector of initial states.
If it is character, then it can be "backcasting"
, meaning that the initials of
dynamic part of the model are produced using backcasting procedure (advised
for data with high frequency), or "optimal"
, meaning that all initial
states are optimised, or "two-stage"
, meaning that optimisation is done
after the backcasting, refining the states. In case of backcasting, the parameters of the
explanatory variables are optimised. Alternatively, you can set initial="complete"
backcasting, which means that all states (including explanatory variables) are initialised
via backcasting.
First complex smoothing parameter. Should be a complex number.
NOTE! CES is very sensitive to a and b values so it is advised either to leave them alone, or to use values from previously estimated model.
Second complex smoothing parameter. Can be real if
seasonality="partial"
. In case of seasonality="full"
must be
complex number.
The type of Loss Function used in optimization. loss
can
be: likelihood
(assuming Normal distribution of error term),
MSE
(Mean Squared Error), MAE
(Mean Absolute Error),
HAM
(Half Absolute Moment), TMSE
- Trace Mean Squared Error,
GTMSE
- Geometric Trace Mean Squared Error, MSEh
- optimisation
using only h-steps ahead error, MSCE
- Mean Squared Cumulative Error.
If loss!="MSE"
, then likelihood and model selection is done based
on equivalent MSE
. Model selection in this cases becomes not optimal.
There are also available analytical approximations for multistep functions:
aMSEh
, aTMSE
and aGTMSE
. These can be useful in cases
of small samples.
Finally, just for fun the absolute and half analogues of multistep estimators
are available: MAEh
, TMAE
, GTMAE
, MACE
, TMAE
,
HAMh
, THAM
, GTHAM
, CHAM
.
Length of forecasting horizon.
If TRUE
, holdout sample of size h
is taken from
the end of the data.
The type of bounds for the persistence to use in the model
estimation. Can be either admissible
- guaranteeing the stability of the
model, or none
- no restrictions (potentially dangerous).
accepts TRUE
and FALSE
. If FALSE, the function
will print its progress and produce a plot at the end.
A previously estimated GUM model, if provided, the function will not estimate anything and will use all its parameters.
The vector (either numeric or time series) or the matrix (or
data.frame) of exogenous variables that should be included in the model. If
matrix included than columns should contain variables and rows - observations.
Note that xreg
should have number of observations equal either to
in-sample or to the whole series. If the number of observations in
xreg
is equal to in-sample, then values for the holdout sample are
produced using es function.
The variable defines what to do with the provided xreg:
"use"
means that all of the data should be used, while
"select"
means that a selection using ic
should be done.
The vector of initial parameters for exogenous variables.
Ignored if xreg
is NULL.
Other non-documented parameters. See adam for
details. However, there are several unique parameters passed to the optimiser
in comparison with adam
:
1. algorithm0
, which defines what algorithm to use in nloptr for the initial
optimisation. By default, this is "NLOPT_LN_BOBYQA".
2. algorithm
determines the second optimiser. By default this is
"NLOPT_LN_NELDERMEAD".
3. maxeval0 and maxeval, that determine the number of iterations for the two
optimisers. By default, maxeval0=maxeval=40*k
, where
k is the number of estimated parameters.
4. xtol_rel0 and xtol_rel, which are 1e-8 and 1e-6 respectively.
There are also ftol_rel0, ftol_rel, ftol_abs0 and ftol_abs, which by default
are set to values explained in the nloptr.print.options()
function.
The information criterion to use in the model selection.
Ivan Svetunkov, ivan@svetunkov.com
The function estimates Complex Exponential Smoothing in the state space form described in Svetunkov et al. (2022) with the information potential equal to the approximation error.
The auto.ces()
function implements the automatic seasonal component
selection based on information criteria.
ces_old()
is the old implementation of the model and will be discontinued
starting from smooth v4.5.0.
ces()
uses two optimisers to get good estimates of parameters. By default
these are BOBYQA and then Nelder-Mead. This can be regulated via ...
- see
details below.
For some more information about the model and its implementation, see the
vignette: vignette("ces","smooth")
Svetunkov I. (2023) Smooth forecasting with the smooth package in R. arXiv:2301.01790. tools:::Rd_expr_doi("10.48550/arXiv.2301.01790").
Svetunkov I. (2015 - Inf) "smooth" package for R - series of posts about the underlying models and how to use them: https://openforecast.org/category/r-en/smooth/.
Svetunkov, I. (2023). Forecasting and Analytics with the Augmented Dynamic Adaptive Model (ADAM) (1st ed.). Chapman and Hall/CRC. tools:::Rd_expr_doi("10.1201/9781003452652"), online version: https://openforecast.org/adam/.
Svetunkov, I., 2023. Smooth Forecasting with the Smooth Package in R. arXiv. tools:::Rd_expr_doi("10.48550/arXiv.2301.01790")
Snyder, R. D., 1985. Recursive Estimation of Dynamic Linear Models. Journal of the Royal Statistical Society, Series B (Methodological) 47 (2), 272-276.
Hyndman, R.J., Koehler, A.B., Ord, J.K., and Snyder, R.D. (2008) Forecasting with exponential smoothing: the state space approach, Springer-Verlag. tools:::Rd_expr_doi("10.1007/978-3-540-71918-2").
Svetunkov, I., Kourentzes, N., & Ord, J. K. (2022). Complex exponential smoothing. Naval Research Logistics, 69(8), 1108–1123. https://doi.org/10.1002/nav.22074
adam, es
y <- rnorm(100,10,3)
ces(y, h=20, holdout=FALSE)
y <- 500 - c(1:100)*0.5 + rnorm(100,10,3)
ces(y, h=20, holdout=TRUE)
ces(BJsales, h=8, holdout=TRUE)
ces(AirPassengers, h=18, holdout=TRUE, seasonality="s")
ces(AirPassengers, h=18, holdout=TRUE, seasonality="p")
ces(AirPassengers, h=18, holdout=TRUE, seasonality="f")
y <- ts(rnorm(100,10,3),frequency=12)
# CES with and without holdout
auto.ces(y,h=20,holdout=TRUE)
auto.ces(y,h=20,holdout=FALSE)
# Selection between "none" and "full" seasonalities
auto.ces(AirPassengers, h=12, holdout=TRUE,
seasonality=c("n","f"), ic="AIC")
ourModel <- auto.ces(AirPassengers)
summary(ourModel)
forecast(ourModel, h=12)
Run the code above in your browser using DataLab