slice_genelliptical_mv {qslice} | R Documentation |
Generalized Elliptical Slice Sampler (Multivariate)
Description
Generalized Elliptical Slice Sampler, Algorithm 2 of Nishihara et al. (2014)
Usage
slice_genelliptical_mv(x, log_target, mu, Sig, df, is_chol = FALSE)
Arguments
x |
The current state (as a numeric scalar). |
log_target |
A function taking numeric scalar that evaluates the (potentially unnormalized) log-target density, returning a numeric scalar. |
mu |
Numeric vector with the mean of the supporting normal distribution. |
Sig |
Positive definite covariance matrix. Alternatively, a lower-triangular matrix with the Cholesky factor of the covariance matrix (for faster computation). |
df |
Degrees of freedom of Student t pseudo-target. |
is_chol |
Logical, is the supplied |
Value
A list contains two elements: x
is the new state and nEvaluations
is the number of evaluations of the target function used to obtain the new
state.
References
Nishihara, R., Murray, I., and Adams, R. P. (2014), "Parallel MCMC with Generalized Elliptical Slice Sampling," Journal of Machine Learning Research, 15, 2087-2112. https://jmlr.org/papers/v15/nishihara14a.html
Examples
lf <- function(x) dbeta(x[1], 3, 4, log = TRUE) + dbeta(x[2], 5, 3, log = TRUE)
n_iter <- 10 # set to 1e4 for more complete illustration
draws <- matrix(0.3, nrow = n_iter, ncol = 2)
nEvaluations <- 0L
for (i in seq.int(2, n_iter)) {
out <- slice_genelliptical_mv(draws[i - 1,], log_target = lf,
mu = c(0.5, 0.5), Sig = matrix(c(0.5, 0.25, 0.25, 0.5), nrow = 2),
df = 5)
draws[i,] <- out$x
nEvaluations <- nEvaluations + out$nEvaluations
}
nEvaluations / (n_iter - 1)
plot(draws[,1], draws[,2], xlim = c(0, 1))
hist(draws[,1], freq = FALSE); curve(dbeta(x, 3, 4), col = "blue", add = TRUE)
hist(draws[,2], freq = FALSE); curve(dbeta(x, 5, 3), col = "blue", add = TRUE)