Skip to content

MetropolisHastings

Defined in: mc/src/samplers/metropolis.js:21

Metropolis-Hastings MCMC sampler

A simple but effective MCMC algorithm for sampling from posterior distributions.

Algorithm: At each iteration, a proposal $\theta’$ is generated from a symmetric proposal distribution $q(\theta’|\theta) = \mathcal{N}(\theta, \sigma^2)$. The proposal is accepted with probability: $$ \alpha = \min\left(1, \frac{p(\theta’|y)}{p(\theta|y)}\right) $$

Optimal acceptance rate: Target ~23.4% for high-dimensional problems, 44% for 1D.

See

https://en.wikipedia.org/wiki/Metropolis%E2%80%93Hastings_algorithm|Metropolis-Hastings

Constructors

Constructor

new MetropolisHastings(proposalStd?): MetropolisHastings

Defined in: mc/src/samplers/metropolis.js:33

Accepts either a positional argument or a single options object.

Parameters

proposalStd?

any = 0.1

Standard deviation for the Gaussian proposal distribution, or an options object { proposalStd }

Returns

MetropolisHastings

Examples

new MetropolisHastings(0.5)
new MetropolisHastings({ proposalStd: 0.5 })

Properties

proposalStd

proposalStd: any

Defined in: mc/src/samplers/metropolis.js:37

Methods

getParams()

getParams(): object

Defined in: mc/src/samplers/metropolis.js:44

Get the sampler’s configuration.

Returns

object

proposalStd

proposalStd: number


sample()

sample(model, initialValues, nSamples?, burnIn?, thin?): any

Defined in: mc/src/samplers/metropolis.js:71

Run Metropolis-Hastings sampling.

The sampling controls may be passed positionally or as a single options object. When an options object is supplied as the third argument, the burnIn and thin positional arguments are ignored in favour of the object’s fields.

Parameters

model

Model

The probabilistic model

initialValues

any

Initial parameter values

nSamples?

any = 1000

Number of samples, or an options object

burnIn?

number = 500

Number of burn-in samples to discard (positional form)

thin?

number = 1

Thinning interval, keep every nth sample (positional form)

Returns

any

Trace object with samples and diagnostics

Examples

mh.sample(model, { mu: 0 }, 1000, 500, 1)
mh.sample(model, { mu: 0 }, { nSamples: 1000, burnIn: 500, thin: 1 })

tuneProposal()

tuneProposal(currentAcceptanceRate): number

Defined in: mc/src/samplers/metropolis.js:149

Tune the proposal standard deviation to achieve target acceptance rate

Parameters

currentAcceptanceRate

number

Current acceptance rate

Returns

number

New proposal standard deviation