Latest posts

Creating an Expected Field Goal Metric

Using nflfastR play-by-play data to measure kicker performance.

Estimating Run/Pass Tendencies with tidyModels and nflfastR

This article shows how to use tidyModels to predict QB dropbacks and uses a multilevel model to show which teams are run/pass heavy after accounting for game script


Exonerating punters for long returns

Defense and rest time re-visited

Does incorporating actual rest time help us predict how a defense will do?

Calculating Expected Fantasy Points for Receivers

Use the nflfastR xYAC & CP models to calculate how many fantasy points an average receiver would expect to earn on each target.

Adding ESPN and 538 Game Predictions to nflfastR Data

Here, we'll look at how to scrape ESPN's and 538's pregame predictions and merge them into nflfastR data

Faceted and Animated Heatmaps

Combining lessons from multiple posts to create faceted or animated heatmaps.

Player Density and Completion Surface Estimates

Methods for modeling density estimates and expected completion percentages across the football field for individual players.

Fast Data Loading

Loading your nfl data at 10x speed!

Individual Expected Completion using Logistic Generalized Additive Mixed Models

Case study how to leverage Generalized Additive Mixed Models (GAMM) to estimate the individual probability of completion per Quarterback as a random effect.

Open Source (Fantasy) Football: Visualizing TRAP Backs

Using nflfastR data to visualize where on the field running backs get their carries and how that translates to the Trivial Rush Attempt Percentage (TRAP) model.

Expected Turnovers for Quarterbacks

Building expected interceptions and expected fumbles models to find QBs likely to increase or decrease their interceptions and/or turnovers per dropback from 2019 to 2020.

Getting into sports analytics

Collection of short answers to common questions.

Visualizing EPSN's Total QBR Using Interactive Plots

How to get ESPN data and create interactive plots using the plotly ggplot2 library.

Exploring Wins with nflfastR

Looking at what metrics are important for predicting wins. Creating expected season win totals and comparing to reality.

Ranking QBs Using Era Adjusted Elo

Use 538's QB Elo value, a highly predictive measurement of QB impact, to compare QB careers across era

Game Excitement and Win Probability in the NFL

Game excitement calculation and a win probability figure.

NFL Pass Location Visualization

Methods for visualizing NFL passing location data.

Rodgers Efficiency Decline

A look into Rodgers Efficiency Decline. Also some functions for plotting EPA/CPOE moving averages.

Visualizing the Run/Pass Efficiency Gap

Using nflfastR data to show how much more efficient passing is than rushing at the team level

Adjusting EPA for Strength of Opponent

This article shows how to adjust a team's EPA per play for the strength of their opponent. The benefits of adjusted EPA will be demonstrated as well!

Python contributing example

Showing how to contribute using Python code

Matching players without ID keys

Rebuilding player graphs when ID keys go missing or are corrupted.

Neural Nets using R

Using Keras in R to build neural networks.

The accumulation of QB hits vs passing efficiency

Do quarterbacks who get hit see their performance decline throughout the game?

Wins Above Expectation

This article looks at the percentage of snaps with win probability over an arbitralily chosen critical value and compares it with the true win percentage.

PFR's Bad Throw Percentage for Quarterbacks

This article shows how to scrape football data from Pro Football Reference and how to plot the bad throw percentage data for quarterbacks.

More articles »

Latest posts


If you see mistakes or want to suggest changes, please create an issue on the source repository.


Text and figures are licensed under Creative Commons Attribution CC BY-NC 4.0. Source code is available at, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".