Currently: I lead the modelling team at Recast Labs Inc, where I work on problems related to efficient gaussian-process approximations inside HMC, causal inference, and validation methods for computationally expensive Bayesian models.

I'm broadly interested in computational statistics, probabilistic programming systems, procedural art, Julia, and cross-country skiing.

I may blog here occasionally on those or other topics!

Formerly: I completed my M.Sc. at McMaster under Prof. Ben Bolker in June 2023, specialising in inference for stochastic state-space models of historical plagues.

@model function ascii_model(D, n_cells, n_chars)
    σ ~ Exponential(50.0)
    inv2σ2 = 1.0 / (2.0 * σ^2)
    log_norm = -0.5 * CELL_NPIX * log(2π * σ^2)
    ll = 0.0
    for i in 1:n_cells
        d_row = @view D[i, :]
        mx = -minimum(d_row) * inv2σ2
        lse = mx + log(sum(
            exp(-d * inv2σ2 - mx) for d in d_row
        ))
        ll += lse + log_norm - log(n_chars)
    end
    Turing.@addlogprob! ll
end

chain = sample(
    ascii_model(D, n_cells, N_CHARS),
    NUTS(), 500,
)
Posterior samples from a Turing.jl ascii-inverse model, conditioned on the photograph underneath.

Contact: first.last@gmail.com | github | linkedin