View source: R/slice_samplers_univariate.R
| slice_genelliptical | R Documentation |
Single update using the generalized elliptical slice sampler of Nishihara et al. (2014).
slice_genelliptical(x, log_target, mu, sigma, df, diagnostics = NULL)
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 |
A numeric scalar with the location parameter of the Student t pseudo-target. |
sigma |
A positive numeric scalar with the scale parameter of the Student t pseudo-target. |
df |
Degrees of freedom of Student t pseudo-target. |
diagnostics |
Logical, indicating whether the sampler should be run in diagnostic mode for
informative error handling. When |
A list containing two elements:
x is the new state.
nEvaluations is the number of evaluations of the target function used to obtain the new
state.
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
lf <- function(x) dbeta(x, 3, 4, log = TRUE)
draws <- numeric(10) + 0.5 # set to numeric(1e3) + 0.5 for more complete illustration
nEvaluations <- 0L
for (i in seq.int(2, length(draws))) {
out <- slice_genelliptical(draws[i - 1], log_target = lf,
mu = 0.5, sigma = 1, df = 5)
draws[i] <- out$x
nEvaluations <- nEvaluations + out$nEvaluations
}
nEvaluations / (length(draws) - 1)
plot(density(draws), xlim = c(0, 1))
curve(exp(lf(x)), 0, 1, col = "blue", add = TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.