rnd = slicesample(initial,nsamples,'pdf',pdf)
rnd = slicesample(initial,nsamples,'logpdf',logpdf)
[rnd,neval] = slicesample(initial,...)
[rnd,neval] = slicesample(initial,...,Name,Value)
rnd = slicesample(
samples using the slice sampling method (see Algorithms).
initial is a row vector
or scalar containing the initial value of the random sample sequences.
Initial point, a scalar or row vector. Set
Positive integer, the number of samples that
Handle to a function that generates the probability density
function, specified with
Handle to a function that generates the logarithm of the probability
density function, specified with
comma-separated pairs of
the argument name and
Value is the corresponding value.
Name must appear inside quotes. You can specify several name and value
pair arguments in any order as
Nonnegative integer, the number of samples to generate and discard
before generating the samples to return. The slice sampling algorithm
is a Markov chain whose stationary distribution is proportional to
that of the
Positive integer, where
Width of the interval around the current sample, a scalar or
vector of positive values.
Scalar, the mean number of function evaluations per sample.
This example shows how to generate random samples from a multimodal density using
Define a function proportional to a multimodal density.
rng default % For reproducibility f = @(x) exp(-x.^2/2).*(1 + (sin(3*x)).^2).*... (1 + (cos(5*x).^2)); area = integral(f,-5,5);
Generate 2000 samples from the density, using a burn-in period of 1000, and keeping one in five samples.
N = 2000; x = slicesample(1,N,'pdf',f,'thin',5,'burnin',1000);
Plot a histogram of the sample.
[binheight,bincenter] = hist(x,50); h = bar(bincenter,binheight,'hist'); h.FaceColor = [.8 .8 1];
Scale the density to have the same area as the histogram, and superimpose it on the histogram.
hold on h = gca; xd = h.XLim; xgrid = linspace(xd(1),xd(2),1000); binwidth = (bincenter(2)-bincenter(1)); y = (N*binwidth/area) * f(xgrid); plot(xgrid,y,'r','LineWidth',2) hold off
The samples seem to fit the theoretical distribution well, so the
burnin value seems adequate.
There are no definitive suggestions for choosing appropriate
Choose starting values of
and increase them, if necessary, to give the requisite independence
and marginal distributions. See Neal  for details of the effect of adjusting
At each point in the sequence of random samples,
the next point by “slicing” the density to form a neighborhood
around the previous point where the density is above some value. Consequently,
the sample points are not independent. Nearby points in the sequence
tend to be closer together than they would be from a sample of independent
values. For many purposes, the entire set of points can be used as
a sample from the target distribution. However, when this type of
serial correlation is a problem, the
can help reduce that correlation.
slicesample uses the slice sampling algorithm
of Neal . For numerical stability, it converts a
logpdf function. The algorithm to resize
the support region for each level, called “stepping-out”
and “stepping-in,” was suggested by Neal.
 Neal, Radford M. Slice Sampling. Ann. Stat. Vol. 31, No. 3, pp. 705–767, 2003. Available at Project Euclid.