The methods in Common Generation Methods might be inadequate when sampling distributions are difficult to represent in computations. Such distributions arise, for example, in Bayesian data analysis and in the large combinatorial problems of Markov chain Monte Carlo (MCMC) simulations. An alternative is to construct a Markov chain with a stationary distribution equal to the target sampling distribution, using the states of the chain to generate random numbers after an initial burn-in period in which the state distribution converges to the target.

The Metropolis-Hastings algorithm draws samples from a distribution that is only known up to a constant. Random numbers are generated from a distribution with a probability density function that is equal to or proportional to a proposal function.

To generate random numbers:

Assume an initial value

*x*(*t*).Draw a sample,

*y*(*t*), from a proposal distribution*q*(*y*|*x*(*t*)).Accept

*y*(*t*) as the next sample*x*(*t*+ 1) with probability*r*(*x*(*t*),*y*(*t*)), and keep*x*(*t*) as the next sample*x*(*t*+ 1) with probability 1 –*r*(*x*(*t*),*y*(*t*)), where:$$r(x,y)\text{\hspace{0.17em}}\text{=}\text{}\text{\hspace{0.17em}}min\left\{\frac{f(y)}{f(x)}\frac{q(x|y)}{q(y|x)},\text{}\text{\hspace{0.17em}}1\right\}$$

Increment

*t*→*t*+ 1, and repeat steps 2 and 3 until you get the desired number of samples.

Generate random numbers using the Metropolis-Hastings method
with the `mhsample`

function. To
produce quality samples efficiently with the Metropolis-Hastings algorithm,
it is crucial to select a good proposal distribution. If it is difficult
to find an efficient proposal distribution, use the slice sampling
algorithm (`slicesample`

) without
explicitly specifying a proposal distribution.

In instances where it is difficult to find an efficient Metropolis-Hastings
proposal distribution, the slice sampling algorithm does not require
an explicit specification. The slice sampling algorithm draws samples
from the region under the density function using a sequence of vertical
and horizontal steps. First, it selects a height at random from 0
to the density function *f *(*x*).
Then, it selects a new *x* value at random by sampling
from the horizontal "slice" of the density above the
selected height. A similar slice sampling algorithm is used for a
multivariate distribution.

If a function *f*(*x*)
proportional to the density function is given, then do the following
to generate random numbers:

Assume an initial value

*x*(*t*) within the domain of*f*(*x*).Draw a real value

*y*uniformly from (0,*f*(*x*(*t*))), thereby defining a horizontal "slice" as*S*= {*x*:*y*<*f*(*x*)}.Find an interval

*I*= (*L*,*R*) around*x*(*t*) that contains all, or much of the "slice"*S*.Draw the new point

*x*(*t*+ 1) within this interval.Increment

*t*→*t*+ 1 and repeat steps 2 through 4 until you get the desired number of samples.

Slice sampling can generate random numbers from a distribution
with an arbitrary form of the density function, provided that an efficient
numerical procedure is available to find the interval *I* =
(*L*,*R*), which is the "slice"
of the density.

Generate random numbers using the slice sampling method with
the `slicesample`

function.

Was this topic helpful?