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.