In a tuna longline fishery, skippers target species not only through where they fish but also through how deep they set their hooks, which depends on the number of hooks between floats (HBF) and on the depth of the thermocline. This vignette compares the standardisation methods in two scenarios with identical targeting that differ only in the true trends:
| Scenario | Stocks | True trends |
|---|---|---|
| Flat | unfished at the start, lightly fished (q = 0.2,
B_start = 1) |
nearly flat |
| Contrasting | partly fished at the start, fished harder (package defaults) | diverging between species: BFT recovers, BET declines, … |
With flat trends, every change in the catch composition is caused by targeting. With contrasting trends, the composition also changes because the species’ relative abundances change.
Positions are reported as 5 x 5 blocks: logbooks rarely report
positions at the scale at which fish and fleets interact, and a longline
set may span a front. The thermocline moves between years in the results
shown here (Moving); results for a fixed thermocline are in
the replicates.
prices <- matrix(c(rep(c(0.3, 0.2, 1.0, 2.0), 10), # years 1-10: ALB (+ BFT)
rep(c(1.5, 2.5, 0.7, 0.3), 10), # years 11-20: BET (+ YFT)
rep(c(1.0, 2.0, 1.5, 0.5), 10)), # years 21-30: BET / BFT
ncol = 4, byrow = TRUE) # columns: YFT, BET, BFT, ALB
contrast_settings <- tuna_settings()
contrast_settings$price <- prices
flat_settings <- modifyList(contrast_settings, list(q = 0.2, B_start = rep(1, 4)))
moving <- list(thermocline_annual_sd = 15, thermocline_annual_field_sd = 10)
with_thermocline <- function(s) list(Fixed = s, Moving = modifyList(s, moving))
models <- c("Base", "Base+S", "Cluster+S", "DPC+S", "HBF+S")
# Standardisation: 5 models, plus DPC+S with 2 PCs
fit_one <- function(sim) {
fit <- standardize_cpue(sim, models = models, spatial_res = 5, n_pc = 3,
engine = "bam")
fit_2pc <- standardize_cpue(sim, models = "DPC+S", n_pc = 2,
label = " (2 PCs)", engine = "bam")
bind_comparisons(fit, fit_2pc)
}
# One scenario: simulations and fits for a fixed and a moving thermocline
run_single <- function(s, seed = 123) {
sims <- lapply(with_thermocline(s), simulate_tuna, seed = seed, plots = FALSE)
list(sims = sims, fits = lapply(sims, fit_one))
}flat and contrast each hold
sims and fits for the Fixed and
Moving thermocline, e.g. flat$sims$Moving and
flat$fits$Moving. The pre-run results from
inst/scripts/run_tuna_flat.R and
run_tuna_contrast.R are exactly these objects:
The prices switch the fleet from the cool south (ALB) to the warm north (BET) in year 11, which changes both where and how deep it fishes, and split it between BET in the north and BFT in the south in year 21, which changes only where it fishes.
In the Moving scenario the basin-wide thermocline goes up and down
between years, and the spatial pattern changes on top of it:
plot_om(flat$sims$Moving)$CPUE + ggtitle("Flat true trends")
plot_om(contrast$sims$Moving)$CPUE + ggtitle("Contrasting true trends")The same targeting produces jumps in nominal CPUE at years 11 and 21 in both scenarios; only the true trends (blue) differ.
All models are Tweedie GAMs with year plus a targeting
term (+S: spatial smoother on the 5 x 5 blocks): Base
(none), Cluster (4 clusters of the catch composition), DPC (3 principal
components, and 2 for comparison) and HBF (a factor for the gear).
fits <- list(Flat = flat$fits$Moving, Contrasting = contrast$fits$Moving)
plot_indices(fits, models = models)With diverging trends the number of PCs matters. The contrasting scenario with 2 PCs and 4 clusters: DPC is best where targeting is gradual or vertical (BET), clusters where tactics switch between water masses (YFT).
PC1 is the north-south gradient (where), PC2 the depth of the hooks (how deep): the PCA separates spatial and vertical targeting without being told that depth exists. With flat trends, the PCs change only in steps at the price switches. With contrasting trends, a gradual drift is added as the species’ relative abundances change:
20 seeds of each scenario, with a fixed and a moving thermocline
(inst/scripts/run_tuna_flat.R and
run_tuna_contrast.R):
reps <- rbind(
data.frame(readRDS(files[["flat_reps"]])$diagnostics, trend = "Flat trends"),
data.frame(readRDS(files[["contrast_reps"]])$diagnostics, trend = "Contrasting trends"))
reps$trend <- factor(reps$trend, levels = c("Flat trends", "Contrasting trends"))
reps$model <- factor(reps$model, levels = unique(as.character(reps$model)))
ggplot(reps, aes(x = model, y = rmse_log, fill = trend)) +
geom_boxplot(outlier.size = 0.6) +
facet_grid(species ~ scenario, scales = "free_y") +
labs(x = NULL, y = "RMSE of log index", fill = NULL,
title = "Same targeting: flat versus contrasting true trends") +
theme_bw() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "bottom")