Skip to contents

Generate evenly weighted ensemble forecast distributions from mvgam_forecast objects.

Usage

ensemble(object, ...)

# S3 method for mvgam_forecast
ensemble(object, ..., ndraws = 5000)

Arguments

object

list object of class mvgam_forecast. See forecast.mvgam()

...

More mvgam_forecast objects.

ndraws

Positive integer specifying the number of draws to use from each forecast distribution for creating the ensemble. If some of the ensemble members have fewer draws than ndraws, their forecast distributions will be resampled with replacement to achieve the correct number of draws

Value

An object of class mvgam_forecast containing the ensemble predictions. This object can be readily used with the supplied S3 functions plot and score.

Details

It is widely recognised in the forecasting literature that combining forecasts from different models often results in improved forecast accuracy. The simplest way to create an ensemble is to use evenly weighted combinations of forecasts from the different models. This is straightforward to do in a Bayesian setting with mvgam as the posterior MCMC draws contained in each mvgam_forecast object will already implicitly capture correlations among the temporal posterior predictions.

Author

Nicholas J Clark

Examples

# \donttest{
# Simulate some series and fit a few competing dynamic models
set.seed(1)
simdat <- sim_mvgam(
  n_series = 1,
  prop_trend = 0.6,
  mu = 1
)

plot_mvgam_series(
  data = simdat$data_train,
  newdata = simdat$data_test
)


m1 <- mvgam(
  y ~ 1,
  trend_formula = ~ time +
    s(season, bs = 'cc', k = 9),
  trend_model = AR(p = 1),
  noncentred = TRUE,
  data = simdat$data_train,
  newdata = simdat$data_test,
  chains = 2,
  silent = 2
)

m2 <- mvgam(
  y ~ time,
  trend_model = RW(),
  noncentred = TRUE,
  data = simdat$data_train,
  newdata = simdat$data_test,
  chains = 2,
  silent = 2
)

# Calculate forecast distributions for each model
fc1 <- forecast(m1)
fc2 <- forecast(m2)

# Generate the ensemble forecast
ensemble_fc <- ensemble(fc1, fc2)

# Plot forecasts
plot(fc1)
#> Out of sample DRPS:
#> 42.537099

plot(fc2)
#> Out of sample DRPS:
#> 47.85449

plot(ensemble_fc)
#> Out of sample DRPS:
#> 43.69230084


# Score forecasts
score(fc1)
#> $series_1
#>       score in_interval interval_width eval_horizon score_type
#> 1  3.510983           1            0.9            1       crps
#> 2  1.036645           1            0.9            2       crps
#> 3  2.084661           1            0.9            3       crps
#> 4  1.479518           1            0.9            4       crps
#> 5  0.945487           1            0.9            5       crps
#> 6  1.438502           1            0.9            6       crps
#> 7  2.098841           1            0.9            7       crps
#> 8  1.574345           1            0.9            8       crps
#> 9  1.172795           1            0.9            9       crps
#> 10 1.137843           1            0.9           10       crps
#> 11 1.408721           1            0.9           11       crps
#> 12 1.570467           1            0.9           12       crps
#> 13 1.011725           1            0.9           13       crps
#> 14 0.984936           1            0.9           14       crps
#> 15 0.904016           1            0.9           15       crps
#> 16 0.953421           1            0.9           16       crps
#> 17 0.976065           1            0.9           17       crps
#> 18 4.409200           1            0.9           18       crps
#> 19 1.236594           1            0.9           19       crps
#> 20 2.163924           1            0.9           20       crps
#> 21 1.719160           1            0.9           21       crps
#> 22 1.618558           1            0.9           22       crps
#> 23 4.481412           1            0.9           23       crps
#> 24 1.314201           1            0.9           24       crps
#> 25 1.305079           1            0.9           25       crps
#> 
#> $all_series
#>       score eval_horizon score_type
#> 1  3.510983            1   sum_crps
#> 2  1.036645            2   sum_crps
#> 3  2.084661            3   sum_crps
#> 4  1.479518            4   sum_crps
#> 5  0.945487            5   sum_crps
#> 6  1.438502            6   sum_crps
#> 7  2.098841            7   sum_crps
#> 8  1.574345            8   sum_crps
#> 9  1.172795            9   sum_crps
#> 10 1.137843           10   sum_crps
#> 11 1.408721           11   sum_crps
#> 12 1.570467           12   sum_crps
#> 13 1.011725           13   sum_crps
#> 14 0.984936           14   sum_crps
#> 15 0.904016           15   sum_crps
#> 16 0.953421           16   sum_crps
#> 17 0.976065           17   sum_crps
#> 18 4.409200           18   sum_crps
#> 19 1.236594           19   sum_crps
#> 20 2.163924           20   sum_crps
#> 21 1.719160           21   sum_crps
#> 22 1.618558           22   sum_crps
#> 23 4.481412           23   sum_crps
#> 24 1.314201           24   sum_crps
#> 25 1.305079           25   sum_crps
#> 
score(fc2)
#> $series_1
#>       score in_interval interval_width eval_horizon score_type
#> 1  4.027405           1            0.9            1       crps
#> 2  1.601258           1            0.9            2       crps
#> 3  3.404619           0            0.9            3       crps
#> 4  0.890614           1            0.9            4       crps
#> 5  2.538261           1            0.9            5       crps
#> 6  2.620900           1            0.9            6       crps
#> 7  1.892433           1            0.9            7       crps
#> 8  0.918860           1            0.9            8       crps
#> 9  1.634557           1            0.9            9       crps
#> 10 1.184265           1            0.9           10       crps
#> 11 1.456347           1            0.9           11       crps
#> 12 1.715809           1            0.9           12       crps
#> 13 1.019106           1            0.9           13       crps
#> 14 0.957008           1            0.9           14       crps
#> 15 1.113928           1            0.9           15       crps
#> 16 1.133647           1            0.9           16       crps
#> 17 1.101088           1            0.9           17       crps
#> 18 2.844725           1            0.9           18       crps
#> 19 1.189586           1            0.9           19       crps
#> 20 3.681478           1            0.9           20       crps
#> 21 2.473191           1            0.9           21       crps
#> 22 1.617496           1            0.9           22       crps
#> 23 4.132401           1            0.9           23       crps
#> 24 1.385082           1            0.9           24       crps
#> 25 1.320426           1            0.9           25       crps
#> 
#> $all_series
#>       score eval_horizon score_type
#> 1  4.027405            1   sum_crps
#> 2  1.601258            2   sum_crps
#> 3  3.404619            3   sum_crps
#> 4  0.890614            4   sum_crps
#> 5  2.538261            5   sum_crps
#> 6  2.620900            6   sum_crps
#> 7  1.892433            7   sum_crps
#> 8  0.918860            8   sum_crps
#> 9  1.634557            9   sum_crps
#> 10 1.184265           10   sum_crps
#> 11 1.456347           11   sum_crps
#> 12 1.715809           12   sum_crps
#> 13 1.019106           13   sum_crps
#> 14 0.957008           14   sum_crps
#> 15 1.113928           15   sum_crps
#> 16 1.133647           16   sum_crps
#> 17 1.101088           17   sum_crps
#> 18 2.844725           18   sum_crps
#> 19 1.189586           19   sum_crps
#> 20 3.681478           20   sum_crps
#> 21 2.473191           21   sum_crps
#> 22 1.617496           22   sum_crps
#> 23 4.132401           23   sum_crps
#> 24 1.385082           24   sum_crps
#> 25 1.320426           25   sum_crps
#> 
score(ensemble_fc)
#> $series_1
#>        score in_interval interval_width eval_horizon score_type
#> 1  3.7448801           1            0.9            1       crps
#> 2  1.3049103           1            0.9            2       crps
#> 3  2.7188101           1            0.9            3       crps
#> 4  1.0531847           1            0.9            4       crps
#> 5  1.6000941           1            0.9            5       crps
#> 6  1.9510025           1            0.9            6       crps
#> 7  1.9609699           1            0.9            7       crps
#> 8  1.1392267           1            0.9            8       crps
#> 9  1.2953463           1            0.9            9       crps
#> 10 1.0844419           1            0.9           10       crps
#> 11 1.4276032           1            0.9           11       crps
#> 12 1.6297092           1            0.9           12       crps
#> 13 0.9705596           1            0.9           13       crps
#> 14 0.9642434           1            0.9           14       crps
#> 15 0.9780006           1            0.9           15       crps
#> 16 0.9265218           1            0.9           16       crps
#> 17 0.9303929           1            0.9           17       crps
#> 18 3.5171350           1            0.9           18       crps
#> 19 1.2202058           1            0.9           19       crps
#> 20 2.7867838           1            0.9           20       crps
#> 21 2.0012329           1            0.9           21       crps
#> 22 1.5288787           1            0.9           22       crps
#> 23 4.3712888           1            0.9           23       crps
#> 24 1.3367543           1            0.9           24       crps
#> 25 1.2501243           1            0.9           25       crps
#> 
#> $all_series
#>        score eval_horizon score_type
#> 1  3.7448801            1   sum_crps
#> 2  1.3049103            2   sum_crps
#> 3  2.7188101            3   sum_crps
#> 4  1.0531847            4   sum_crps
#> 5  1.6000941            5   sum_crps
#> 6  1.9510025            6   sum_crps
#> 7  1.9609699            7   sum_crps
#> 8  1.1392267            8   sum_crps
#> 9  1.2953463            9   sum_crps
#> 10 1.0844419           10   sum_crps
#> 11 1.4276032           11   sum_crps
#> 12 1.6297092           12   sum_crps
#> 13 0.9705596           13   sum_crps
#> 14 0.9642434           14   sum_crps
#> 15 0.9780006           15   sum_crps
#> 16 0.9265218           16   sum_crps
#> 17 0.9303929           17   sum_crps
#> 18 3.5171350           18   sum_crps
#> 19 1.2202058           19   sum_crps
#> 20 2.7867838           20   sum_crps
#> 21 2.0012329           21   sum_crps
#> 22 1.5288787           22   sum_crps
#> 23 4.3712888           23   sum_crps
#> 24 1.3367543           24   sum_crps
#> 25 1.2501243           25   sum_crps
#> 
# }