Back to Article
Supplementary material
Download Source

Supplementary material

Published

March 17, 2026

S1 Data preparation

Data filtering

  • runLen > 3
  • exclude detections in the middle of nowhere
  • remove manually classified false positives

Flight parameter determination

NoteFlight definition

Starting east of 8°E and north of 54°N with a distance of > 50 km between first and last receiver.

  • flightID flight identifier
  • flightStart start time (max signal strength at first receiver within last half hour)
  • flightEnd end time (last detection)
  • flightDate sunset date of departure
  • minStopover minimum stopover duration in days

Find departures without detected flights: movements of > 50 km within one day.

  • minLength minimum movement length

Validate data

Run Shiny app data/app.R to:

  • manually remove false positives
  • validate flight parameters

Data filtering shiny app.

Data filtering shiny app.

Model flight paths

In [1]:
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.2.0     ✔ readr     2.1.6
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.2     ✔ tibble    3.3.1
✔ lubridate 1.9.5     ✔ tidyr     1.3.2
✔ purrr     1.2.1     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(kableExtra)

Attaching package: 'kableExtra'

The following object is masked from 'package:dplyr':

    group_rows
setwd("..")
files <- list.files(pattern = "flightpaths-", recursive = TRUE)
est <- do.call(rbind, lapply(files, read.csv))

tmp <- est |>
  group_by(speciesEN) |>
  summarise(n = length(unique(flightID)))
    
bind_rows(tmp, tibble(speciesEN = "", n = sum(tmp$n))) |>
  kable() |>
  kable_styling(full_width = FALSE)
speciesEN n
Dunnock 10
Eurasian Blackbird 5
Eurasian Blackcap 32
Eurasian Reed Warbler 30
Eurasian Skylark 29
Garden Warbler 68
Greater Whitethroat 73
Redwing 18
Sedge Warbler 38
Song Thrush 54
Willow Warbler 19
376

Modelled flight paths per species.

Modelled flight paths per species.

Flight classification

Map showing the 10 km coastal buffer (blue area) used as threshold for classifying a flight as ‘offshore’.

Map showing the 10 km coastal buffer (blue area) used as threshold for classifying a flight as ‘offshore’.

Map showing the resulting flight classification. Red lines represent flights classified as ‘offshore’, blue lines the ones classified as ‘onshore’.

Map showing the resulting flight classification. Red lines represent flights classified as ‘offshore’, blue lines the ones classified as ‘onshore’.

S2 Simulation

Prior predictive simulations

Slopes

In [2]:
N <- 20 # number of simulations

alpha <- qlogis(rbeta(N, 2, 2))
beta <- rnorm(N, 0, 0.5)

plot(NULL, xlim = c(-2, 2), ylim = c(0, 1), xlab = "scaled")
for (i in 1:N) {
  curve(plogis(alpha[i] + beta[i] * x), from = -2, to = 2, add = TRUE)
}
Prior predictive simulation for slope parameters.

Measurement error

In [3]:
plot(NULL, xlim = c(0, 600), ylim = c(0, 0.05), xlab = "lengthW")
abline(v = c(50, 300), lty = 2)
for (i in 1:N) {
  lines(density(rlnorm(1e4, log(50), 0.2)))
  lines(density(rlnorm(1e4, log(300), 0.2)))
}
Prior predictive simulation for the measurement error.

Generative model

Note

The code to simulate and analyse data from the generative model can be found in 4_mixture_simulation.R.

Comparison between the posterior distributions and the known parameter values.

Comparison between the posterior distributions and the known parameter values.

Comparison between the posterior distribution and the simulated raw data for flight distances over water.

Comparison between the posterior distribution and the simulated raw data for flight distances over water.

S3 Results

Multi-state model

Departure probability

Posterior distributions of mean departure probability per species

Posterior distributions of mean departure probability per species

Effect of eastward (u) and southward (v) wind on departure probability, as predicted by the multi-state model with all other variables held at their mean values. The left panels show posterior mean predictions for each species, while the right panels present the overall posterior mean, 100 lines sampled from the posterior, and the raw data distributions by flight category.

Effect of eastward (u) and southward (v) wind on departure probability, as predicted by the multi-state model with all other variables held at their mean values. The left panels show posterior mean predictions for each species, while the right panels present the overall posterior mean, 100 lines sampled from the posterior, and the raw data distributions by flight category.

Routing decision

Effect of northward wind on offshore flight probability, as predicted by the multi-state model with all other variables held at their mean values. The left panel shows posterior mean predictions for each species, while the right panel presents the overall posterior mean, 100 lines sampled from the posterior, and the raw data distributions by flight category.

Effect of northward wind on offshore flight probability, as predicted by the multi-state model with all other variables held at their mean values. The left panel shows posterior mean predictions for each species, while the right panel presents the overall posterior mean, 100 lines sampled from the posterior, and the raw data distributions by flight category.

State-based mixture model

Posterior predictive checks for flight distance over water per species.

Posterior predictive checks for flight distance over water per species.

Posterior distributions of the mean flight distances over water per species.

Posterior distributions of the mean flight distances over water per species.

Posterior distributions of the mean probability of being in state 1 per species.

Posterior distributions of the mean probability of being in state 1 per species.

Effect of eastward wind on the probability for being in state 1, as predicted by the state-based mixture model for 200 km flights, with all other variables held at their mean values. The left panel shows posterior mean predictions for each species, while the right panels present the overall posterior mean, 100 lines sampled from the posterior.

Effect of eastward wind on the probability for being in state 1, as predicted by the state-based mixture model for 200 km flights, with all other variables held at their mean values. The left panel shows posterior mean predictions for each species, while the right panels present the overall posterior mean, 100 lines sampled from the posterior.

Effect of departure longitude on the probability for being in state 1 shown as 500 lines sampled from the posterior.

Effect of departure longitude on the probability for being in state 1 shown as 500 lines sampled from the posterior.

Map showing the posterior predictions for being in state 1 per flight.

Map showing the posterior predictions for being in state 1 per flight.