The Markov-chain Monte Carlo Interactive Gallery

HitCount

Example: Hamiltonian Monte Carlo

Click on an algorithm below to view an interactive demo where you can change algorithm parameters on-the-fly:

Standard MCMC methods

Non-Markovian iterative sampling methods

References

[1] H. Haario, E. Saksman, and J. Tamminen, An adaptive Metropolis algorithm (2001)

[2] M. D. Hoffman, A. Gelman, The No-U-Turn Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo (2011)

[3] G. O. Roberts, R. L. Tweedie, Exponential Convergence of Langevin Distributions and Their Discrete Approximations (1996)

[4] Li, Tzu-Mao, et al. Anisotropic Gaussian mutations for metropolis light transport through Hessian-Hamiltonian dynamics ACM Transactions on Graphics 34.6 (2015): 209.

[5] Q. Liu, et al. Stein Variational Gradient Descent: A General Purpose Bayesian Inference Algorithm Advances in Neural Information Processing Systems. 2016.

[6] J. Buchner A statistical test for Nested Sampling algorithms Statistics and Computing. 2014.

Running locally

Clone or download the repository and open index.html in your web browser. All dependencies are included in in lib/.

Adding an algorithm

  1. Copy one of the existing algorithms in the algorithms directory (a good starting point is algorithms/HamiltonianMC.js).
  2. in app.html include the your algorithm's javascript file at the bottom of the page. This will add your algorithm to the dropdown menu.
  3. Add any new visualizations to the Visualizer.prototype.dequeue function defined in main/Visualizer.js. The MCMC simulation adds visualization "events" onto an animation queue. Most common events such as accepting or rejecting a proposal have already been implemented. The renderer composites the contents of three offscreen canvases (densityCanvas, samplesCanvas, and overlayCanvas)
  4. Add a link to your algorithm in README.md and index.html

A note on linear algebra in Javascript

  1. There is a lightweight linear algebra library in lib/linalg.core.js
  2. It works by "overloading" the built-in Float64Array type by adding the rows and cols properties and adds many useful linear algebra methods to the object prototype.

Repo Not Found