More About Me


What I do.

Teaching Philosophy

What does being an effective teacher mean to me?


The things I’ve done.



Interpreting Regression

An in-progress book on data-driven problem solving from a probabilistic lens. A modern take to statistics. Title may change.

STAT 545 @ UBC

An open-access course on data wrangling, exploration, and analysis using the modern R landscape with git.

YouTube Channel

Short videos promoting a clean and modern data analysis. Pairs with STAT 545.


Draw powerful multivariate insights using copulas. R package. Coming soon!


Draw powerful insights using distributions. R package.


Tools for accessing the IG and IGL family of copulas. R package.


Build predictive distributions using linear quantile regression. R package.


You all know the drill – you’re asked to make predictions of a continuous variable, so you turn to your favourite supervised learning method to do the trick. But have you ever suspected that you could be after the wrong type of output before you even begin? Regression trees, loess, linear regression… you name it, they’re all in pursuit of the mean (well, almost all). But the true outcome is random.

This tutorial introduces contour plots, and how to plot them in ggplot2. What is a contour plot? Suppose you have a map of a mountainous region. How might you indicate elevation on that map, so that you get to see the shape of the landscape? The idea is to use contour lines, which are curves that indicate a constant height. Imagine cutting the tops of the mountains off by removing all land above, say, 900 meters altitude.

This tutorial introduces the concept of a mixture distribution. We’ll look at a basic example first, using intuition, and then describe mixture distributions mathematically. See the very end for a summary of the learning points. Intuition Let’s start by looking at a basic experiment: Flip a coin. If the outcome is heads, generate a N(0,1) random variable. If the outcome is tails, generate a N(4,1) random variable. We’ll let \(X\) denote the final result.

How to communicate data through visuals. Inspired by Claus Wilke’s “Fundamentals of Data Visualization”.

Slides here

Generalized Additive Models To fit a GAM in R, we could use: the function gam in the mgcv package, or the function gam in the gam package. Differences between the two functions are discussed in the “Details” section of the gam documentation in the mgcv package. Choose one, but don’t load both! mgcv tends to be updated more frequently, and is generally more flexible (compare the Index pages), so that’s what is used in this tutorial.

License: CC BY 4.0