1 Introduction to Generalized Additive Models (GAMs)
A short course on how to fit, plot, and evaluate GAMs
The course website URL available at pedersen-fisheries-lab.github.io/one-day-gam-workshop/
Overview
This is a 3-session, one-day workshop. It was developed with the goal of giving you enough GAM knowledge to feel comfortable fitting and working with GAMs in your day-to-day modelling practice, with just enough of more advanced applications to give a flavour of what GAMs can do. I will be covering a basic intro to GAM theory, with the rest focused on practical applications and a few advanced topics that I think might be interesting.
Learning Goals
- Understand the basic GAM model, basis functions, and penalties
- Fit 1D, 2D, and tensor-product GAMs to normal and non-normal data
- Plot GAM fits, and understand how to explain GAM outputs
- Diagnose common mispecification problems when fitting GAMs
- Use GAMs to make predictions about new data, and assess model uncertainty
- See how more complicated GAM models can be used as part of a modern workflow
Setup
You will need to install R and I recommend using RStudio. The latest version of R can be downloaded here. RStudio is an application (an integrated development environment or IDE) that facilitates the use of R and offers a number of nice additional features. It can be downloaded here. You will need the free Desktop version for your computer.
Download the course materials as a ZIP file here. Alternatively, if you have the usethis, R package, running the following command will download the course materials and open them:
::use_course('pedersen-fisheries-lab/one-day-gam-workshop') usethis
Install the R packages required for this course by running the following line of code your R console:
install.packages(c("dplyr", "ggplot2", "remotes", "mgcv", "tidyr")) ::install_github("gavinsimpson/gratia") remotes
2 What is a GAM, and 1d smoothers
On Day 1, we covered:
- Example data: Temperature with depth
- Refresher on GLMs (regression, parameters, link functions)
- Why smooth?
- Simple models with
s()
- Introduction to the data
- Adding more than one smooth to your model
summary
andplot
Follow the lecture and R script below:
3 “Twiddling knobs in gam
”
On Day 2, we covered:
- Moving beyond normal data (richness, shrimp biomass)
- Exponential family and conditionally exp family (i.e.,
family
+tw
+nb
)
- Exponential family and conditionally exp family (i.e.,
- More dimensions (Shrimp biomass)
- Thin-plate 2d (Shrimp biomass with space)
- What are tensors? (Shrimp biomass as a function of depth and temperature)
ti
vste
- Spatio-temporal modelling
te(x,y,t)
constructions
- Centering constraints
- What does the intercept mean?
Follow the lecture and R script below:
4 Prediction, uncertainty, model checking, and selection
On Day 3, we covered:
- Using
predict
to calculate confidence intervals - Posterior simulation
gam.check
for model checking- Quantile residuals
- Diagnostic:
DHARMa
- Fitting to the residuals
AIC
etc.- Shrinkage and
select=TRUE
Follow the lecture and R script below:
5 Other useful resources
3-day GAM workshop for DFO, a longer version of this workshop
Our paper on Hierarchical Generalized Additive Models
Noam Ross’s GAMs in R tutorial
Noam Ross’s Short talk on many types of models that can fit with mgcv
Gavin Simpson’s Blog: From the Bottom of the Heap
Gavin Simpson’s Online GAM workshop
David Miller’s NOAA workshop based on the ESA workshop
6 Other useful GAM resources:
Simon Wood’s book “Generalized Additive Models: An Introduction with R, Second Edition”, is an incredibly useful tool for learning about GAMs, and covers all of this material in depth.
Hefley et al. (2017). “The basis function approach for modeling autocorrelation in ecological data”. This is a great paper laying out how basis functions are used to model complex spatially structured systems.
The
mgcVis
package has more tools for plotting GAM model outputs. See Fasiolo et al.’s paper 2019 “Scalable visualization methods for modern generalized additive models”.
Citation
@online{pedersen2021,
author = {Pedersen, Eric},
title = {Introduction to {Generalized} {Additive} {Models} {(GAMs)}},
date = {2021-11-02},
url = {https://bios2.github.io/posts/2021-11-02-introduction-to-gams/},
langid = {en}
}