This package implements slice sampling algorithms accessible through the AbstractMCMC interface.
For general usage, please refer to here.
- Univariate slice sampling (Slice) algorithms by R. Neal 1:
- Fixed window (
Slice) - stepping-out window adaptation (
SliceSteppingOut) - doubling-out window adaptation (
SliceDoublingOut)
- Fixed window (
- Random permutation coordinate-wise Gibbs sampling2 (
RandPermGibbs) - Hit-and-run sampling3 (
HitAndRun)
- Latent slice sampling (LSS) by Li and Walker4 (
LatentSlice) - Gibbsian polar slice sampling (GPSS) by P. Schär, M. Habeck, and D. Rudolf5 (
GibbsPolarSlice)
This package supports the Turing probabilistic programming framework:
using Distributions
using Turing
using SliceSampling
@model function demo()
s ~ InverseGamma(3, 3)
m ~ Normal(0, sqrt(s))
end
sampler = RandPermGibbs(SliceSteppingOut(2.))
n_samples = 10000
model = demo()
sample(model, externalsampler(sampler), n_samples)The following slice samplers can also be used as a conditional sampler in Turing.Experimental.Gibbs sampler:
- For multidimensional variables:
RandPermGibbsHitAndRun
- For unidimensional variables:
SliceSliceSteppingOutSliceDoublingOut
See the following example:
using Distributions
using Turing
using SliceSampling
@model function simple_choice(xs)
p ~ Beta(2, 2)
z ~ Bernoulli(p)
for i in 1:length(xs)
if z == 1
xs[i] ~ Normal(0, 1)
else
xs[i] ~ Normal(2, 1)
end
end
end
sampler = Turing.Experimental.Gibbs(
(
p = externalsampler(SliceSteppingOut(2.0)),
z = PG(20, :z)
)
)
n_samples = 1000
model = simple_choice([1.5, 2.0, 0.3])
sample(model, sampler, n_samples)Footnotes
-
Neal, R. M. (2003). Slice sampling. The annals of statistics, 31(3), 705-767. ↩
-
Geman, S., & Geman, D. (1984). Stochastic relaxation, Gibbs distributions, and the Bayesian restoration of images. IEEE Transactions on Pattern Analysis and Machine Intelligence, (6). ↩
-
Bélisle, C. J., Romeijn, H. E., & Smith, R. L. (1993). Hit-and-run algorithms for generating multivariate distributions. Mathematics of Operations Research, 18(2), 255-266. ↩
-
Li, Y., & Walker, S. G. (2023). A latent slice sampling algorithm. Computational Statistics & Data Analysis, 179, 107652. ↩
-
Schär, P., Habeck, M., & Rudolf, D. (2023, July). Gibbsian polar slice sampling. In International Conference on Machine Learning. ↩