Ensemble forecasts with fable, NYR Conference, 14 August 2020

Yes - many thanks!

Questions:

(1) Just to confirm, if bootstrap = TRUE, would the following be bootstrapping the forecasts of each model, and then averaging each models bootstrap forecasts?

auscafe |>
  filter(year(date) <= 2018) |>
  model(ETS = ETS(turnover),
        ARIMA = ARIMA(turnover ~
                    pdq(d=1) + PDQ(D=1))
  ) |>
  forecast(h = "1 year", bootstrap = TRUE) |>
  summarise(
    turnover = dist_mixture(
                turnover[1], turnover[2],
                weights=c(0.5,0.5))
  ) |>
  mutate(.model = "ENSEMBLE") |>
  accuracy(
    data = auscafe,
    measures = list(crps=CRPS, rmse=RMSE)
  )

And the same question for a Combination?
mutate(COMB = (ETS + ARIMA)/2)

The code in the repo plots distributions for Combination and Mixture models, with no transformation and bootstrap = FALSE, as Normals and Mixture of Normals i.e. as "smoothed" distributions.

The models I have used in fable, are:

  • ARIMA
  • ETS
  • ENSEMBLE: ARIMA and ETS
    for various series, with transformations:
  • none (back-transformed Normal distribution),
  • log (back-transformed Log-Normal distribution)
  • sqrt (back-transformed Non-Central Chi-squared distribution),
    all with bootstrap = TRUE, as a Normal distribution for the residuals may be an unreasonable assumption.

(2) For the single models ARIMA, and ETS, I have used geom_density with bootstrap = TRUE. Correct?

(3) For the ENSEMBLE will geom_density suffice or is there an equivalent dist_mixture( ?, ?, weights = c(0.5, 0.5))) for geom_density? If, not how to plot the forecast distribution for an ENSEMBLE with bootstrap = TRUE?

(4) Also, as per fable: Combination Models, Methodology and Simple Numerical Example - #6 by mitchelloharawild, exactly how are the forecast SE's calculated/aggregated for an ENSEMBLE? I'd very much appreciate a simple numerical example.