params <-
list(EVAL = TRUE)
## ----echo = FALSE----------------------------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
message = FALSE,
warning = FALSE,
eval = if (isTRUE(exists("params"))) params$EVAL else FALSE
)
## ----setup, include=FALSE--------------------------------------------------------------------
knitr::opts_chunk$set(
echo = TRUE,
dpi = 100,
fig.asp = 0.8,
fig.width = 6,
out.width = "60%",
fig.align = "center"
)
library(mvgam)
library(ggplot2)
theme_set(theme_bw(base_size = 12, base_family = "serif"))
## --------------------------------------------------------------------------------------------
set.seed(1)
simdat <- sim_mvgam(
T = 100,
n_series = 3,
mu = 2,
trend_model = GP(),
prop_trend = 0.75,
family = poisson(),
prop_missing = 0.10
)
## --------------------------------------------------------------------------------------------
str(simdat)
## ----fig.alt = "Plotting time series features for GAM models in mvgam"-----------------------
plot_mvgam_series(
data = simdat$data_train,
series = "all"
)
## ----fig.alt = "Plotting time series features for GAM models in mvgam"-----------------------
plot_mvgam_series(
data = simdat$data_train,
newdata = simdat$data_test,
series = 1
)
## ----include=FALSE---------------------------------------------------------------------------
mod1 <- mvgam(
y ~
s(season, bs = "cc", k = 8) +
s(time, by = series, k = 20),
knots = list(season = c(0.5, 12.5)),
trend_model = "None",
data = simdat$data_train,
newdata = simdat$data_test
)
## ----eval=FALSE------------------------------------------------------------------------------
# mod1 <- mvgam(
# y ~ s(season, bs = "cc", k = 8) +
# s(time, by = series, bs = "cr", k = 20),
# knots = list(season = c(0.5, 12.5)),
# trend_model = "None",
# data = simdat$data_train,
# silent = 2
# )
## --------------------------------------------------------------------------------------------
summary(mod1, include_betas = FALSE)
## ----fig.alt = "Plotting GAM smooth functions using mvgam"-----------------------------------
conditional_effects(mod1, type = "link")
## ----include=FALSE, message=FALSE------------------------------------------------------------
mod2 <- mvgam(
y ~ 1,
trend_formula = ~ s(season, bs = "cc", k = 8) - 1,
trend_knots = list(season = c(0.5, 12.5)),
trend_model = AR(cor = TRUE),
noncentred = TRUE,
data = simdat$data_train,
silent = 1
)
## ----eval=FALSE------------------------------------------------------------------------------
# mod2 <- mvgam(y ~ 1,
# trend_formula = ~ s(season, bs = "cc", k = 8) - 1,
# trend_knots = list(season = c(0.5, 12.5)),
# trend_model = AR(cor = TRUE),
# noncentred = TRUE,
# data = simdat$data_train,
# silent = 1
# )
## --------------------------------------------------------------------------------------------
summary(mod2, include_betas = FALSE)
## ----fig.alt = "Summarising latent Gaussian Process parameters in mvgam"---------------------
mcmc_plot(mod2, variable = "ar", regex = TRUE, type = "areas")
## ----fig.alt = "Summarising latent Gaussian Process parameters in mvgam"---------------------
mcmc_plot(mod2, variable = "sigma", regex = TRUE, type = "areas")
## ----fig.alt = "Plotting latent Gaussian Process effects in mvgam and marginaleffects"-------
conditional_effects(mod2, type = "link")
## --------------------------------------------------------------------------------------------
fc_mod1 <- forecast(mod1, newdata = simdat$data_test)
fc_mod2 <- forecast(mod2, newdata = simdat$data_test)
## --------------------------------------------------------------------------------------------
str(fc_mod1)
## --------------------------------------------------------------------------------------------
plot(fc_mod1, series = 1)
plot(fc_mod2, series = 1)
plot(fc_mod1, series = 2)
plot(fc_mod2, series = 2)
## ----include=FALSE---------------------------------------------------------------------------
mod2 <- mvgam(
y ~ 1,
trend_formula = ~ s(season, bs = "cc", k = 8) - 1,
trend_knots = list(season = c(0.5, 12.5)),
trend_model = AR(cor = TRUE),
noncentred = TRUE,
data = simdat$data_train,
newdata = simdat$data_test,
silent = 2
)
## ----eval=FALSE------------------------------------------------------------------------------
# mod2 <- mvgam(y ~ 1,
# trend_formula = ~ s(season, bs = "cc", k = 8) - 1,
# trend_knots = list(season = c(0.5, 12.5)),
# trend_model = AR(cor = TRUE),
# noncentred = TRUE,
# data = simdat$data_train,
# newdata = simdat$data_test,
# silent = 2
# )
## --------------------------------------------------------------------------------------------
fc_mod2 <- forecast(mod2)
## ----warning=FALSE, fig.alt = "Plotting posterior forecast distributions using mvgam and R"----
plot(fc_mod2, series = 1)
## ----warning=FALSE---------------------------------------------------------------------------
crps_mod1 <- score(fc_mod1, score = "crps")
str(crps_mod1)
crps_mod1$series_1
## ----warning=FALSE---------------------------------------------------------------------------
crps_mod1 <- score(fc_mod1, score = "crps", interval_width = 0.6)
crps_mod1$series_1
## --------------------------------------------------------------------------------------------
link_mod1 <- forecast(mod1, newdata = simdat$data_test, type = "link")
score(link_mod1, score = "elpd")$series_1
## --------------------------------------------------------------------------------------------
energy_mod2 <- score(fc_mod2, score = "energy")
str(energy_mod2)
## --------------------------------------------------------------------------------------------
energy_mod2$all_series
## --------------------------------------------------------------------------------------------
crps_mod1 <- score(fc_mod1, score = "crps")
crps_mod2 <- score(fc_mod2, score = "crps")
diff_scores <- crps_mod2$series_1$score -
crps_mod1$series_1$score
plot(
diff_scores,
pch = 16,
cex = 1.25,
col = "darkred",
ylim = c(
-1 * max(abs(diff_scores), na.rm = TRUE),
max(abs(diff_scores), na.rm = TRUE)
),
bty = "l",
xlab = "Forecast horizon",
ylab = expression(CRPS[AR1] ~ -~ CRPS[spline])
)
abline(h = 0, lty = "dashed", lwd = 2)
ar1_better <- length(which(diff_scores < 0))
title(
main = paste0(
"AR(1) better in ",
ar1_better,
" of ",
length(diff_scores),
" evaluations",
"\nMean difference = ",
round(mean(diff_scores, na.rm = TRUE), 2)
)
)
diff_scores <- crps_mod2$series_2$score -
crps_mod1$series_2$score
plot(
diff_scores,
pch = 16,
cex = 1.25,
col = "darkred",
ylim = c(
-1 * max(abs(diff_scores), na.rm = TRUE),
max(abs(diff_scores), na.rm = TRUE)
),
bty = "l",
xlab = "Forecast horizon",
ylab = expression(CRPS[AR1] ~ -~ CRPS[spline])
)
abline(h = 0, lty = "dashed", lwd = 2)
ar1_better <- length(which(diff_scores < 0))
title(
main = paste0(
"AR(1) better in ",
ar1_better,
" of ",
length(diff_scores),
" evaluations",
"\nMean difference = ",
round(mean(diff_scores, na.rm = TRUE), 2)
)
)
diff_scores <- crps_mod2$series_3$score -
crps_mod1$series_3$score
plot(
diff_scores,
pch = 16,
cex = 1.25,
col = "darkred",
ylim = c(
-1 * max(abs(diff_scores), na.rm = TRUE),
max(abs(diff_scores), na.rm = TRUE)
),
bty = "l",
xlab = "Forecast horizon",
ylab = expression(CRPS[AR1] ~ -~ CRPS[spline])
)
abline(h = 0, lty = "dashed", lwd = 2)
ar1_better <- length(which(diff_scores < 0))
title(
main = paste0(
"AR(1) better in ",
ar1_better,
" of ",
length(diff_scores),
" evaluations",
"\nMean difference = ",
round(mean(diff_scores, na.rm = TRUE), 2)
)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.