Holt's linear trend method

Holt (1957) extended simple exponential smoothing to allow forecasting of data with a trend. This method involves a forecast equation and two smoothing equations (one for the level and one for the trend):

\begin{align*} \text{Forecast equation}&& \pred{y}{t+h}{t} &= \ell_{t} + hb_{t} \\ \text{Level equation}&& \ell_{t} &= \alpha y_{t} + (1 - \alpha)(\ell_{t-1} + b_{t-1})\\ \text{Trend equation}&& b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 -\beta^*)b_{t-1} \end{align*}

where $\ell_t$ denotes an estimate of the level of the series at time $t$, $b_t$ denotes an estimate of the trend (slope) of the series at time $t$, $\alpha$ is the smoothing parameter for the level, $0\le\alpha\le1$ and $\beta^*$ is the smoothing parameter for the trend, $0\le\beta^*\le1$ (we denote this as $\beta^*$ instead of $\beta$ for reasons that will be explained in Section 7/7).

As with simple exponential smoothing, the level equation here shows that $\ell_t$ is a weighted average of observation $y_t$ and the within-sample one-step-ahead forecast for time $t$, here given by $\ell_{t-1} + b_{t-1}$. The trend equation shows that $b_t$ is a weighted average of the estimated trend at time $t$ based on $\ell_{t} - \ell_{t-1}$ and $b_{t-1}$, the previous estimate of the trend.

The forecast function is no longer flat but trending. The $h$-step-ahead forecast is equal to the last estimated level plus $h$ times the last estimated trend value. Hence the forecasts are a linear function of $h$.

The error correction form of the level and the trend equations show the adjustments in terms of the within-sample one-step forecast errors:

\begin{align*} \ell_{t} &= \ell_{t-1} + b_{t-1}+\alpha e_t\\ b_{t} &= b_{t-1} + \alpha \beta^*e_t \end{align*}

where $e_t=y_{t} -(\ell_{t-1} + b_{t-1})=y_{t}-\pred{y}{t}{t-1}$.

Example 7.2 Air Passengers

In Table 7.3 we demonstrate the application of Holt’s linear method to air transportation data for all passengers with an Australian airline. To initialise the method we set $\ell_0 = y_1$ and $b_0 = y_2 - y_1$ as suggested in Table 7.9. Alternatively we could fit a linear trend to the first few observations (see Section 4/8) and use the estimates of the intercept and the slope as the initial values for the level and the trend respectively.

For demonstration purposes the smoothing parameters are set to $\alpha=0.8$ and $\beta^*=0.2$. Otherwise, the smoothing parameters together with the initial values could be estimated by minimizing the SSE for the within-sample one-step forecast errors as in Section 7/1.

Year t yt t bt ŷt t bt ŷt
1989 0 17.55 4.31 17.55 1.25
1990 1 17.55 18.41 3.62 21.86 18.41 1.21 21.86
1991 2 21.86 21.89 3.59 22.03 21.93 1.20 22.21
1992 3 23.89 24.21 3.33 25.48 24.39 1.18 26.38
1993 4 26.93 27.05 3.24 27.54 27.32 1.17 28.89
1994 5 26.89 27.57 2.69 30.29 27.91 1.14 32.02
1995 6 28.83 29.12 2.46 30.26 29.44 1.12 31.88
1996 7 30.08 30.38 2.22 31.58 30.68 1.11 33.10
1997 8 30.95 31.28 1.96 32.60 31.56 1.09 33.99
1998 9 30.19 30.80 1.47 33.24 31.04 1.07 34.47
1999 10 31.58 31.72 1.36 32.27 31.91 1.06 33.23
2000 11 32.58 32.68 1.28 33.08 32.84 1.06 33.89
2001 12 33.48 33.57 1.20 33.96 33.71 1.05 34.66
2002 13 39.02 38.17 1.88 34.78 38.29 1.07 35.39
2003 14 41.39 41.12 2.10 40.06 41.28 1.07 40.86
2004 15 41.60 41.92 1.84 43.22 42.10 1.06 44.13
h ŷT+h T T+h|T
2005 1 43.76 44.60
2006 2 45.59 47.24
2007 3 47.43 50.04
2008 4 49.27 53.01
2009 5 51.10 56.15
R output
air <- window(ausair,start=1990,end=2004)
fit1 <- holt(air, alpha=0.8, beta=0.2, initial="simple", h=5)
fit2 <- holt(air, alpha=0.8, beta=0.2, initial="simple", exponential=TRUE, h=5)
# Results for first model:
fit1\$model\$state
fitted(fit1)
fit1$mean

Figure 7.3: Forecasting Air Passengers in Australia (thousands of passengers). For all methods α=0.8 and β*=0.2, and for the additive damped trend method with φ=0.85.

R output
fit3 <- holt(air, alpha=0.8, beta=0.2, damped=TRUE, initial="simple", h=5)
plot(fit2, type="o", ylab="Air passengers in Australia (millions)", xlab="Year",
     fcol="white", plot.conf=FALSE)
lines(fitted(fit1), col="blue")
lines(fitted(fit2), col="red")
lines(fitted(fit3), col="green")
lines(fit1$mean, col="blue", type="o")
lines(fit2$mean, col="red", type="o")
lines(fit3$mean, col="green", type="o")
legend("topleft", lty=1, col=c("black","blue","red","green"),
   c("Data","Holt's linear trend","Exponential trend","Additive damped trend"))