Selectivity Options for Age-Structured Stock Assessments
A comparative framework using RTMB
Selectivity is a fundamental component of age-structured stock assessment models, governing how fishing mortality and survey catchability vary with age or size. The choice of selectivity parameterization affects estimates of population abundance, fishing mortality, and management reference points. This manuscript compares several selectivity formulations—including standard logistic, double logistic, spline-based, and time-varying 2D autoregressive approaches—within a unified RTMB framework. We examine parameter identifiability, prior sensitivity, and the practical consequences of selectivity misspecification using simulation and application to eastern Bering Sea walleye pollock (Gadus chalcogrammus). Results highlight trade-offs between flexibility and estimability and provide guidance for practitioners choosing among selectivity options in operational assessments.
selectivity, stock assessment, RTMB, fisheries, walleye pollock
1 Introduction
Selectivity functions describe the relative vulnerability of fish to capture as a function of age (or size) and are among the most influential—yet least observable—components of stock assessment models. The assumed shape of the selectivity curve directly affects estimates of spawning biomass, recruitment, and fishing mortality, and misspecification can propagate into biased reference points and management advice (Punt, Hurtado-Ferro, and Whitten 2013; Thompson 1994).
Despite its importance, selectivity is often treated as a modelling convenience rather than a biological or technological quantity to be estimated carefully. Most operational assessments adopt a logistic or double-logistic functional form, chosen for parsimony rather than fidelity to the underlying catch process. More flexible alternatives—such as penalized splines or non-parametric approaches—can reduce structural bias but may introduce identifiability problems, particularly when data are sparse or conflicting.
This manuscript develops a comparative framework for evaluating selectivity options within the R Template Model Builder (RTMB) environment. RTMB provides automatic differentiation, Laplace approximation for random effects, and integration with Bayesian sampling via SparseNUTS, making it a natural platform for exploring both maximum likelihood and posterior-based inference on selectivity parameters.
We organize the comparison around five selectivity families:
- Standard logistic (Section): the two-parameter ascending logistic, widely used for fisheries where retention is assumed to be monotonically increasing with age.
- Double logistic (Section): a dome-shaped three-parameter formulation allowing selectivity to decline at older ages, motivated by gear avoidance, ontogenetic habitat shifts, or differential availability.
- Generalized logistic (Richards) (Section): a flexible extension of logistic selectivity that can represent asymmetric transitions and plateau-like behavior while remaining smooth and differentiable.
- Spline-based (Section): a penalized B-spline approach offering flexible, data-driven selectivity shapes with smoothness controlled by a penalty parameter.
- Time-varying 2D AR1 (Section): a separable autoregressive structure over year and age dimensions, allowing selectivity to evolve smoothly through time while maintaining age-specific coherence via a Kronecker-structured precision matrix.
For each family, we present the mathematical formulation, an RTMB implementation with prior specification, parameter sensitivity analysis, and MCMC-based posterior evaluation. We then apply all to eastern Bering Sea walleye pollock data to illustrate practical trade-offs.
1.1 Review Scope and Literature Context
This review focuses on methodological literature that is directly relevant to three practical assessment decisions: (i) choice of selectivity functional form, (ii) model selection among competing selectivity hypotheses, and (iii) construction of time-varying selectivity processes with explicit regularization.
1.1.1 Selectivity form choice in integrated assessments
Operationally, selectivity in integrated assessments is best interpreted as the combined effect of gear contact/retention and fish availability, not as a purely mechanistic gear curve (Punt, Hurtado-Ferro, and Whitten 2013; Privitera-Johnson, Methot, and Punt 2022). In that setting, the choice of selectivity parameterization is consequential because it changes inference on spawning biomass, recruitment, and fishing mortality.
Selectivity-form selection therefore requires both statistical and biological diagnostics, including residual pattern checks, sensitivity analyses, and information-based comparisons among plausible alternatives (Punt, Hurtado-Ferro, and Whitten 2013). A key warning is that non-monotone selectivity can be strongly confounded with natural mortality, particularly when older ages are weakly informed by composition data (Thompson 1994).
1.1.2 Gear-selectivity estimation foundations
Classical selectivity-estimation literature remains important for assessment modeling because it clarifies what selectivity data can identify and where latent availability effects remain unresolved (Millar and Fryer 1999; Wileman et al. 1996). This evidence base supports explicit regularization whenever flexible age-specific selectivity surfaces are estimated.
1.1.3 Time-varying selectivity literature
Simulation studies show that time-varying selectivity can materially improve or degrade assessment performance depending on how process flexibility matches the data-generating mechanism (Linton and Bence 2011). Practitioner guidance also emphasizes that subjective choices such as block boundaries, smoothing penalties, and process assumptions can dominate outcomes (Martell and Stewart 2014).
Recent semi-parametric approaches formalize autocorrelation across both age and time, motivating separable latent-process structures that can be estimated within modern AD frameworks (Xu et al. 2019). A foundational applied example is the likelihood-based Southern Bluefin Tuna assessment of (Butterworth, Ianelli, and Hilborn 2003). This method allows temporally structured selectivity changes and treats catch-at-age data as error-prone rather than fixed. Broader SCA model-selection and time-varying process work reinforces the same bias-variance trade-off (Wilberg and Bence 2006, 2008).
1.2 Statistical Framing as a Latent Process
Although selectivity is often presented as a deterministic curve, it is more usefully viewed as a latent process that allocates fishing intensity over age and time. Under this framing, selecting a functional form is equivalent to selecting a prior precision structure on an unobserved selectivity surface.
Low-dimensional parametric forms (for example, logistic and double logistic) impose strong structural priors and are robust when data are sparse. Flexible forms (for example, spline and time-varying AR structures) reduce structural bias risk, but require explicit regularization to prevent confounding and overfitting (Martell and Stewart 2014; Xu et al. 2019).
This perspective motivates three principles for applied assessments:
- Match effective selectivity complexity to data information content.
- Treat regularization (penalties/priors/precision structures) as essential, not optional.
- Use model-selection tools (AIC, DIC, cross-validation, posterior predictive checks) to evaluate bias-variance trade-offs under explicit prior structure (Punt, Hurtado-Ferro, and Whitten 2013; Wilberg and Bence 2008).
Regularization can also be framed as numerical stabilization: penalties such as ridge/Tikhonov terms or spline roughness controls impose smoothness that improves conditioning and mitigates overfitting, echoing the numerical recipes literature on stabilization and controlled flexibility in nonlinear optimization (Press et al. 1992).
Within this unifying view, logistic, dome-shaped, spline, blocked, and AR(1) approaches differ primarily in the precision matrix implied for latent selectivity deviations, rather than only in curve geometry.
2.5 Overview
This notebook documents the 3-parameter double logistic selectivity curve used for prior elicitation in the EBS pollock assessment workflow. The formulation allows dome-shaped selectivity, where vulnerability increases with age to a peak and then declines. This behavior is motivated by gear avoidance at older ages, ontogenetic habitat shifts, or differential availability between age classes.
Within integrated assessments, double-logistic forms are often a practical extension of monotone logistic selectivity because they can represent declining vulnerability at older ages while remaining low-dimensional (Punt, Hurtado-Ferro, and Whitten 2013). Interpretation still requires care: dome shape can be confounded with natural mortality and cohort processes if independent information is weak (Thompson 1994).
2.6 Model definition
Let age be \(a\), with parameters \(p_1\), \(p_2\), and \(p_3\) and derived inflection points \(\gamma_1\) and \(\gamma_2\):
\[ \gamma_1 = p_1 + p_2, \qquad \gamma_2 = 2p_1 + p_2 + p_3. \]
The ascending limb is a standard logistic and the descending limb is one minus a logistic:
\[ \text{asc}(a) = \frac{1}{1 + \exp\left[-\log(19)\,\frac{a - \gamma_1}{p_1}\right]}, \]
\[ \text{desc}(a) = 1 - \frac{1}{1 + \exp\left[-\log(19)\,\frac{a - \gamma_2}{p_3}\right]}. \]
The full double logistic selectivity is
\[ \text{sel}(a) = \min\left(1,\ \frac{\text{asc}(a)\,\text{desc}(a)}{0.95^2}\right). \]
2.6.1 Interpretation
- \(p_1 > 0\) controls the ascending slope and is the distance from \(\gamma_1\) (50% selectivity) to the 95% point.
- \(p_2\) shifts the ascending limb through \(\gamma_1 = p_1 + p_2\).
- \(p_3 > 0\) controls the descending slope and is the distance from \(\gamma_2\) (50% on the descending limb) to the 5% point.
- The dome width is \(\gamma_2 - \gamma_1 = p_1 + p_3\).
- The factor \(0.95^{-2}\) normalizes the curve so that when both limbs are at 0.95 the product is near 1 (then capped at 1.0).
2.7 Scenarios
Show R code
library(ggplot2)
library(dplyr)
library(tidyr)
library(patchwork)
dbl_logistic_sel <- function(age, p1, p2, p3) {
gamma1 <- p1 + p2
gamma2 <- 2 * p1 + p2 + p3
asc <- 1 / (1 + exp(-log(19) * (age - gamma1) / p1))
desc <- 1 - 1 / (1 + exp(-log(19) * (age - gamma2) / p3))
sel <- asc * desc * 0.95^(-2)
pmin(sel, 1.0)
}
ages <- seq(1, 15, by = 0.1)
scenarios <- tibble(
scenario = c(
"Wide dome",
"Asymmetric\n(fast rise, slow decline)",
"Asymmetric\n(slow rise, fast decline)",
"Nearly asymptotic"
),
p1 = c(2.0, 0.8, 2.0, 1.5),
p2 = c(4.0, 4.0, 3.0, 4.0),
p3 = c(2.5, 3.0, 0.8, 8.0)
) %>%
mutate(
gamma1 = p1 + p2,
gamma2 = 2 * p1 + p2 + p3,
dome_width = gamma2 - gamma1
)
sel_data <- scenarios %>%
rowwise() %>%
do({
scen <- .
tibble(
scenario = scen$scenario,
age = ages,
selectivity = dbl_logistic_sel(ages, scen$p1, scen$p2, scen$p3),
p1 = scen$p1,
p2 = scen$p2,
p3 = scen$p3,
gamma1 = scen$gamma1,
gamma2 = scen$gamma2
)
}) %>%
ungroup() %>%
mutate(
label = sprintf("%s\n(p1=%.1f, p2=%.1f, p3=%.1f)", scenario, p1, p2, p3)
)Show R code
knitr::kable(
scenarios,
digits = 2
)| scenario | p1 | p2 | p3 | gamma1 | gamma2 | dome_width |
|---|---|---|---|---|---|---|
| Wide dome | 2.0 | 4 | 2.5 | 6.0 | 10.5 | 4.5 |
| Asymmetric | ||||||
| (fast rise, slow decline) | 0.8 | 4 | 3.0 | 4.8 | 8.6 | 3.8 |
| Asymmetric | ||||||
| (slow rise, fast decline) | 2.0 | 3 | 0.8 | 5.0 | 7.8 | 2.8 |
| Nearly asymptotic | 1.5 | 4 | 8.0 | 5.5 | 15.0 | 9.5 |
The scenario summary in Table lists the four parameter sets and the derived inflection points (\(\gamma_1\), \(\gamma_2\)) used in the selectivity scenarios.
2.8 Faceted scenario curves
Each scenario appears on its own panel in Figure so the ascent, descent, and dome width can be compared against the 50% and 95% reference lines.
Show R code
p1_plot <- ggplot(sel_data, aes(x = age, y = selectivity)) +
geom_line(linewidth = 1.2, color = "steelblue") +
geom_hline(yintercept = c(0.5, 0.95), linetype = "dashed",
color = "gray50", alpha = 0.7) +
geom_vline(aes(xintercept = gamma1), linetype = "dotted",
color = "red", alpha = 0.5) +
geom_vline(aes(xintercept = gamma2), linetype = "dotted",
color = "orange", alpha = 0.5) +
facet_wrap(~label, ncol = 2) +
scale_x_continuous(breaks = seq(2, 14, by = 2)) +
scale_y_continuous(limits = c(0, 1.05), breaks = seq(0, 1, by = 0.25)) +
labs(
title = "3-parameter double logistic selectivity curves",
subtitle = "Dashed lines show 50% and 95% selectivity",
x = "Age",
y = "Selectivity",
caption = "Red dotted = gamma1, orange dotted = gamma2"
) +
theme_bw(base_size = 11) +
theme(
strip.text = element_text(size = 9),
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
p1_plot2.9 Overlay comparison
All scenarios are overlaid in Figure to highlight differences in peak age and decline shape when the curves are viewed on a common axis.
Show R code
p2_plot <- ggplot(sel_data, aes(x = age, y = selectivity, color = scenario)) +
geom_line(linewidth = 1.2) +
geom_hline(yintercept = c(0.5, 0.95), linetype = "dashed",
color = "gray50", alpha = 0.5) +
scale_x_continuous(breaks = seq(2, 14, by = 2)) +
scale_y_continuous(limits = c(0, 1.05), breaks = seq(0, 1, by = 0.25)) +
scale_color_brewer(palette = "Set1", name = "Scenario") +
labs(
title = "Comparison of double logistic selectivity curves",
subtitle = "All scenarios overlaid",
x = "Age",
y = "Selectivity"
) +
theme_bw(base_size = 12) +
theme(
legend.position = "right",
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
p2_plot2.10 Parameter sensitivity analysis
The three panels in Figure show how each parameter changes the curve when the other two are held fixed.
Show R code
p1_vary <- expand_grid(
p1 = seq(0.5, 3, by = 0.5),
p2 = 5,
p3 = 2,
age = ages
) %>%
rowwise() %>%
mutate(selectivity = dbl_logistic_sel(age, p1, p2, p3)) %>%
ungroup()
p3a <- ggplot(p1_vary, aes(x = age, y = selectivity, color = factor(p1))) +
geom_line(linewidth = 1) +
scale_color_viridis_d(name = "p1", option = "C") +
scale_y_continuous(limits = c(0, 1.05)) +
labs(title = "Sensitivity to p1 (ascending slope)",
subtitle = "p2 = 5, p3 = 2 fixed",
x = "Age", y = "Selectivity") +
theme_bw(base_size = 9) +
theme(legend.position = "right", aspect.ratio = 1)
p2_vary <- expand_grid(
p1 = 1.5,
p2 = seq(2, 8, by = 1),
p3 = 2,
age = ages
) %>%
rowwise() %>%
mutate(selectivity = dbl_logistic_sel(age, p1, p2, p3)) %>%
ungroup()
p3b <- ggplot(p2_vary, aes(x = age, y = selectivity, color = factor(p2))) +
geom_line(linewidth = 1) +
scale_color_viridis_d(name = "p2", option = "D") +
scale_y_continuous(limits = c(0, 1.05)) +
labs(title = "Sensitivity to p2 (horizontal shift)",
subtitle = "p1 = 1.5, p3 = 2 fixed",
x = "Age", y = "Selectivity") +
theme_bw(base_size = 9) +
theme(legend.position = "right", aspect.ratio = 1)
p3_vary <- expand_grid(
p1 = 1.5,
p2 = 4,
p3 = seq(0.5, 6.5, by = 1),
age = ages
) %>%
rowwise() %>%
mutate(selectivity = dbl_logistic_sel(age, p1, p2, p3)) %>%
ungroup()
p3c <- ggplot(p3_vary, aes(x = age, y = selectivity, color = factor(p3))) +
geom_line(linewidth = 1) +
scale_color_viridis_d(name = "p3", option = "E") +
scale_y_continuous(limits = c(0, 1.05)) +
labs(title = "Sensitivity to p3 (descending slope)",
subtitle = "p1 = 1.5, p2 = 4 fixed",
x = "Age", y = "Selectivity") +
theme_bw(base_size = 9) +
theme(legend.position = "right", aspect.ratio = 1)
p_sensitivity <- (p3a | p3b) / (p3c | plot_spacer()) +
plot_annotation(
title = "Parameter sensitivity analysis",
subtitle = "Effect of varying each parameter individually"
)
p_sensitivity2.11 RTMB implementation with priors
A common approach is to estimate on the log scale for the positive parameters and apply lognormal priors on \(p_1\) and \(p_3\):
\[ \log(p_k) \sim \mathcal{N}(\mu_k, \sigma_k^2), \qquad k \in \{1, 3\}. \]
If using a lognormal prior specified by median \(m\) and coefficient of variation \(\text{CV}\) on the natural scale, a convenient conversion is
\[ \mu = \log(m), \qquad \sigma = \sqrt{\log(\text{CV}^2 + 1)}. \]
Parameter \(p_2\) can remain unconstrained (normal prior) or be modeled on the log scale if you want to enforce \(p_2 > 0\).
outer mgc: 0
outer mgc: 0
outer mgc: 0.006737636
outer mgc: 0.006737636
outer mgc: 0.001
outer mgc: 0.001
outer mgc: 0.003252194
outer mgc: 0.003252194
outer mgc: 2.5
2.12 MCMC evaluation
Gradient evaluation took 4.3e-05 seconds
1000 transitions using 10 leapfrog steps per transition would take 0.43 seconds.
Adjust your expectations accordingly!
Elapsed Time: 0.018 seconds (Warm-up)
0.208 seconds (Sampling)
0.226 seconds (Total)
Model 'selectivity_set1' has 3 pars, and was fit using NUTS with a 'diag' metric
1 chain(s) of 1300 total iterations (150 warmup) were used
Average run time per chain was 0.23 seconds
Minimum ESS=360.7 (31.37%), and maximum Rhat=1.015
There were 0 divergences after warmup
Show R code
SparseNUTS::plot_marginals(fit_set1, pars = 1:3)The marginal posterior densities in Figure summarize \((p_1, p_2, p_3)\) under prior set 1.
Show R code
pairs(fit_set1)Show R code
df_set1 <- mcmc_selectivity_df(fit_set1, age)
plot_mcmc_selectivity(df_set1)2.12.1 Additional prior sets
Gradient evaluation took 2.3e-05 seconds
1000 transitions using 10 leapfrog steps per transition would take 0.23 seconds.
Adjust your expectations accordingly!
Elapsed Time: 0.018 seconds (Warm-up)
0.122 seconds (Sampling)
0.14 seconds (Total)
Model 'selectivity_set2' has 3 pars, and was fit using NUTS with a 'diag' metric
1 chain(s) of 1300 total iterations (150 warmup) were used
Average run time per chain was 0.14 seconds
Minimum ESS=393.8 (34.24%), and maximum Rhat=1.003
There were 0 divergences after warmup
Gradient evaluation took 2.3e-05 seconds
1000 transitions using 10 leapfrog steps per transition would take 0.23 seconds.
Adjust your expectations accordingly!
Elapsed Time: 0.017 seconds (Warm-up)
0.129 seconds (Sampling)
0.146 seconds (Total)
Model 'selectivity_set3' has 3 pars, and was fit using NUTS with a 'diag' metric
1 chain(s) of 1300 total iterations (150 warmup) were used
Average run time per chain was 0.15 seconds
Minimum ESS=427 (37.13%), and maximum Rhat=1.005
There were 0 divergences after warmup
Show R code
df_set2 <- mcmc_selectivity_df(fit_set2, age)
plot_mcmc_selectivity(df_set2)Show R code
df_set3 <- mcmc_selectivity_df(fit_set3, age)
plot_mcmc_selectivity(df_set3)2.13 Generalized Logistic (Richards)
The generalized logistic (Richards) form is a practical extension of the standard and double logistic families when additional curvature is required, particularly for asymmetric transitions and near-plateau behavior. The interactive tool linked from Maunder’s selectivity page (Fitting Double Richards to Double Normal Selectivity) shows that a double generalized logistic can closely approximate a split-normal-with-plateau target while preserving smooth derivatives useful for optimization.
2.13.1 Model definition
For an ascending Richards curve at age \(a\):
\[ \text{Richards}_{\uparrow}(a;\,a_{50},k,\nu)= \left(1+\exp\left[-k(a-a_{50})\right]\right)^{-1/\nu}, \]
where \(a_{50}\) is an inflection-location parameter, \(k>0\) controls transition rate, and \(\nu>0\) controls asymmetry (shape).
A descending limb can be written as:
\[ \text{Richards}_{\downarrow}(a;\,a_{50},k,\nu)= 1-\left(1+\exp\left[-k(a-a_{50})\right]\right)^{-1/\nu}. \]
A convenient double-Richards selectivity is then:
\[ \text{sel}(a)= \frac{ \text{Richards}_{\uparrow}(a;\,a_{50,1},k_1,\nu_1)\, \text{Richards}_{\downarrow}(a;\,a_{50,2},k_2,\nu_2) }{ \max_a\left[ \text{Richards}_{\uparrow}(a;\,a_{50,1},k_1,\nu_1)\, \text{Richards}_{\downarrow}(a;\,a_{50,2},k_2,\nu_2) \right] }, \]
which scales peak selectivity to 1.0.
2.13.2 Optional parameter settings
Show R code
richards_scenarios <- tibble::tibble(
scenario = c(
"Near-symmetric dome",
"Fast rise, slow decline",
"Slow rise, fast decline",
"Broad plateau-like dome"
),
a50_up = c(4.5, 4.0, 5.2, 4.8),
k_up = c(1.2, 2.0, 0.8, 1.1),
nu_up = c(1.0, 0.7, 1.4, 0.8),
a50_down = c(9.8, 10.5, 9.5, 11.0),
k_down = c(1.1, 0.8, 1.9, 0.7),
nu_down = c(1.0, 1.4, 0.7, 1.3)
)
knitr::kable(richards_scenarios, digits = 2)| scenario | a50_up | k_up | nu_up | a50_down | k_down | nu_down |
|---|---|---|---|---|---|---|
| Near-symmetric dome | 4.5 | 1.2 | 1.0 | 9.8 | 1.1 | 1.0 |
| Fast rise, slow decline | 4.0 | 2.0 | 0.7 | 10.5 | 0.8 | 1.4 |
| Slow rise, fast decline | 5.2 | 0.8 | 1.4 | 9.5 | 1.9 | 0.7 |
| Broad plateau-like dome | 4.8 | 1.1 | 0.8 | 11.0 | 0.7 | 1.3 |
Show R code
richards_up <- function(age, a50, k, nu) {
(1 + exp(-k * (age - a50)))^(-1 / nu)
}
richards_down <- function(age, a50, k, nu) {
1 - richards_up(age, a50, k, nu)
}
double_richards_sel <- function(age, a50_up, k_up, nu_up, a50_down, k_down, nu_down) {
raw <- richards_up(age, a50_up, k_up, nu_up) *
richards_down(age, a50_down, k_down, nu_down)
raw / max(raw)
}
ages <- seq(1, 15, by = 0.1)
richards_df <- richards_scenarios |>
dplyr::rowwise() |>
dplyr::do({
s <- .
tibble::tibble(
scenario = s$scenario,
age = ages,
selectivity = double_richards_sel(
age = ages,
a50_up = s$a50_up, k_up = s$k_up, nu_up = s$nu_up,
a50_down = s$a50_down, k_down = s$k_down, nu_down = s$nu_down
)
)
}) |>
dplyr::ungroup()
ggplot2::ggplot(richards_df, ggplot2::aes(x = age, y = selectivity, color = scenario)) +
ggplot2::geom_line(linewidth = 1.1) +
ggplot2::scale_y_continuous(limits = c(0, 1.05), breaks = seq(0, 1, by = 0.25)) +
ggplot2::labs(
x = "Age",
y = "Selectivity",
color = "Scenario"
) +
ggplot2::theme_bw(base_size = 11) +
ggplot2::theme(panel.grid.minor = ggplot2::element_blank())In assessment practice, this flexibility can reduce structural bias relative to overly rigid parametric shapes, but it also introduces additional parameters and therefore greater identifiability risk. With limited composition information, shape parameters can become weakly determined and confound with other model components such as natural mortality, catchability, and recruitment patterns.
A defensible use case is as a candidate or sensitivity model, with regularization or parameter bounds and explicit comparison against simpler alternatives (logistic/double logistic) and semi-parametric alternatives (for example, spline selectivity). Diagnostics should include residual structure, parameter-profile behavior, and sensitivity of management quantities to the added flexibility.
4.6.1 Comparison of time-varying selectivity approaches
Show R code
compare_tv <- data.frame(
Approach = c(
"Structured temporal selectivity (Butterworth et al. 2003)",
"Separable AR1 surface (this manuscript)",
"Block/time‑period selectivity"
),
Structure = c(
"Pre‑specified temporal structure on selectivity changes",
"Autocorrelated deviations across age and time",
"Piecewise‑constant selectivity blocks"
),
Strengths = c(
"Historical applied example; likelihood‑based CAA with error",
"Smooth evolution; explicit regularization",
"Transparent and easy to communicate"
),
Risks = c(
"Potential confounding if structure is too rigid",
"Over‑flexibility if penalties are weak",
"Arbitrary block boundaries"
),
check.names = FALSE
)
knitr::kable(compare_tv)| Approach | Structure | Strengths | Risks |
|---|---|---|---|
| Structured temporal selectivity (Butterworth et al. 2003) | Pre‑specified temporal structure on selectivity changes | Historical applied example; likelihood‑based CAA with error | Potential confounding if structure is too rigid |
| Separable AR1 surface (this manuscript) | Autocorrelated deviations across age and time | Smooth evolution; explicit regularization | Over‑flexibility if penalties are weak |
| Block/time‑period selectivity | Piecewise‑constant selectivity blocks | Transparent and easy to communicate | Arbitrary block boundaries |
4.7 Comparison and Discussion
The five selectivity families evaluated here span a practical gradient from low-dimensional structural assumptions to high-dimensional latent-process flexibility. The logistic model (Section; Figure) provides an interpretable baseline with strong monotonicity assumptions and minimal parameter burden. The double-logistic model (Section; Table, Figure, Figure) adds biologically plausible dome-shape behavior, but also increases confounding risk with natural mortality and cohort effects when data support is limited (Thompson 1994).
The generalized logistic (Richards) option (Section) extends this parametric family by allowing asymmetric transitions and plateau-like behavior. Its additional flexibility can improve fit when conventional logistic forms are too restrictive, but the associated parameter expansion requires stronger identifiability checks and careful regularization.
Spline selectivity (Section; Figure; Figure) offers useful middle ground: flexible shape estimation with transparent control of roughness via penalization. In review terms, this is a semi-parametric compromise between rigid parametric forms and fully dynamic latent surfaces. The time-varying 2D AR1 approach (Section; Figure; Figure) further extends flexibility by allowing coherent year-by-age evolution with explicit process structure, aligning with recent recommendations for autocorrelated selectivity deviations (Linton and Bence 2011; Xu et al. 2019).
For scientific review and operational assessment use, a defensible workflow is:
- Start with a parsimonious baseline (logistic or double logistic) and diagnose fit deficiencies in composition residuals and retrospective patterns.
- Introduce additional flexibility (spline or time-varying structures) only when diagnostics indicate systematic lack of fit and data support richer structure.
- Compare candidate models with complementary evidence, including information criteria, predictive checks, and sensitivity of management quantities (Punt, Hurtado-Ferro, and Whitten 2013; Wilberg and Bence 2008).
- Report regularization choices and identifiability diagnostics explicitly, because inferred selectivity dynamics are conditional on prior/penalty assumptions (Martell and Stewart 2014; Privitera-Johnson, Methot, and Punt 2022).
Overall, the central trade-off is not whether one curve family is universally “best”, but whether the assumed latent structure is commensurate with the available information and management objectives.