View source: R/getSampleFunctions.R
getZigzagSample | R Documentation |
Simulate the Zigzag-HMC or Zigzag-NUTS dynamics on a given MTN.
getZigzagSample(position, momentum = NULL, nutsFlg, engine, stepZZHMC = NULL)
position |
a d-dimensional initial position vector. |
momentum |
a d-dimensional initial momentum vector. |
nutsFlg |
logical. If |
engine |
list. Its |
stepZZHMC |
step size for Zigzag-HMC. If |
one MCMC sample from the target MTN.
getZigzagSample
is particularly efficient when the target MTN has a random
mean and covariance/precision where one can reuse the Zigzag-HMC engine object while
updating the mean and covariance. The following example demonstrates such a use.
set.seed(1) n <- 1000 d <- 10 samples <- array(0, c(n, d)) # initialize MTN mean and precision m <- rnorm(d, 0, 1) prec <- rWishart(n = 1, df = d, Sigma = diag(d))[, , 1] # call createEngine once engine <- createEngine(dimension = d, lowerBounds = rep(0, d), upperBounds = rep(Inf, d), seed = 1, mean = m, precision = prec) HZZtime <- sqrt(2) / sqrt(min(mgcv::slanczos( A = prec, k = 1, kl = 1 )[['values']])) currentSample <- rep(0.1, d) for (i in 1:n) { m <- rnorm(d, 0, 1) prec <- rWishart(n = 1, df = d, Sigma = diag(d))[,,1] setMean(sexp = engine$engine, mean = m) setPrecision(sexp = engine$engine, precision = prec) currentSample <- getZigzagSample(position = currentSample, nutsFlg = FALSE, engine = engine, stepZZHMC = HZZtime) samples[i,] <- currentSample }
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.