In addition to photography, I focus my artistic streak on making high-quality
illustrations for talks, papers, and presentations, some of which are shown
below. I also think that the future of publishing will **not** include `PDF`

file formats. Therefore, I enjoy making interactive figures and pedagogical
tools. This page shows a bunch of those examples with some descriptions. All
interactive figures were built using the Bokeh plotting
library in Python. The script used to generate it
can be downloaded from the link below each figure.

This page will look pretty weird on a phone or tablet screen. Things are much easier to interact with on a computer.

Random walk processes can be used to explain an enormous variety of physical phenomena and is the basis for one of my favorite computational techniques, Markov chain Monte Carlo. The interactive tool below allows you to create a two dimensional random walk of \(10^5\) steps. The left plot will show the entire random walk while the right plot will show the current position and the previous 5000 steps. Adjust the slider to move the particle along its path.

*Source Code:* `random_walker.py`

.

The Gillespie algorithm is an incredibly powerful computational technique to simulate stochastic processes and numerically compute distributions of otherwise hard-to-solve differential equations. The tool below lets you perform a Gillespie simulation of a constitutively expressing promoter (i.e. not regulated) at the level of mRNAs. While the ODE is trivial to solve (equation in the box above), it’s illustrative to run the simulation to see how it can be reproduced numerically. In the interactive, thin purple lines correspond to the simulations whereas the orange line presents the analytical solution given the input parameters.

*Source Code:* `gillespie.py`

.

This interactive illustrates how a posterior probability distribution over the bias of a coin is influenced by the number of flips and the parameters of the prior distribution. In this example, the likelihood is a Binomial distribution of the form

\[f(n\,\vert\,N, p) = \frac{N!}{n! (N - n)!}p^n(1 - p)^{N - n},\]where \(N\) is the number of flips total and \(n\) is the number of heads. The conjugate prior of the Binomial likelihood is a Beta distribution parameterized by \(\alpha\) and \(\beta\),

\[f(p\,\vert\, \alpha, \beta) = \frac{p^{\alpha - 1} ( 1- p)^{\beta - 1}}{\mathbf{B}(\alpha, \beta)},\]where \(\mathbf{B}(\alpha, \beta)\) is a normalization factor defined as

\[\mathbf{B}(\alpha, \beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha + \beta)},\]where \(\Gamma(\dots)\) is a Gamma function.

*Source Code:* `bayesian_coin_flipper.py`

.