Computes Holt-Winters Filtering of a given time series. Unknown parameters are determined by minimizing the squared prediction error.
HoltWinters(x, alpha = NULL, beta = NULL, gamma = NULL,
seasonal = c("additive", "multiplicative"),
start.periods = 2, l.start = NULL, b.start = NULL,
s.start = NULL,
optim.start = c(alpha = 0.3, beta = 0.1, gamma = 0.1),
optim.control = list())
An object of class ts
\(alpha\) parameter of Holt-Winters Filter.
\(beta\) parameter of Holt-Winters Filter. If set to
FALSE
, the function will do exponential smoothing.
\(gamma\) parameter used for the seasonal component.
If set to FALSE
, an non-seasonal model is fitted.
Character string to select an "additive"
(the default) or "multiplicative"
seasonal model. The first
few characters are sufficient. (Only takes effect if
gamma
is non-zero).
Start periods used in the autodetection of start values. Must be at least 2.
Start value for level (a[0]).
Start value for trend (b[0]).
Vector of start values for the seasonal component (\(s_1[0] \ldots s_p[0]\))
Vector with named components alpha
,
beta
, and gamma
containing the starting values for the
optimizer. Only the values needed must be specified. Ignored in the
one-parameter case.
Optional list with additional control parameters
passed to optim
if this is used. Ignored in the
one-parameter case.
An object of class "HoltWinters"
, a list with components:
A multiple time series with one column for the filtered series as well as for the level, trend and seasonal components, estimated contemporaneously (that is at time t and not at the end of the series).
The original series
alpha used for filtering
beta used for filtering
gamma used for filtering
A vector with named components a, b, s1, ..., sp
containing the estimated values for the level, trend and seasonal
components
The specified seasonal
parameter
The final sum of squared errors achieved in optimizing
The call used
The additive Holt-Winters prediction function (for time series with period length p) is $$\hat Y[t+h] = a[t] + h b[t] + s[t - p + 1 + (h - 1) \bmod p],$$ where \(a[t]\), \(b[t]\) and \(s[t]\) are given by $$a[t] = \alpha (Y[t] - s[t-p]) + (1-\alpha) (a[t-1] + b[t-1])$$ $$b[t] = \beta (a[t] -a[t-1]) + (1-\beta) b[t-1]$$ $$s[t] = \gamma (Y[t] - a[t]) + (1-\gamma) s[t-p]$$
The multiplicative Holt-Winters prediction function (for time series
with period length p) is
$$\hat Y[t+h] = (a[t] + h b[t]) \times s[t - p + 1 + (h - 1) \bmod p].$$
where \(a[t]\), \(b[t]\) and \(s[t]\) are given by
$$a[t] = \alpha (Y[t] / s[t-p]) + (1-\alpha) (a[t-1] + b[t-1])$$
$$b[t] = \beta (a[t] - a[t-1]) + (1-\beta) b[t-1]$$
$$s[t] = \gamma (Y[t] / a[t]) + (1-\gamma) s[t-p]$$
The data in x
are required to be non-zero for a multiplicative
model, but it makes most sense if they are all positive.
The function tries to find the optimal values of \(\alpha\) and/or
\(\beta\) and/or \(\gamma\) by minimizing the squared one-step
prediction error if they are NULL
(the default). optimize
will be used for the single-parameter case, and optim
otherwise.
For seasonal models, start values for a
, b
and s
are inferred by performing a simple decomposition in trend and
seasonal component using moving averages (see function
decompose
) on the start.periods
first periods (a simple
linear regression on the trend component is used for starting level
and trend). For level/trend-models (no seasonal component), start
values for a
and b
are x[2]
and x[2] -
x[1]
, respectively. For level-only models (ordinary exponential
smoothing), the start value for a
is x[1]
.
C. C. Holt (1957) Forecasting seasonals and trends by exponentially weighted moving averages, ONR Research Memorandum, Carnegie Institute of Technology 52. (reprint at http://dx.doi.org/10.1016/j.ijforecast.2003.09.015).
P. R. Winters (1960) Forecasting sales by exponentially weighted moving averages, Management Science 6, 324--342.
# NOT RUN {
require(graphics)
## Seasonal Holt-Winters
(m <- HoltWinters(co2))
plot(m)
plot(fitted(m))
(m <- HoltWinters(AirPassengers, seasonal = "mult"))
plot(m)
## Non-Seasonal Holt-Winters
x <- uspop + rnorm(uspop, sd = 5)
m <- HoltWinters(x, gamma = FALSE)
plot(m)
## Exponential Smoothing
m2 <- HoltWinters(x, gamma = FALSE, beta = FALSE)
lines(fitted(m2)[,1], col = 3)
# }
Run the code above in your browser using DataLab