IYSE 6420 Birdcall Distributions

Author: Anthony Miyaguchi Last Modified: 2022-12-14

This website demonstrates the results of building birdcall distribution maps with Bayesian modeling methods. I completed this project for the IYSE 6420: Bayesian Statistics course as part of my Fall 2022 semester in Georgia Tech’s OMSCS program. See the project report and source on GitHub for more details.

We use the geographic metadata from the BirdCLEF 2022 competition dataset to build a map to show the location of birdcall recordings. We fit the data to a Poisson Generalized Linear Model (GLM) to estimate covariate or random effects.

Plots

We split each region into a grid (or regular lattice) and summarized birdcall recording observations into each grid cell. We define the grid in degrees of latitude or longitude. These discrete cells help fit a Bayesian model to the data and allow us to incorporate external geographical information derived from Google Earth Engine. The cells are small enough to be computationally tractable but large enough to capture the spatial variation in the data. See the Earth Engine Plots page for more information about the data we use from Google Earth Engine.

The posterior predictive is the estimated point prediction for the number of observations in each grid cell derived from the posterior distribution of the model parameters.

Options

Black-crowned Night-Heron (bcnher), americas, 5° resolution, 303 cells

Find more information about the Black-crowned Night-Heron on its eBird page.

linear scale

observed, linear ppc, linear

log scale

observed, log ppc, log

Trace Summary

One key component of Bayesian analysis is the ability to quantify uncertainty in the model predictions. We do this by sampling from the posterior distribution of the model parameters. These samples form a trace. We can summarize these traces into credible intervals, which describes how often a sample falls within a particular range.

We take advantage of this uncertainty to classify whether a particular parameter in the model is significant. We say that a parameter in the model is significant if it’s credible interval does not include zero (i.e. an analogy to rejecting the null hypothesis in a frequentist analysis).

options

Black-crowned Night-Heron (bcnher), americas, 5° resolution, 303 cells

misc parameters

This table contains posterior estimates for hyper-parameters for the CAR distribution such as α\alpha and τ\tau, as well as the intercept and slope parameters β\beta for the linear regression.

indexmeansdhdi_2.5%hdi_97.5%
intercept-12.8592.875-18.526-7.842
betas[LST_Day_1km_p5]8.2184.0020.46416.194
betas[land_cover_08_woody_savannas]-2.1781.072-4.322-0.129
betas[land_cover_09_savannas]5.3721.8152.0589.124
betas[land_cover_10_grasslands]-1.950.95-3.912-0.182
alpha0.8110.1430.5310.999
tau_phi0.0520.0320.010.114

Note that the land cover classification features often change from species to species. We can infer types of habits or environmental preferences from the significant features in the model.

spatial random effect ϕ\phi

This measures random spatial variation across grid cells. The prior ϕ\phi is drawn from the CAR distribution i.e. ϕiCAR(μi,τi,α,W)\phi_i \sim CAR(\mu_i, \tau_i, \alpha, W).

indexmeansdhdi_2.5%hdi_97.5%
phi[129.0]2.5491.3210.0915.275

Observe how the random effects explain more of the variance in the simpler intercept_car model than in the more complex intercept_car_spatial model.

poisson parameter μ\mu

The prior μ\mu is the rate parameter, which controls the expected number of observations in each grid cell. Note there are some notational inconsistencies here; this is the same as our θ\theta parameter in the model definitions, and is properly known as λ\lambda in the Poisson distribution.

indexmeansdhdi_2.5%hdi_97.5%
mu[0]4.5822.091.0448.659
mu[2]0.7660.7640.0032.28
mu[14]1.3631.1080.013.55
mu[27]1.3591.1020.0163.535
mu[42]2.5491.5480.1715.564
mu[53]6.1462.4591.93611.053
mu[64]2.6871.5990.2565.807
mu[125]1.8061.2860.0754.334
mu[129]4.1682.0050.9848.228
mu[130]0.6510.7080.0012.077
25 rows - page 1 of 3

Data

Data for this project can be found in the gs://iyse6420-birdcall-distribution bucket. Here are the direct links to source data:

You can load this data directly into a Python session using pandas and pyarrow:

>>> import pandas as pd
>>> df = pd.read_parquet("https://storage.googleapis.com/iyse6420-birdcall-distribution/ee_v3_ca_1.parquet")
>>> df.head()
      name region  grid_size  population_density  ...  land_cover_14  land_cover_15  land_cover_16  land_cover_17
0  -125_39     ca          1            7.639377  ...              0              0              0            117
1  -125_40     ca          1       172360.641191  ...              0              0              2           1032
2  -125_41     ca          1        48910.677999  ...              0              0              0           1386
3  -125_42     ca          1        39462.664024  ...              0              0              0           1436
4  -124_38     ca          1        32485.186359  ...              0              0              3           1348

[5 rows x 30 columns]
>>> df.shape
(68, 30)