
Combine forecasts from mvgam models into evenly weighted ensembles
Source:R/ensemble.R
ensemble.mvgam_forecast.Rd
Generate evenly weighted ensemble forecast distributions from mvgam_forecast
objects
Arguments
- object
list
object of classmvgam_forecast
. Seeforecast.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.
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.585823
plot(fc2)
#> Out of sample DRPS:
#> 47.85449
plot(ensemble_fc)
#> Out of sample DRPS:
#> 43.86142888
# Score forecasts
score(fc1)
#> $series_1
#> score in_interval interval_width eval_horizon score_type
#> 1 3.523114 1 0.9 1 crps
#> 2 0.932258 1 0.9 2 crps
#> 3 2.073581 1 0.9 3 crps
#> 4 1.414644 1 0.9 4 crps
#> 5 0.996667 1 0.9 5 crps
#> 6 1.419490 1 0.9 6 crps
#> 7 2.097700 1 0.9 7 crps
#> 8 1.610148 1 0.9 8 crps
#> 9 1.232733 1 0.9 9 crps
#> 10 1.225088 1 0.9 10 crps
#> 11 1.347235 1 0.9 11 crps
#> 12 1.604694 1 0.9 12 crps
#> 13 0.990786 1 0.9 13 crps
#> 14 0.966188 1 0.9 14 crps
#> 15 0.843817 1 0.9 15 crps
#> 16 1.019958 1 0.9 16 crps
#> 17 0.899248 1 0.9 17 crps
#> 18 4.163395 1 0.9 18 crps
#> 19 1.249429 1 0.9 19 crps
#> 20 2.031900 1 0.9 20 crps
#> 21 1.496291 1 0.9 21 crps
#> 22 1.579091 1 0.9 22 crps
#> 23 5.095182 0 0.9 23 crps
#> 24 1.374279 1 0.9 24 crps
#> 25 1.398907 1 0.9 25 crps
#>
#> $all_series
#> score eval_horizon score_type
#> 1 3.523114 1 sum_crps
#> 2 0.932258 2 sum_crps
#> 3 2.073581 3 sum_crps
#> 4 1.414644 4 sum_crps
#> 5 0.996667 5 sum_crps
#> 6 1.419490 6 sum_crps
#> 7 2.097700 7 sum_crps
#> 8 1.610148 8 sum_crps
#> 9 1.232733 9 sum_crps
#> 10 1.225088 10 sum_crps
#> 11 1.347235 11 sum_crps
#> 12 1.604694 12 sum_crps
#> 13 0.990786 13 sum_crps
#> 14 0.966188 14 sum_crps
#> 15 0.843817 15 sum_crps
#> 16 1.019958 16 sum_crps
#> 17 0.899248 17 sum_crps
#> 18 4.163395 18 sum_crps
#> 19 1.249429 19 sum_crps
#> 20 2.031900 20 sum_crps
#> 21 1.496291 21 sum_crps
#> 22 1.579091 22 sum_crps
#> 23 5.095182 23 sum_crps
#> 24 1.374279 24 sum_crps
#> 25 1.398907 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.7299148 1 0.9 1 crps
#> 2 1.2316120 1 0.9 2 crps
#> 3 2.7003969 1 0.9 3 crps
#> 4 1.0364422 1 0.9 4 crps
#> 5 1.6282435 1 0.9 5 crps
#> 6 1.9640138 1 0.9 6 crps
#> 7 1.9986178 1 0.9 7 crps
#> 8 1.1822043 1 0.9 8 crps
#> 9 1.3414211 1 0.9 9 crps
#> 10 1.1086363 1 0.9 10 crps
#> 11 1.3902652 1 0.9 11 crps
#> 12 1.6876465 1 0.9 12 crps
#> 13 0.9988800 1 0.9 13 crps
#> 14 0.9523391 1 0.9 14 crps
#> 15 0.9620027 1 0.9 15 crps
#> 16 0.9439318 1 0.9 16 crps
#> 17 0.9259058 1 0.9 17 crps
#> 18 3.3335444 1 0.9 18 crps
#> 19 1.2523325 1 0.9 19 crps
#> 20 2.6802113 1 0.9 20 crps
#> 21 1.8845088 1 0.9 21 crps
#> 22 1.4960584 1 0.9 22 crps
#> 23 4.7087855 1 0.9 23 crps
#> 24 1.3857925 1 0.9 24 crps
#> 25 1.3377218 1 0.9 25 crps
#>
#> $all_series
#> score eval_horizon score_type
#> 1 3.7299148 1 sum_crps
#> 2 1.2316120 2 sum_crps
#> 3 2.7003969 3 sum_crps
#> 4 1.0364422 4 sum_crps
#> 5 1.6282435 5 sum_crps
#> 6 1.9640138 6 sum_crps
#> 7 1.9986178 7 sum_crps
#> 8 1.1822043 8 sum_crps
#> 9 1.3414211 9 sum_crps
#> 10 1.1086363 10 sum_crps
#> 11 1.3902652 11 sum_crps
#> 12 1.6876465 12 sum_crps
#> 13 0.9988800 13 sum_crps
#> 14 0.9523391 14 sum_crps
#> 15 0.9620027 15 sum_crps
#> 16 0.9439318 16 sum_crps
#> 17 0.9259058 17 sum_crps
#> 18 3.3335444 18 sum_crps
#> 19 1.2523325 19 sum_crps
#> 20 2.6802113 20 sum_crps
#> 21 1.8845088 21 sum_crps
#> 22 1.4960584 22 sum_crps
#> 23 4.7087855 23 sum_crps
#> 24 1.3857925 24 sum_crps
#> 25 1.3377218 25 sum_crps
#>
# }