HoltWinters {stats}R Documentation

Holt-Winters Filtering

Description

Computes Holt-Winters Filtering of a given time series. Unknown parameters are determined by minimizing the squared prediction error.

Usage

HoltWinters(x, alpha = NULL, beta = NULL, gamma = NULL,
            seasonal = c("additive", "multiplicative"),
            start.periods = 3, l.start = NULL, b.start = NULL,
            s.start = NULL,
            optim.start = c(alpha = 0.3, beta = 0.1, gamma = 0.1),
            optim.control = list())

Arguments

x An object of class ts
alpha alpha parameter of Holt-Winters Filter
beta beta parameter of Holt-Winters Filter. If set to 0, the function will do exponential smoothing.
gamma gamma parameter used for the seasonal component. If set to 0, an non-seasonal model is fitted.
seasonal 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 Start periods used in the autodetection of start values. Must be at least 3.
l.start Start value for level (a[0]).
b.start Start value for trend (b[0]).
s.start Vector of start values for the seasonal component (s_1[0]...s_p[0])
optim.start Vector with named components alpha, beta, and gamma containing the starting values for the optimizer. Only the values needed must be specified.
optim.control Optional list with additional control parameters passed to optim.

Details

The additive Holt-Winters prediction function (for time series with period length p) is

Yhat[t+h] = a[t] + h * b[t] + s[t + 1 + (h - 1) mod p],

where a[t], b[t] and s[t] are given by

a[t] = α (Y[t] - s[t-p]) + (1-α) (a[t-1] + b[t-1])

b[t] = β (a[t] - a[t-1]) + (1-β) 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

Yhat[t+h] = (a[t] + h * b[t]) * s[t + 1 + (h - 1) mod p],

where a[t], b[t] and s[t] are given by

a[t] = α (Y[t] / s[t-p]) + (1-α) (a[t-1] + b[t-1])

b[t] = β (a[t] - a[t-1]) + (1-β) b[t-1]

s[t] = gamma (Y[t] / a[t]) + (1-gamma) s[t-p]

The function tries to find the optimal values of α and/or β and/or gamma by minimizing the squared one-step prediction error if they are omitted.

For seasonal models, start values for a, b and s are detected 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].

Value

An object of class "HoltWinters", a list with components:

fitted 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).
x The original series
alpha alpha used for filtering
beta beta used for filtering
coefficients A vector with named components a, b, s1, ..., sp containing the estimated values for the level, trend and seasonal components
seasonal The specified seasonal-parameter
SSE The final sum of squared errors achieved in optimizing
call The call used

Author(s)

David Meyer david.meyer@ci.tuwien.ac.at

References

C. C Holt (1957) Forecasting seasonals and trends by exponentially weighted moving averages, ONR Research Memorandum, Carnigie Institute 52.

P. R. Winters (1960) Forecasting sales by exponentially weighted moving averages, Management Science 6, 324–342.

See Also

predict.HoltWinters,optim

Examples

data(co2)

## Seasonal Holt-Winters
(m <- HoltWinters(co2))
plot(m)
plot(fitted(m))

data(AirPassengers)
(m <- HoltWinters(AirPassengers, seasonal = "mult"))
plot(m)

## Non-Seasonal Holt-Winters
data(uspop)
x <- uspop + rnorm(uspop, sd = 5)
m <- HoltWinters(x, gamma = 0)
plot(m)

## Exponential Smoothing
m2 <- HoltWinters(x, gamma = 0, beta = 0)
lines(fitted(m2)[,1], col = 3)

[Package Contents]