Forecast distributions and prediction intervals
Today let's understand forecast distributions and prediction intervals, using simple and practical examples.
Between 1821 and 1934, trappers in Canada's Mackenzie River district counted how many lynx pelts they trapped every year. That's 114 years of counts, as few as 39 pelts in a quiet year and as many as 6991 in a good one, ending at 3396 in 1934. It's a built-in R dataset called lynx.
Look at that swing, from 39 pelts some years to 6991 in others. Now fit the simplest forecasting model there is to this series, a NAIVE model, whose whole rule is to repeat the last observed count forever. Then forecast ten years past 1934.
Look at the plot. The point forecast, the line past 1934, sits perfectly flat at 3396 for all ten years. But the shaded band around it fans out wider the further out you look, even though the point forecast itself never moves. That flat line plus a widening band around it is exactly what a prediction interval looks like.
A forecast is a distribution, not one number
fc, the object forecast() just handed back, does not hold ten plain numbers. Print it and look at the Trappings column.
Every row of Trappings prints as N(mean, variance), R's shorthand for a Normal distribution: a bell curve centered on the first number, spread out according to the second, the variance. At h = 1, 1935, that's N(3396, 1409724). At h = 10, 1944, it's N(3396, 1.4e+07), the variance a full ten times bigger.
.mean pulls out just the center of each distribution for convenience, and it reads 3396 at every single horizon, since NAIVE always repeats the last observed count. But .mean is only ever half the story. forecast() actually hands back a full distribution at every horizon, and it's the variance climbing in that Trappings column, not anything in .mean, that is behind the fan you saw widen in the cover plot.