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:
RandPermGibbs
HitAndRun
- For unidimensional variables:
Slice
SliceSteppingOut
SliceDoublingOut
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. ↩