Metropolis-Hastings Monte Carlo Integration
October 25, 2013 - 2:47 pm by Joss Whittle Matlab PhD UniversityA little update on what I’ve been learning about lately.
Metropolis-Hastings is an algorithm for sampling random values out of a probability distribution. Effectively, for a function f(x)
you wish to simulate where the curve is higher it is more probable that a random number will be chosen from there. Uniform sampling of the range would mean that all x
values on the graph have an even probability of being chosen, this could be simulated by saying f(x) = 1
.
However, if the function f(x)
represents a curve then the number of samples in high energy (probability) regions needs to be more dense. This can be seen in the simulations of f(x) = sqrt(x-1)
and f(x) = sin(1/x)
below.
Metropolis-Hastings is best suited to problems where Direct Sampling and other more efficient solutions are not available. Because it only relies on the availability of a computable function f(x)
and a proposal density Q(x|x*)
M-H can correctly sample unusual probability distributions that would else-wise be difficult or impossible to compute. This can be seen below in the simulations of the sine function f(x) = sin(x) + 1.5
.
Matlab code for Metropolis-Hastings Monte Carlo Integration (for generating samples)
Below is the Matlab code used to generate the above graph. By modifying the function f(x)
, the sample count N
, the proposal distribution and it’s variance qV
, and the upper and lower truncation bounds LB
& HB
any PDF can be simulated.