Title: | Vector Autoregressive State Space Models With Shrinkage |
---|---|
Description: | The varlasso package uses Stan (mc-stan.org) to fit VAR state space models with optional shrinkage priors on B matrix elements (autoregression coefficients). |
Authors: | Eric Ward [aut, cre], Mark Scheuerell [ctb], Kristin Marshall [ctb] |
Maintainer: | Eric Ward <[email protected]> |
License: | GPL (>=3) |
Version: | 0.0.1 |
Built: | 2024-11-11 06:02:50 UTC |
Source: | https://github.com/atsa-es/varlasso |
A DESCRIPTION OF THE PACKAGE
Stan Development Team (2020). RStan: the R interface to Stan. R package version 2.21.2. https://mc-stan.org
fit
is the primary function for fitting models with varlasso.
fit( data, shared_q = NULL, shared_r = NULL, fixed_r = NULL, est_trend = FALSE, varss = TRUE, b_diag = list(mu = 0.7, sd = 1), b_diag_min = 0, b_offdiag = list(mu = 0, sd = 1), off_diag_prior = c("normal", "student-t", "laplace", "hs", "normal_pp"), sigma_pro = list(mu = 0, sd = 1), sigma_obs = list(mu = 0, sd = 1), nu = NULL, sigma_scale = list(df = 3, sd = 2), hs = list(df = 1, df_global = 1, df_slab = 4, scale_global = 1, scale_slab = 2), unique_reg = FALSE, pars_to_monitor = NULL, iter = 1000, warmup = floor(iter/2), thin = 1, chains = 3, save_log_lik = FALSE, estimation = c("sampling", "optimizing", "vb"), est_hessian = FALSE, prior_only = FALSE, ... )
fit( data, shared_q = NULL, shared_r = NULL, fixed_r = NULL, est_trend = FALSE, varss = TRUE, b_diag = list(mu = 0.7, sd = 1), b_diag_min = 0, b_offdiag = list(mu = 0, sd = 1), off_diag_prior = c("normal", "student-t", "laplace", "hs", "normal_pp"), sigma_pro = list(mu = 0, sd = 1), sigma_obs = list(mu = 0, sd = 1), nu = NULL, sigma_scale = list(df = 3, sd = 2), hs = list(df = 1, df_global = 1, df_slab = 4, scale_global = 1, scale_slab = 2), unique_reg = FALSE, pars_to_monitor = NULL, iter = 1000, warmup = floor(iter/2), thin = 1, chains = 3, save_log_lik = FALSE, estimation = c("sampling", "optimizing", "vb"), est_hessian = FALSE, prior_only = FALSE, ... )
data |
The data, as a long format dataframe |
shared_q |
Optional vector with integers indicating which process variance parameters are shared; defaults to constant process variances shared across species. |
shared_r |
Optional vector with integers indicating which observation variance parameters are shared; defaults to shared observation variances across species. |
fixed_r |
Optional scalar or vector of values to be passed in for a model where observation error variances are not estimated. Defaults to NULL, and them being estimated. Cannot be set to zero. |
est_trend |
Whether or not to estimate a species-specific trend, defaults to FALSE |
varss |
Boolean, whether to fit a VARSS model (defaults to true) or VAR model |
b_diag |
A 2 element list specifying the mean and sd of a normal prior on the diagonal elements.
These elements are |
b_diag_min |
The minimum value of the B diagonal, defaults to 0. Setting this lower, e.g. -1, allows for oscillations |
b_offdiag |
A 2 element list specifying the mean and sd of a normal prior on the off-diagonal elements.
These elements are |
off_diag_prior |
Character string denoting which prior to use for off-diagonal elements. Can be "normal" (independent priors estimated for each) parameter, "normal_pp" (normal prior with partial pooling, where model is hierarchical with an estimated standard deviation), "student-t" (hierarchical student-t model used with estimated scale and df), "laplace" (double-exponential model used with estimated scale) or "hs" (regularized horseshoe prior used, following parameterization in rstanarm) |
sigma_pro |
A 2 element list specifying the mean and sd of a half Student-t prior on the process
variance standard deviation. Elements of the list are |
sigma_obs |
A 2 element list specifying the mean and sd of a half Student-t prior on the process
variance standard deviation. Elements of the list are |
nu |
Optional known parameter (df) for Student-t priors |
sigma_scale |
A 2 element list specifying the |
hs |
A list containing the hyperparameters of the horseshoe prior. Default values
are |
unique_reg |
Boolean, whether to estimate unique regularization parameters for the Student-t or Laplace models (defaults to false) |
pars_to_monitor |
Optional string vector of which parameters to monitor. By default this is NULL and only most important parameters are monitored (variances, B matrix, etc). This can be the word "all", in which case all parameters are saved (this may be good for loo::loo_moment_match() for example). |
iter |
Number of MCMC iterations, defaults to 1000 |
warmup |
Warmup / burn in phase, defaults to 500 |
thin |
MCMC thin, defaults to 1 |
chains |
MCMC chains, defaults to 3 |
save_log_lik |
Whether to save log_lik, defaults to FALSE for speed |
estimation |
Whether to do MCMC sampling ("sampling"; default), maximum posterior estimation ("optimizing") or Stan's variational algrotim ("vb") |
est_hessian |
Whether to estimate hessian matrix if doing MAP estimation, defaults to FALSE |
prior_only |
Whether to only generate samples from the prior distribution, defaults to FALSE |
... |
Extra arguments to pass to sampling |
an object of class 'stanfit'
iter <- 50 warmup <- 20 thin <- 1 chains <- 1 n_ts <- 4 n_time <- 70 n_burn <- 50 xx <- matrix(0, n_time, n_ts) set.seed(123) xx[1, ] <- rnorm(n_ts) B <- matrix(rnorm(n = n_ts * n_ts, mean = 0, sd = 0.1), n_ts, n_ts) diag(B) <- runif(n_ts, min = 0.7, max = 0.9) for (i in 2:n_time) { xx[i, ] <- B %*% xx[i - 1, ] + rnorm(n_ts, mean = 0, sd = 0.04) } xx <- xx[-c(1:n_burn), ] yy <- xx + rnorm(n = nrow(xx) * ncol(xx), mean = 0, sd = 0.02) df <- data.frame( "time" = rep(1:nrow(yy), ncol(yy)), "species" = sort(rep(1:ncol(yy), nrow(yy))), "y" = c(yy) ) # fit basic model with normal independent priors m <- fit(data = df, chains = chains, iter = iter, warmup = warmup, thin = thin) # fit same model with shrinkage using student-t priors m_t <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "student-t" ) # fit same model using student-t priors and known df m_t_known <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "student-t", nu = 4 ) # fit same model using laplace priors m_lp <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "laplace" ) # fit same model using horseshoe priors m_hs <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "hs" ) # include example for just sampling from priors m <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, prior_only = TRUE )
iter <- 50 warmup <- 20 thin <- 1 chains <- 1 n_ts <- 4 n_time <- 70 n_burn <- 50 xx <- matrix(0, n_time, n_ts) set.seed(123) xx[1, ] <- rnorm(n_ts) B <- matrix(rnorm(n = n_ts * n_ts, mean = 0, sd = 0.1), n_ts, n_ts) diag(B) <- runif(n_ts, min = 0.7, max = 0.9) for (i in 2:n_time) { xx[i, ] <- B %*% xx[i - 1, ] + rnorm(n_ts, mean = 0, sd = 0.04) } xx <- xx[-c(1:n_burn), ] yy <- xx + rnorm(n = nrow(xx) * ncol(xx), mean = 0, sd = 0.02) df <- data.frame( "time" = rep(1:nrow(yy), ncol(yy)), "species" = sort(rep(1:ncol(yy), nrow(yy))), "y" = c(yy) ) # fit basic model with normal independent priors m <- fit(data = df, chains = chains, iter = iter, warmup = warmup, thin = thin) # fit same model with shrinkage using student-t priors m_t <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "student-t" ) # fit same model using student-t priors and known df m_t_known <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "student-t", nu = 4 ) # fit same model using laplace priors m_lp <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "laplace" ) # fit same model using horseshoe priors m_hs <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, off_diag_prior = "hs" ) # include example for just sampling from priors m <- fit( data = df, chains = chains, iter = iter, warmup = warmup, thin = thin, prior_only = TRUE )