Running on an analytic distribution

Several analytic distributions are available to run tests on. These can be run quickly on a laptop to check that a sampler is working properly.

This example demonstrates how to sample a 2D normal distribution with the emcee sampler. First, we create the following configuration file:

name = test_normal

name = emcee
nwalkers = 5000
niterations = 100

x =
y =

name = uniform
min-x = -10
max-x = 10

name = uniform
min-y = -10
max-y = 10


By setting the model name to test_normal we are using TestNormal. The number of dimensions of the distribution is set by the number of variable_params. The names of the parameters do not matter, just that just that the prior sections use the same names.

Now run:

pycbc_inference --verbose \
        --config-files normal2d.ini \
        --output-file normal2d.hdf \
        --nprocesses 2 \
        --seed 10 \


This will run the emcee sampler on the 2D analytic normal distribution with 5000 walkers for 100 iterations. When it is done, you will have a file called normal2d.hdf which contains the results. It should take about a minute to run. If you have a computer with more cores, you can increase the parallelization by changing the nprocesses argument.

To plot the posterior distribution after the last iteration, run:

pycbc_inference_plot_posterior --verbose \
        --input-file normal2d.hdf \
        --output-file posterior-normal2d.png \
        --plot-scatter \
        --plot-contours \
        --plot-marginal \
        --z-arg 'loglikelihood:$\log p(h|\vartheta)$' \
        --iteration -1


This will create the following plot:


The scatter points show each walker’s position after the last iteration. The points are colored by the log likelihood at that point, with the 50th and 90th percentile contours drawn.

See below for more information about using pycbc_inference_plot_posterior.

To make a movie showing how the walkers evolved, run:

pycbc_inference_plot_movie --verbose \
        --nprocesses 4 \
        --input-file normal2d.hdf \
        --output-prefix frames-normal2d \
        --movie-file normal2d_mcmc_evolution.mp4 \
        --cleanup \
        --plot-scatter \
        --plot-contours \
        --plot-marginal \
        --z-arg 'loglikelihood:$\log p(h|\vartheta)$' \
        --frame-step 1



You need ffmpeg installed for the mp4 to be created.

For more information on pycbc_inference_plot_movie.