diff --git a/NEWS.md b/NEWS.md index 3bcbd5eb..3205dd34 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,6 +7,9 @@ * Added `ZMVN()` error models for estimating Zero-Mean Multivariate Normal errors; convenient for working with non time-series data where latent residuals are expected to be correlated (such as when fitting Joint Species Distribution Models); see `?mvgam::ZMVN` for examples * Added a `fevd.mvgam()` method to compute forecast error variance decompositions from models fit with Vector Autoregressive dynamics (#21 and #76) +## Deprecations +* Arguments `use_stan`, `jags_path`, `data_train`, `data_test`, `adapt_delta`, `max_treedepth` and `drift` have been removed from primary functions to streamline documentation and reflect the package's mission to deprecate 'JAGS' as a suitable backend. Both `adapt_delta` and `max_treedepth` should now be supplied in a named `list()` to the new argument `control` + ## Bug fixes * Not necessarily a "bug fix", but this update removes several dependencies to lighten installation and improve efficiency of the workflow (#93) * Fixed a minor bug in the way `trend_map` recognises levels of the `series` factor diff --git a/R/get_mvgam_priors.R b/R/get_mvgam_priors.R index 13a4e950..08ed0f2d 100644 --- a/R/get_mvgam_priors.R +++ b/R/get_mvgam_priors.R @@ -5,6 +5,7 @@ #' #'@inheritParams mvgam #'@inheritParams jsdgam +#'@param ... Not currently used #'@param factor_formula Can be supplied instead `trend_formula` to match syntax from #'[jsdgam] #'@details Users can supply a model formula, prior to fitting the model, so that default priors can be inspected and @@ -155,23 +156,29 @@ get_mvgam_priors = function(formula, trend_formula, factor_formula, - data, - data_train, + knots, + trend_knots, + trend_model = 'None', family = poisson(), + data, unit = time, species = series, - knots, - trend_knots, use_lv = FALSE, n_lv, - use_stan = TRUE, - trend_model = 'None', trend_map, - drift = FALSE){ + ...){ # Validate the data - if(missing("data") & missing("data_train")){ - stop('Argument "data" is missing with no default') + dots <- list(...) + if(missing("data")){ + if('data_train' %in% names(dots)){ + message('argument "data_train" is deprecated; supply as "data" instead') + data <- dots$data_train + dots$data_train <- NULL + } else { + stop('Argument "data" is missing with no default', + call. = FALSE) + } } if(!missing("data")){ data_train <- data @@ -200,8 +207,10 @@ get_mvgam_priors = function(formula, } # Validate the trend arguments - if(drift) + if('drift' %in% names(dots)){ message('The "drift" argument is deprecated; use fixed effects of "time" instead') + dots$drift <- NULL + } drift <- FALSE orig_trend_model <- trend_model trend_model <- validate_trend_model(orig_trend_model, @@ -231,6 +240,7 @@ get_mvgam_priors = function(formula, refit = FALSE) # Validate the family argument + use_stan <- TRUE family <- validate_family(family, use_stan = use_stan) family_char <- match.arg(arg = family$family, choices = family_char_choices()) @@ -264,17 +274,14 @@ get_mvgam_priors = function(formula, validate_trend_formula(trend_formula) prior_df <- get_mvgam_priors(formula = orig_formula, data = data_train, - #data_train = data_train, family = family, use_lv = FALSE, - use_stan = TRUE, trend_model = if(trend_model == 'None'){ RW() } else { orig_trend_model }, trend_map = trend_map, - drift = drift, knots = knots) # Replace any terms labelled 'trend' with 'series' for creating the necessary diff --git a/R/jsdgam.R b/R/jsdgam.R index 5b21e693..66114097 100644 --- a/R/jsdgam.R +++ b/R/jsdgam.R @@ -9,13 +9,13 @@ #' #'@inheritParams mvgam #'@inheritParams ZMVN -#'@param formula A \code{character} string specifying the GAM observation model formula. These are exactly like the formula +#'@param formula A \code{formula} object specifying the GAM observation model formula. These are exactly like the formula #'for a GLM except that smooth terms, `s()`, `te()`, `ti()`, `t2()`, as well as time-varying -#'`dynamic()` terms and nonparametric `gp()` terms, can be added to the right hand side +#'`dynamic()` terms, nonparametric `gp()` terms and offsets using `offset()`, can be added to the right hand side #'to specify that the linear predictor depends on smooth functions of predictors #'(or linear functionals of these). Details of the formula syntax used by \pkg{mvgam} #'can be found in \code{\link{mvgam_formulae}} -#'@param factor_formula A \code{character} string specifying the linear predictor +#'@param factor_formula A \code{formula} object specifying the linear predictor #'effects for the latent factors. Use `by = trend` within calls to functional terms #'(i.e. `s()`, `te()`, `ti()`, `t2()`, `dynamic()`, or `gp()`) to ensure that each factor #'captures a different axis of variation. See the example below as an illustration @@ -322,6 +322,10 @@ jsdgam = function(formula, share_obs_params = FALSE, priors, n_lv = 2, + backend = getOption("brms.backend", "cmdstanr"), + algorithm = getOption("brms.algorithm", "sampling"), + control = list(max_treedepth = 10, + adapt_delta = 0.8), chains = 4, burnin = 500, samples = 500, @@ -329,10 +333,6 @@ jsdgam = function(formula, parallel = TRUE, threads = 1, silent = 1, - max_treedepth = 10, - adapt_delta = 0.8, - backend = getOption("brms.backend", "cmdstanr"), - algorithm = getOption("brms.algorithm", "sampling"), run_model = TRUE, return_model_data = FALSE, ...){ @@ -545,8 +545,8 @@ jsdgam = function(formula, chains = chains, parallel = parallel, silent = silent, - max_treedepth = max_treedepth, - adapt_delta = adapt_delta, + max_treedepth = control$max_treedepth, + adapt_delta = control$adapt_delta, threads = threads, burnin = burnin, samples = samples, @@ -564,8 +564,8 @@ jsdgam = function(formula, chains = chains, parallel = parallel, silent = silent, - max_treedepth = max_treedepth, - adapt_delta = adapt_delta, + max_treedepth = control$max_treedepth, + adapt_delta = control$adapt_delta, threads = threads, burnin = burnin, samples = samples, @@ -642,8 +642,8 @@ jsdgam = function(formula, fit_engine = 'stan', backend = backend, algorithm = algorithm, - max_treedepth = max_treedepth, - adapt_delta = adapt_delta), + max_treedepth = control$max_treedepth, + adapt_delta = control$adapt_delta), class = c('mvgam', 'jsdgam')) } diff --git a/R/mvgam.R b/R/mvgam.R index 58766e0f..e0798edd 100644 --- a/R/mvgam.R +++ b/R/mvgam.R @@ -11,14 +11,15 @@ #'@importFrom parallel clusterExport stopCluster setDefaultCluster #'@importFrom stats formula terms rnorm update.formula predict #'@importFrom rlang missing_arg -#'@param formula A \code{character} string specifying the GAM observation model formula. These are exactly like the formula +#'@param formula A \code{formula} object specifying the GAM observation model formula. These are exactly like the formula #'for a GLM except that smooth terms, `s()`, `te()`, `ti()`, `t2()`, as well as time-varying -#'`dynamic()` terms and nonparametric `gp()` terms, can be added to the right hand side +#'`dynamic()` terms, nonparametric `gp()` terms and offsets using `offset()`, +#'can be added to the right hand side #'to specify that the linear predictor depends on smooth functions of predictors #'(or linear functionals of these). In `nmix()` family models, the `formula` is used to #'set up a linear predictor for the detection probability. Details of the formula syntax used by \pkg{mvgam} #'can be found in \code{\link{mvgam_formulae}} -#'@param trend_formula An optional \code{character} string specifying the GAM process model formula. If +#'@param trend_formula An optional \code{formula} object specifying the GAM process model formula. If #'supplied, a linear predictor will be modelled for the latent trends to capture process model evolution #'separately from the observation model. Should not have a response variable specified on the left-hand side #'of the formula (i.e. a valid option would be `~ season + s(year)`). Also note that you should not use @@ -55,14 +56,10 @@ #'include a `time` variable if there are no temporal dynamic structures included (i.e. `trend_model = 'None'` or #'`trend_model = ZMVN()`). `data` should also include any other variables to be included in #'the linear predictor of \code{formula} -#'@param data_train Deprecated. Still works in place of \code{data} but users are recommended to use -#'\code{data} instead for more seamless integration into `R` workflows #'@param newdata Optional \code{dataframe} or \code{list} of test data containing the same variables #'as in `data`. If included, the #'observations in variable \code{y} will be set to \code{NA} when fitting the model so that posterior #'simulations can be obtained -#'@param data_test Deprecated. Still works in place of \code{newdata} but users are recommended to use -#'\code{newdata} instead for more seamless integration into `R` workflows #'@param run_model \code{logical}. If \code{FALSE}, the model is not fitted but instead the function will #'return the model file and the data / initial values that are needed to fit the model outside of \code{mvgam} #'@param prior_simulation \code{logical}. If \code{TRUE}, no observations are fed to the model, and instead @@ -94,7 +91,6 @@ #' abundance, while the observation process is Binomial to account for #' imperfect detection. #' See \code{\link{mvgam_families}} for an example of how to use this family} -#'Note that only `nb()` and `poisson()` are available if using `JAGS` as the backend. #'Default is `poisson()`. #'See \code{\link{mvgam_families}} for more details #'@param share_obs_params \code{logical}. If \code{TRUE} and the \code{family} @@ -137,8 +133,6 @@ #'data (names should perfectly match factor levels of the `series` variable in `data`). Note that #'if this is supplied, the intercept parameter in the process model will NOT be automatically suppressed. #'See examples for details -#'@param drift Deprecated. If you wish to estimate drift parameters, include parametric fixed effects -#'of 'time' in your formulae instead. #'@param noncentred \code{logical} Use the non-centred parameterisation for autoregressive #'trend models? Setting to `TRUE` will reparameterise the model to avoid possible #'degeneracies that can show up when estimating the latent dynamic random effects. For some @@ -167,7 +161,7 @@ #'up by any other means. Currently works for all families apart from `nmix()` and #'when using \code{Cmdstan} as the backend #'@param priors An optional \code{data.frame} with prior -#'definitions (in JAGS or Stan syntax) or, preferentially, If using Stan, a vector containing +#'definitions or, preferentially, a vector containing #' objects of class `brmsprior` (see. \code{\link[brms]{prior}} for details). #' See [get_mvgam_priors] and Details' for more information on changing default prior distributions #'@param refit Logical indicating whether this is a refit, called using [update.mvgam]. Users should leave @@ -180,12 +174,8 @@ #'them as part of the returned object. Defaults to `TRUE`, but you can set to `FALSE` to save #'computational time and reduce the size of the returned object (users can always add residuals to #'an object of class `mvgam` using [add_residuals]) -#'@param use_stan Logical. If \code{TRUE}, the model will be compiled and sampled using -#'Hamiltonian Monte Carlo with a call to \code{\link[cmdstanr]{cmdstan_model}} or -#'a call to \code{\link[rstan]{stan}}. Note that -#'there are many more options when using `Stan` vs `JAGS` #'@param backend Character string naming the package to use as the backend for fitting -#'the Stan model (if `use_stan = TRUE`). Options are "cmdstanr" (the default) or "rstan". Can be set globally +#'the Stan model. Options are "cmdstanr" (the default) or "rstan". Can be set globally #'for the current R session via the \code{"brms.backend"} option (see \code{\link{options}}). Details on #'the rstan and cmdstanr packages are available at https://mc-stan.org/rstan/ and #'https://mc-stan.org/cmdstanr/, respectively @@ -207,23 +197,12 @@ #' @param save_all_pars \code{Logical} flag to indicate if draws from all #' variables defined in Stan's \code{parameters} block should be saved #' (default is \code{FALSE}). -#'@param max_treedepth positive integer placing a cap on the number of simulation steps evaluated during each iteration when -#'`use_stan == TRUE`. Default is `10`. Increasing this value can sometimes help with exploration of complex -#'posterior geometries, but it is rarely fruitful to go above a `max_treedepth` of `14` -#'@param adapt_delta positive numeric between `0` and `1` defining the target average proposal acceptance probability -#'during Stan's adaptation period, if `use_stan == TRUE`. Default is `0.8`. In general you should not need to change adapt_delta -#'unless you see a warning message about divergent transitions, in which case you can increase adapt_delta from the default -#'to a value closer to `1` (e.g. from `0.95` to `0.99`, or from `0.99` to `0.999`, etc). -#'The step size used by the numerical integrator is a function of `adapt_delta` in that increasing -#'`adapt_delta` will result in a smaller step size and fewer divergences. Increasing `adapt_delta` will -#'typically result in a slower sampler, but it will always lead to a more robust sampler +#'@param control A named `list` for controlling the sampler's behaviour. Currently only accepts settings for #'@param silent Verbosity level between `0` and `2`. If `1` (the default), most of the informational #'messages of compiler and sampler are suppressed. If `2`, even more messages are suppressed. The #'actual sampling progress is still printed. Set `refresh = 0` to turn this off as well. If using #'`backend = "rstan"` you can also set open_progress = FALSE to prevent opening additional #'progress bars. -#'@param jags_path Optional character vector specifying the path to the location of the `JAGS` executable (.exe) to use -#'for modelling if `use_stan == FALSE`. If missing, the path will be recovered from a call to \code{\link[runjags]{findjags}} #'@param ... Further arguments passed to Stan. #'For \code{backend = "rstan"} the arguments are passed to #'\code{\link[rstan]{sampling}} or \code{\link[rstan]{vb}}. @@ -267,12 +246,8 @@ #'baseline, then editing the returned model accordingly. The model file can be edited and run outside #'of `mvgam` by setting \code{run_model = FALSE} and this is encouraged for complex #'modelling tasks. Note, no priors are -#'formally checked to ensure they are in the right syntax for the respective -#'probabilistic modelling framework, so it is -#'up to the user to ensure these are correct (i.e. use `dnorm` for normal -#'densities in `JAGS`, with the mean and precision -#'parameterisation; but use `normal` for normal densities in `Stan`, with the mean -#'and standard deviation parameterisation) +#'formally checked to ensure they are in the right syntax so it is +#'up to the user to ensure these are correct #'\cr #'\cr #'*Random effects*: For any smooth terms using the random effect basis (\code{\link[mgcv]{smooth.construct.re.smooth.spec}}), @@ -290,14 +265,6 @@ #'the same observation parameters, set `share_obs_params = TRUE` #'\cr #'\cr -#'*Factor regularisation*: When using a dynamic factor model for the trends with `JAGS` factor precisions are given -#'regularized penalty priors to theoretically allow some factors to be dropped from the model by squeezing increasing -#'factors' variances to zero. This is done to help protect against selecting too many latent factors than are needed to -#'capture dependencies in the data, so it can often be advantageous to set `n_lv` to a slightly larger number. However -#'larger numbers of factors do come with additional computational costs so these should be balanced as well. When using -#'`Stan`, all factors are parameterised with fixed variance parameters -#'\cr -#'\cr #'*Residuals*: For each series, randomized quantile (i.e. Dunn-Smyth) residuals are calculated for inspecting model diagnostics #'If the fitted model is appropriate then Dunn-Smyth residuals will be standard normal in distribution and no #'autocorrelation will be evident. When a particular observation is missing, the residual is calculated by comparing independent @@ -383,7 +350,6 @@ #' trend_model = AR(), #' family = poisson(), #' noncentred = TRUE, -#' use_stan = TRUE, #' run_model = FALSE) #' #' # View the model code in Stan language @@ -624,53 +590,87 @@ mvgam = function(formula, trend_formula, knots, trend_knots, + trend_model = 'None', + noncentred = FALSE, + family = poisson(), + share_obs_params = FALSE, data, - data_train, newdata, - data_test, - run_model = TRUE, - prior_simulation = FALSE, - return_model_data = FALSE, - family = 'poisson', - share_obs_params = FALSE, use_lv = FALSE, n_lv, trend_map, - trend_model = 'None', - drift = FALSE, - noncentred = FALSE, + priors, + run_model = TRUE, + prior_simulation = FALSE, + residuals = TRUE, + return_model_data = FALSE, + backend = getOption("brms.backend", "cmdstanr"), + algorithm = getOption("brms.algorithm", "sampling"), + control = list(max_treedepth = 10, + adapt_delta = 0.8), chains = 4, burnin = 500, samples = 500, thin = 1, parallel = TRUE, threads = 1, - priors, - refit = FALSE, - lfo = FALSE, - residuals = TRUE, - use_stan = TRUE, - backend = getOption("brms.backend", "cmdstanr"), - algorithm = getOption("brms.algorithm", "sampling"), - autoformat = TRUE, save_all_pars = FALSE, - max_treedepth = 10, - adapt_delta = 0.8, silent = 1, - jags_path, + autoformat = TRUE, + refit = FALSE, + lfo = FALSE, ...){ # Check data arguments - if(missing("data") & missing("data_train")){ - stop('Argument "data" is missing with no default') + dots <- list(...) + if(missing("data")){ + if('data_train' %in% names(dots)){ + message('argument "data_train" is deprecated; supply as "data" instead') + data <- dots$data_train + dots$data_train <- NULL + } else { + stop('Argument "data" is missing with no default', + call. = FALSE) + } + } + + if(missing("newdata")){ + if('data_test' %in% names(dots)){ + message('argument "data_test" is deprecated; supply as "newdata" instead') + data_test <- dots$data_train + dots$data_test <- NULL + } else { + data_test <- rlang::missing_arg() + } } + if(!missing("data")) data_train <- data if(!missing("newdata")) data_test <- newdata orig_data <- data_train + # Check sampler arguments + use_stan <- TRUE + if('adapt_delta' %in% names(dots)){ + message('argument "adapt_delta" should be supplied as an element in "control"') + adapt_delta <- dots$adapt_delta + dots$adapt_delta <- NULL + } else { + adapt_delta <- control$adapt_delta + } + + if('max_treedepth' %in% names(dots)){ + message('argument "max_treedepth" should be supplied as an element in "control"') + max_treedepth <- dots$max_treedepth + dots$max_treedepth <- NULL + } else { + max_treedepth <- control$max_treedepth + } + # Validate trend_model - if(drift & silent < 2L) + if('drift' %in% names(dots) & silent < 2L){ message('The "drift" argument is deprecated; use fixed effects of "time" instead') + dots$drift <- NULL + } drift <- FALSE orig_trend_model <- trend_model trend_model <- validate_trend_model(orig_trend_model, @@ -757,7 +757,7 @@ mvgam = function(formula, } # Ensure fitting software can be located - if(!use_stan & run_model) find_jags(jags_path = jags_path) + if(!use_stan & run_model) find_jags() if(use_stan & run_model) find_stan() # Validate the family and threads arguments @@ -1915,7 +1915,7 @@ mvgam = function(formula, samples = samples, param = param, save_all_pars = save_all_pars, - ...) + dots) } else { # Condition the model using rstan @@ -1933,7 +1933,7 @@ mvgam = function(formula, burnin = burnin, samples = samples, thin = thin, - ...) + dots) } } diff --git a/R/mvgam_formulae.R b/R/mvgam_formulae.R index 11651b90..6e80706a 100644 --- a/R/mvgam_formulae.R +++ b/R/mvgam_formulae.R @@ -23,7 +23,8 @@ #' or decreasing splines (using `s(x, bs = 'mod')`; #' see \code{\link{smooth.construct.moi.smooth.spec}} for #' details), as well as -#' Gaussian Process functions using \code{\link[brms]{gp}}, +#' Gaussian Process functions using \code{\link[brms]{gp}} and offsets using +#' \code{\link[stats]{offset}} #' can be added to the right hand side (and \code{.} is not supported in \code{mvgam} formulae). #' \cr #' \cr diff --git a/R/trends.R b/R/trends.R index 55eb5616..b03dc9e3 100644 --- a/R/trends.R +++ b/R/trends.R @@ -1453,11 +1453,11 @@ forecast_trend = function(trend_model, use_lv, trend_pars, changepoint_ts <- sort(c(trend_pars$changepoints, t_change_new)) # Generate a trend draw - draw <- piecewise_linear(t = 1:max(time), - deltas = deltas, - k = trend_pars$k_trend[x], - m = trend_pars$m_trend[x], - changepoint_ts = changepoint_ts) + draw <- suppressWarnings(piecewise_linear(t = 1:max(time), + deltas = deltas, + k = trend_pars$k_trend[x], + m = trend_pars$m_trend[x], + changepoint_ts = changepoint_ts)) # Keep only the forecast horizon estimates tail(draw, max(time) - min(time)) diff --git a/R/update.mvgam.R b/R/update.mvgam.R index 269c2996..5c4fcd65 100644 --- a/R/update.mvgam.R +++ b/R/update.mvgam.R @@ -51,14 +51,14 @@ update.mvgam = function(object, trend_formula, knots, trend_knots, + trend_model, + family, + share_obs_params, data, newdata, - trend_model, trend_map, use_lv, n_lv, - family, - share_obs_params, priors, chains, burnin, diff --git a/R/update_priors.R b/R/update_priors.R index 1bfdfeaf..7415086b 100644 --- a/R/update_priors.R +++ b/R/update_priors.R @@ -292,10 +292,8 @@ adapt_brms_priors = function(priors, family = family, use_lv = use_lv, n_lv = n_lv, - use_stan = TRUE, trend_model = trend_model, trend_map = trend_map, - drift = drift, knots = knots) if(any(grepl('_gp', priors$class, fixed = TRUE) & diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png index 7ae9c377..71aacff8 100644 Binary files a/docs/reference/Rplot001.png and b/docs/reference/Rplot001.png differ diff --git a/docs/reference/Rplot002.png b/docs/reference/Rplot002.png index 038edc52..fcb85abd 100644 Binary files a/docs/reference/Rplot002.png and b/docs/reference/Rplot002.png differ diff --git a/docs/reference/Rplot003.png b/docs/reference/Rplot003.png index e739e3c0..7bc4a620 100644 Binary files a/docs/reference/Rplot003.png and b/docs/reference/Rplot003.png differ diff --git a/docs/reference/Rplot006.png b/docs/reference/Rplot006.png index ba555a83..965d8b1f 100644 Binary files a/docs/reference/Rplot006.png and b/docs/reference/Rplot006.png differ diff --git a/docs/reference/Rplot010.png b/docs/reference/Rplot010.png index b57bcf19..4636985b 100644 Binary files a/docs/reference/Rplot010.png and b/docs/reference/Rplot010.png differ diff --git a/docs/reference/Rplot011.png b/docs/reference/Rplot011.png index 217b0833..1cfb48c0 100644 Binary files a/docs/reference/Rplot011.png and b/docs/reference/Rplot011.png differ diff --git a/docs/reference/Rplot012.png b/docs/reference/Rplot012.png index ed5bea27..97fdaea7 100644 Binary files a/docs/reference/Rplot012.png and b/docs/reference/Rplot012.png differ diff --git a/docs/reference/Rplot013.png b/docs/reference/Rplot013.png index 5643a58f..19c53f30 100644 Binary files a/docs/reference/Rplot013.png and b/docs/reference/Rplot013.png differ diff --git a/docs/reference/Rplot014.png b/docs/reference/Rplot014.png index e7647112..8f608f0b 100644 Binary files a/docs/reference/Rplot014.png and b/docs/reference/Rplot014.png differ diff --git a/docs/reference/Rplot015.png b/docs/reference/Rplot015.png index 8c88a0d9..db0af532 100644 Binary files a/docs/reference/Rplot015.png and b/docs/reference/Rplot015.png differ diff --git a/docs/reference/Rplot016.png b/docs/reference/Rplot016.png index a75ba579..6ff16457 100644 Binary files a/docs/reference/Rplot016.png and b/docs/reference/Rplot016.png differ diff --git a/docs/reference/Rplot018.png b/docs/reference/Rplot018.png index d28d6c86..8d997d36 100644 Binary files a/docs/reference/Rplot018.png and b/docs/reference/Rplot018.png differ diff --git a/docs/reference/Rplot019.png b/docs/reference/Rplot019.png index 9608530b..3411d6d5 100644 Binary files a/docs/reference/Rplot019.png and b/docs/reference/Rplot019.png differ diff --git a/docs/reference/Rplot020.png b/docs/reference/Rplot020.png index 8af604c3..ca626ca4 100644 Binary files a/docs/reference/Rplot020.png and b/docs/reference/Rplot020.png differ diff --git a/docs/reference/Rplot021.png b/docs/reference/Rplot021.png index 739deb1f..bbc861ea 100644 Binary files a/docs/reference/Rplot021.png and b/docs/reference/Rplot021.png differ diff --git a/docs/reference/Rplot022.png b/docs/reference/Rplot022.png index de871599..47d823c8 100644 Binary files a/docs/reference/Rplot022.png and b/docs/reference/Rplot022.png differ diff --git a/docs/reference/Rplot023.png b/docs/reference/Rplot023.png index f2151ffc..ec5dca91 100644 Binary files a/docs/reference/Rplot023.png and b/docs/reference/Rplot023.png differ diff --git a/docs/reference/Rplot024.png b/docs/reference/Rplot024.png index 383c6362..29202372 100644 Binary files a/docs/reference/Rplot024.png and b/docs/reference/Rplot024.png differ diff --git a/docs/reference/Rplot025.png b/docs/reference/Rplot025.png index b47bd789..0b98315d 100644 Binary files a/docs/reference/Rplot025.png and b/docs/reference/Rplot025.png differ diff --git a/docs/reference/Rplot026.png b/docs/reference/Rplot026.png index 6e090ef6..7adf4fd0 100644 Binary files a/docs/reference/Rplot026.png and b/docs/reference/Rplot026.png differ diff --git a/docs/reference/Rplot027.png b/docs/reference/Rplot027.png index 0fa97a48..09954598 100644 Binary files a/docs/reference/Rplot027.png and b/docs/reference/Rplot027.png differ diff --git a/docs/reference/Rplot028.png b/docs/reference/Rplot028.png index 0fa97a48..839da0fb 100644 Binary files a/docs/reference/Rplot028.png and b/docs/reference/Rplot028.png differ diff --git a/docs/reference/evaluate_mvgams.html b/docs/reference/evaluate_mvgams.html index 108fe732..7b570368 100644 --- a/docs/reference/evaluate_mvgams.html +++ b/docs/reference/evaluate_mvgams.html @@ -1,5 +1,5 @@ -Evaluate forecasts from fitted mvgam objects — evaluate_mvgams • mvgamEvaluate forecasts from fitted mvgam objects — evaluate_mvgams • mvgam @@ -10,7 +10,7 @@ mvgam - 1.1.3 + 1.1.4