flowchart LR A["Accepted 2024 ADMB model"] --> C["Corrected full-age BTS ADMB candidate"] C --> B["SPoRC corrected implementation bridge"] D["Corrected ADMB and RTMB bridge artifacts"] --> B B --> G["Implementation-equivalence gate<br/>passed"] G --> R["Diagnostic and review gate<br/>development stage"] R -.-> U["Paired annual updates<br/>uncertainty and projections"] classDef accepted fill:#f5c242,stroke:#805f00,color:#172b3a,stroke-width:2px; classDef pass fill:#eef8f0,stroke:#2e7d32,color:#17451a,stroke-width:3px; classDef pending fill:#f4f0fa,stroke:#6d5cae,color:#17324d,stroke-width:2px; class A,D accepted; class B,G pass; class R,U pending;
Refinements to SPoRC for eastern Bering Sea pollock
Working paper on the corrected 2024 “PM” model implementation bridge
The custom AD Model Builder (ADMB) stock assessment model for eastern Bering Sea walleye pollock has a long history of operational use. This working paper evaluates an implementation of the 2024 assessment in the Stock Population and Recruitment Computational (SPoRC) framework. The corrected bridge normalizes bottom-trawl survey age compositions across ages 1–15 and retains nominal multinomial sample sizes; ages 2–15 continue to define the survey abundance total. Spawning biomass, recruitment, population numbers at age, and selectivity agree with the corrected ADMB candidate at high numerical accuracy. The accepted ADMB assessment retains its management role. Updated afscOSA diagnostics, nine retrospective peels, a 30-dataset simulation self-test, and SPoRC-derived spmR projections all use the corrected fit. Fixing steepness preserves implementation equivalence. A correlated bivariate random walk on annual bottom-trawl survey midpoint and slope supports a sparse-metric SparseNUTS trial and identifies the remaining posterior geometry for further development.
Download a PDF version of this report
1 Executive Summary
This page implements the SPoRC single-region EBS pollock case study as the SPoRC member of the EBS pollock model family. The primary lane uses a corrected ADMB model in which BTS observed age compositions sum to one across ages 1–15 and the multinomial retains the nominal sample sizes. Ages 2–15 continue to define the BTS abundance-total series.
The implementation reproduces the corrected 2024 ADMB candidate’s spawning biomass and recruitment series at near-numerical precision. The accepted ADMB assessment retains its role as the management model.
The exact bridge has a maximum time-series difference of 0.0611%. The fitted solution has a positive-definite Hessian and a maximum fixed-effect gradient of 3.17e-08. The evidence remains a development-model result, with ADMB retained as the management reference.
The corrected SPoRC fit reproduces six ADMB state and selectivity surfaces with a maximum difference of 0.0611%. Relative to the legacy adjusted-ISS bridge, the correction changes spawning biomass by at most 1.62% and recruitment by at most 1.81%. All diagnostics and projections use the corrected lane.
Fixing steepness at 0.6184280 preserves the corrected bridge at numerical precision. A correlated bivariate random walk on annual BTS log(a50) and log(k) improves the maximum- likelihood objective relative to independent increments. Section Section 5.4 reports the updated sparse-metric posterior diagnostics and retains the maximum-likelihood bridge as the implementation basis.
The implementation uses SPoRC version 1.2.0.9000 from development branch dev-popn-seasons at commit 63af5a30, and covers 1964–2024.
1.1 Position in the model family
The family registry is stored in config/model_family.yml. The exact bridge is the admission case. The comparisons exclude the earlier three-survey Beverton–Holt experiment because it uses a different model specification.
2 Purpose and Scope
This working paper documents whether SPoRC can reproduce the principal population dynamics and assessment outputs of the accepted 2024 eastern Bering Sea pollock model. It serves as an implementation and methods comparison rather than a full Stock Assessment and Fishery Evaluation chapter.
The paper therefore records:
- the model inputs and structural choices represented in SPoRC;
- agreement between the SPoRC and ADMB bridge calculations;
- fishery and survey selectivity comparisons;
- numerical and likelihood-accounting diagnostics; and
- the files and software revision needed to reproduce the analysis.
Fishery history, ecosystem narrative, projections, reference-point tables, and harvest recommendations are outside the scope of this working paper.
3 Initial SPoRC Developments
3.1 Model Inputs
The model is single population, single region, single season, and single sex, with 15 ages, one fishery, and four SPoRC survey fleets. The fourth survey fleet represents the acoustic age-1 likelihood component, distinct from the observed survey fleets.
| Component | Likelihood | Selectivity | SPoRC representation |
|---|---|---|---|
| Fishery CPUE | Normal | Fishery | Fishery 1 |
| Bottom trawl survey | Multivariate normal | Logistic, time varying, free age 1 | Survey 1 |
| Acoustic trawl survey | Lognormal | Non-parametric random walk | Survey 2 |
| Vessel of opportunity | Normal | Shared with ATS | Survey 3 |
| Acoustic age 1 | Lognormal | Shared with ATS | Survey 4 (age 1 only) |
3.2 Selectivity specifications
Structural and selectivity choices adopted directly from the case study include:
- Ricker recruitment with a one-year lag, free initial numbers at age, the assessment recruitment penalties, and the steepness prior.
- Separate spawning, fishery, and survey weight-at-age arrays.
- The BTS full covariance likelihood and a free annual BTS age-1 selectivity value.
- Non-parametric random-walk fishery and ATS selectivity, with AVO sharing ATS selectivity.
- The acoustic age-1 abundance likelihood as survey fleet 4 with its own catchability.
- ADMB parameter values as the bridge starting point, with recruitment deviations solved by forward substitution and multiplicative catchabilities recovered analytically.
4 ADMB Comparison Results
The bridge is evaluated at the accepted ADMB maximum-likelihood estimate before optimization. The objective there is 1517.039555 and the maximum absolute gradient is 0.00148. Optimization leaves the solution effectively unchanged.
| Quantity | Median difference (%) | Maximum difference (%) |
|---|---|---|
| Spawning biomass | 8.017 × 10−7 | 2.322 × 10−5 |
| Recruitment | 7.216 × 10−7 | 4.345 × 10−5 |
| Numbers at age | 2.275 × 10−6 | 9.325 × 10−5 |
| Fishery selectivity | 3.555 × 10−6 | 1.429 × 10−4 |
| BTS selectivity | 5.033 × 10−7 | 1.776 × 10−5 |
| ATS selectivity | 7.314 × 10−7 | 6.107 × 10−2 |
The fitted object has 1207 free parameters, a final joint negative log likelihood of 1517.040, a positive-definite Hessian, and a final maximum absolute fixed-effect gradient of 3.17e-08. nlminb reports code 0 (“both X-convergence and relative convergence (5)”); the code remains disclosed even though the gradient, Hessian, and bridge trajectories reproduce the case-study solution.
4.1 Corrected BTS age-composition treatment
The corrected ADMB candidate normalizes each observed BTS age composition over ages 1–15, matching the prediction vector and the stated multinomial sample space. It retains the nominal integer sample size for each year. Age-1 selectivity remains an annual free parameter, while a logistic midpoint and slope define ages 2–15. The BTS abundance-total series continues to use the ages 2–15 subtotal, preserving that observation model.
The legacy implementation normalized observed ages 1–15 by the ages 2–15 subtotal. Its adjusted SPoRC sample sizes reproduced that score algebraically. The legacy multiplier has a median of 1.128 and ranges from 1.036 to 1.326. The corrected form provides a coherent multinomial and a common sample-size basis across the model-family tests.
| Quantity | Median change from legacy bridge (%) | Maximum change from legacy bridge (%) |
|---|---|---|
| Spawning biomass | 0.196 | 1.625 |
| Recruitment | 0.340 | 1.813 |
The corrected ADMB-to-RTMB bridge differs in objective by 0.00038 and in key outputs by at most 0.00049%. The corrected ADMB-to-SPoRC bridge in Table 2 provides the primary implementation regression gate. The legacy artifact remains available for historical comparison.
4.2 Selectivity comparison
5 Diagnostics
The corrected implementation-equivalence result is strong: spawning biomass, recruitment, population numbers at age, and selectivity reproduce the corrected ADMB candidate at high numerical accuracy. OSA, retrospective, self-test, SparseNUTS, and projection products all trace to this corrected fit or its stated fixed-steepness and parameter-RW derivatives.
ADMB and SPoRC retain engine-specific likelihood constants and reporting layouts. State, fitted-surface, gradient, Hessian, and within-engine objective checks therefore provide the regression gates used here.
5.1 OSA Residuals
The age-composition diagnostics use the nominal-ISS model-family lane and the updated afscOSA workflow from pull request 10, installed from commit 2dfe160f. The analysis passes SPoRC’s internal randomized OSA residuals to afscOSA for the fishery and BTS. This preserves the composition likelihood and conditional calculation embedded in SPoRC. The ATS calculation uses the afscOSA multinomial routine on ages 2–15, the age range used by the fitted likelihood. SPoRC’s current internal composition packer also retains ATS age 1. The external calculation therefore aligns the ATS diagnostic with the fitted data window.
The ATS 2020 input sample size equals one. Integer allocation across its fractional age proportions yields zero counts, so the analysis excludes that zero-information row. The remaining ATS series contains 18 composition years. All randomized calculations use seed 9.9801^{4}.
| Data source | OSA source | Years | Composition years | Age bins | SDNR | Lower 2.5% | Upper 97.5% | ISS | ESS | Maximum |OSA| | Maximum |Pearson| |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Fishery | SPoRC internal OSA | 1964–2023 | 60 | 15 | 0.81 | −1.95 | 1.39 | 17,127.00 | 33,448.40 | 3.01 | 10.47 |
| BTS | SPoRC internal OSA | 1982–2024 | 42 | 15 | 0.99 | −2.46 | 1.53 | 5,397.00 | 3,650.50 | 5.97 | 5.16 |
| ATS | afscOSA multinomial | 1994–2024 | 18 | 14 | 0.81 | −1.81 | 1.66 | 914.00 | 1,979.10 | 2.85 | 2.34 |
The 42 corrected BTS annual sample sizes sum to 5,403. afscOSA’s proportion-to-integer-count conversion produces the displayed aggregate ISS of 5,397, matching the convention used for the other model-family diagnostics.
The aggregate panels provide the first diagnostic. Observed proportions follow the principal age patterns expected by the model, while departures at specific ages identify where selectivity and composition assumptions merit attention. The interval bars describe the spread of data generated from each fitted composition distribution at the aggregate sample size; they differ from parameter-confidence intervals.
The fishery SDNR is 0.81 and the ATS SDNR is 0.81. Both values fall below their displayed 95% standard-normal reference intervals, indicating narrower residual distributions than the reference. Their aggregate ESS values exceed their ISS values, consistent with realized aggregate variability equivalent to larger samples than the input weighting. The fishery upper-tail quantile (1.39) also shows compression. ATS tail quantiles remain within their displayed reference intervals.
The BTS SDNR is 0.99 and lies within its displayed reference interval. Its lower-tail quantile (-2.46) extends beyond the reference interval, whereas its upper tail is compressed at 1.53. The OSA and Pearson bubbles localize these asymmetries across ages and years. afscOSA displays two fishery Pearson values above 6 at the plotting cap; the largest raw value is 10.47.
These diagnostics jointly describe model-data compatibility. The aggregate fits, Q-Q behavior, tail statistics, and residual patterns guide investigation of selectivity, sample weighting, and temporal structure. Their combined evidence supports model refinement more effectively than a single threshold or pass/fail decision.
5.2 Retrospective patterns
Nine retrospective peels terminate in 2023–2015. Each active contemporary data series retains the availability lag represented in the 2024 model. The fishery age compositions have a one-year lag: the 2023 peel uses compositions through 2022, and subsequent peels continue that one-year offset. Survey indices and survey age compositions use observations at or before each peel’s terminal year according to their historical sampling schedules. The historical fishery CPUE series retains its 1976 endpoint.
Each peel constrains fishery and survey selectivity in its terminal year to the preceding year’s selectivity. This constraint includes the BTS age-1 selectivity deviation. The authoritative 2024 full fit remains unchanged.
| Peel | Terminal year | Fishery ages through | Maximum terminal selectivity difference |
|---|---|---|---|
| 1 | 2023 | 2022 | 0.00 |
| 2 | 2022 | 2021 | 0.00 |
| 3 | 2021 | 2020 | 0.00 |
| 4 | 2020 | 2019 | 0.00 |
| 5 | 2019 | 2018 | 0.00 |
| 6 | 2018 | 2017 | 0.00 |
| 7 | 2017 | 2016 | 0.00 |
| 8 | 2016 | 2015 | 0.00 |
| 9 | 2015 | 2014 | 0.00 |
All nine truncated fits have positive-definite Hessians. Their maximum fixed-effect gradients range from 1.2e-12 to 7.9e-09. The status table retains optimizer code 1 for transparency; the positive-definite Hessians and gradients below \(10^{-8}\) provide the supporting numerical diagnostics. The selectivity audit gives a maximum terminal-year difference of 0.0 across every peel and fleet, confirming the equality constraint.
| Peel | Positive-definite Hessian | Maximum gradient | Optimizer code |
|---|---|---|---|
| 0 | TRUE | 3.17 × 10−8 | 0 |
| 1 | TRUE | 1.19 × 10−11 | 1 |
| 2 | TRUE | 7.87 × 10−9 | 1 |
| 3 | TRUE | 1.21 × 10−12 | 1 |
| 4 | TRUE | 2.21 × 10−12 | 1 |
| 5 | TRUE | 2.86 × 10−10 | 1 |
| 6 | TRUE | 2.78 × 10−12 | 1 |
| 7 | TRUE | 2.66 × 10−12 | 1 |
| 8 | TRUE | 9.53 × 10−10 | 1 |
| 9 | TRUE | 1.42 × 10−11 | 1 |
| Quantity | Mohn's rho |
|---|---|
| Recruitment | 0.246 |
| SSB | 0.254 |
Mohn’s rho equals 0.254 for spawning biomass and 0.246 for recruitment. Several earlier peels estimate higher terminal spawning biomass and recruitment than the corresponding full-model years, producing the positive average terminal differences.
5.3 Simulation self-test
Thirty datasets were generated from the fitted SPoRC model and refitted, with recruitment generated from the fitted Ricker relationship. Twenty-seven refits succeeded and 4 failed. Failed replicates remain in the requested count and are excluded from the error summaries.
| Quantity | Requested | Successful | Failed | Median |relative error| | RMS relative error | Terminal median relative error | Terminal median |relative error| |
|---|---|---|---|---|---|---|---|
| Fmort | 30 | 26 | 4 | 0.159 | 0.225 | 0.095 | 0.110 |
| Rec | 30 | 26 | 4 | 0.071 | 0.443 | 0.057 | 0.423 |
| SSB | 30 | 26 | 4 | 0.072 | 0.109 | −0.042 | 0.062 |
5.4 MCMC integrations
The steepness sensitivity fixes biological-scale steepness at 0.6184280, the estimate from the exact bridge, and reoptimizes every remaining free parameter. This removes one posterior dimension while preserving the fitted stock-recruit relationship. The sensitivity has 1,206 free parameters, a positive-definite Hessian, and a maximum gradient of 3.17e-08. Its objective differs from the estimated-steepness bridge by 0e+00.
| Quantity | Median difference from ADMB (%) | Maximum difference from ADMB (%) | Median difference from estimated-steepness SPoRC (%) | Maximum difference from estimated-steepness SPoRC (%) |
|---|---|---|---|---|
| Spawning biomass | 8.017 × 10−7 | 2.322 × 10−5 | 1.535 × 10−13 | 1.969 × 10−13 |
| Recruitment | 7.216 × 10−7 | 4.345 × 10−5 | 1.738 × 10−13 | 2.249 × 10−13 |
Maximum differences from the estimated-steepness SPoRC bridge remain below 2.25e-13%, and maximum differences from ADMB remain below 4.35e-05%. Fixing steepness therefore preserves implementation equivalence at numerical precision.
5.4.1 BTS parameter-level random walks
Two sensitivity models replace the 1983–2024 BTS age-specific curve-change penalty with direct random walks on annual log(a50) and log(k). Both retain the 1982 curve anchor and fix the increment SDs at 0.120 and 0.305. The first uses independent increments. The second uses the new SPoRC correlated bivariate random walk with correlation -0.829, estimated empirically from the exact-bridge maximum-likelihood deviations. The fixed hyperparameters make this a targeted parameterization experiment rather than an empirical-Bayes uncertainty analysis.
| BTS process | RMS Δlog(a50) | RMS Δlog(k) | Increment correlation | Maximum gradient | Positive-definite Hessian | Maximum SSB difference (%) | Maximum recruitment difference (%) |
|---|---|---|---|---|---|---|---|
| Independent RW | 0.114 | 0.230 | −0.564 | 1.65 × 10−11 | TRUE | 4.929 | 7.751 |
| Correlated RW | 0.126 | 0.277 | −0.881 | 1.19 × 10−11 | TRUE | 2.860 | 5.069 |
Both parameter-level sensitivities reach positive-definite Hessians with maximum gradients below \(2\times10^{-11}\). The correlated random walk follows the fitted increment dependence closely and stays nearer the exact bridge: its maximum SSB difference is 2.86%, compared with 4.93% for independent increments. These differences quantify a deliberate change in regularization; the exact bridge continues to carry the implementation- equivalence result.
SparseNUTS was applied as a developmental posterior-sampling integration around both SPoRC bridge modes and the correlated BTS parameter-RW sensitivity. The runner rebuilds each RTMB objective from its archived data and parameter map, verifies the free-parameter names against the corresponding fit, and restores its maximum-likelihood estimates before sampling. SparseNUTS selected a dense metric for the bridge objectives. The correlated-RW run explicitly sets metric = "sparse", declares ln_srvsel_devs as an RTMB random-effect block, and sets laplace = FALSE. SparseNUTS therefore samples the same 1,206-dimensional joint posterior while constructing the sparse joint precision matrix, \(Q\). The classification contains 910 fixed and 296 random parameters; it changes the computational representation while preserving the joint posterior target. Each run used four chains, 150 warmup iterations per chain, and 1,000 retained iterations per chain with seed 99803.
Both updated runs use a target acceptance probability of 0.95 and maximum tree depth of 12. The convergence gate requires zero divergent transitions, zero maximum-tree-depth transitions, acceptable energy behavior in every chain, and a maximum R-hat at or below 1.01.
| Model | Target acceptance | Maximum R-hat | Minimum bulk ESS | Divergences |
|---|---|---|---|---|
| Corrected bridge; steepness fixed | 0.95 | 1.01 | 309.94 | 9 |
| Correlated BTS RW; steepness fixed | 0.95 | 3.29 | 4.47 | 0 |
The corrected fixed-steepness run failed the convergence gate, so its draws remain unsuitable for posterior inference. The weakest behavior identifies the parameter blocks that govern the next reparameterization experiment. The maximum-likelihood bridge result and its management interpretation remain unchanged.
The brackets in the sampler labels index positions in the free parameter vector; Table 12 maps those positions to their model years and natural-scale multipliers.
| Sampler label | Model quantity | Year and age application | Maximum-likelihood translation |
|---|---|---|---|
| ln_RecDevs[34] | Annual log recruitment deviation | 1997; age-1 recruitment | Multiplier = 0.972 |
| ln_RecDevs[36] | Annual log recruitment deviation | 1999; age-1 recruitment | Multiplier = 0.522 |
| ln_RecDevs[33] | Annual log recruitment deviation | 1996; age-1 recruitment | Multiplier = 0.725 |
| ln_global_R0 | Global log(R0) | Global; age-1 recruitment scale | R0 = 24,256 model abundance units |
| ln_RecDevs[50] | Annual log recruitment deviation | 2013; age-1 recruitment | Multiplier = 1.458 |
| ln_RecDevs[27] | Annual log recruitment deviation | 1990; age-1 recruitment | Multiplier = 1.602 |
The pairs matrix shows the strongest sampled dependence between ln_global_R0 and recruitment deviations for 1990, 1996, 1997, 1999, and 2013. Their correlations with the global recruitment scale range from -0.941 to -0.971, and their mutual correlations range from 0.917 to 0.955. These relationships support the dense preconditioner and highlight the broader recruitment-scale mixing problem.
6 Projections
This projection section reads the saved sporc_corrected_full_age_bts fit and its matching corrected input artifact directly. The corrected SPoRC bridge supplies a complete Standard Projection Model input directory for spmR. The adapter extracts terminal numbers at age and biological schedules, carries forward terminal fishery selectivity, calculates recent fishing mortality from the same age-6 convention used in the reference projection, and writes pm.prj and spm.dat. The runner compiles the ADMB projection engine from the spm.tpl source installed with the recorded spmR version. A field-level audit compares each written vector with the saved SPoRC state and enforces a maximum relative formatting difference of \(5\times10^{-7}\).
The SPoRC and RTMB projections agree closely because both implementation bridges reproduce the corrected ADMB candidate’s population state at high numerical accuracy. The projections reported here read the SPoRC fit and input artifacts listed in Table 15; their source paths and hashes remain distinct from the RTMB projection artifacts.
The seven-alternative run uses the 2024 terminal-year maximum-likelihood bridge, fixes 2025 and 2026 catches at 1,350 thousand t, and projects 1,000 simulations through 2038. This is a development-model projection sensitivity; the accepted assessment remains the source for management advice.
| SPoRC-to-spmR Projection Inputs | ||
| File | Role | Available |
|---|---|---|
| spm.dat | SPM setup generated for the SPoRC bridge | TRUE |
| pm.prj | Species assessment input generated from SPoRC | TRUE |
| tacpar.dat | Generic TAC-control input maintained in this SPoRC project | TRUE |
| spm | ADMB executable compiled from the installed spmR template | TRUE |
| SPoRC Projection-input Audit | |||
| Projection quantity | SPoRC source | Values | Maximum relative write difference |
|---|---|---|---|
| average_f | family_sporc_corrected_full_age_bts.rds::report$tot_FAA[terminal-4:terminal, age 6] | 1 | 2.38 × 10−8 |
| natural_mortality | family_sporc_corrected_full_age_bts.rds::report$natmort[terminal year, age] | 15 | 0.00 |
| maturity | family_sporc_corrected_full_age_bts_input_list.rds::data$MatAA[terminal year, age] | 15 | 0.00 |
| spawning_weight | family_sporc_corrected_full_age_bts_input_list.rds::data$WAA[terminal year, age] | 15 | 4.71 × 10−8 |
| fishery_weight | family_sporc_corrected_full_age_bts_input_list.rds::data$WAA_fish[terminal year, age] | 15 | 7.94 × 10−8 |
| selectivity | family_sporc_corrected_full_age_bts.rds::report$fish_sel[terminal year, age] | 15 | 8.88 × 10−8 |
| terminal_numbers | family_sporc_corrected_full_age_bts.rds::report$NAA[terminal year, age] | 15 | 2.90 × 10−7 |
| recruitment | family_sporc_corrected_full_age_bts.rds::report$Rec[1978:terminal year] | 47 | 8.11 × 10−8 |
| spawning_biomass | family_sporc_corrected_full_age_bts.rds::report$SSB[1977:(terminal year-1)] | 47 | 3.69 × 10−8 |
| Projection Configuration and Lineage | |
| Item | Value |
|---|---|
| SPoRC version | 1.2.0.9000 |
| SPoRC fit case | sporc_corrected_full_age_bts |
| SPoRC fit commit | 63af5a30dede |
| spmR version | 0.3.0 |
| spmR source commit | e86fc6aa6f48 |
| spmR template SHA-256 | ce425c64eede084f |
| Source-fit MD5 | 17288f8dd88bf766cdb3f5b7bce82068 |
| Terminal year | 2024 |
| Spawning month | 4 (April) |
| Projection years | 2025--2038 |
| Simulations per alternative | 1000 |
| Alternatives | 1--7 |
| Fixed catches | 1,350 thousand t in 2025 and 2026 |
| Average recent F at age 6 | 0.219 |
| Species input | pm.prj |
| Tier-3 Projection Alternatives | ||
| Alternative | Name | Description |
|---|---|---|
| 1 | Maximum permissible ABC | Applies the maximum permissible Tier 3 ABC harvest rate. |
| 2 | Author-specified ABC | Applies the author-specified Tier 3 ABC adjustment; unit multipliers make this run equivalent to Alternative 1. |
| 3 | Average recent F | Applies recent average fishing mortality from the SPoRC assessment state. |
| 4 | Alternative SPR rate | Applies the user-specified SPR rate of 0.60. |
| 5 | No fishing | Projects the population with zero fishing mortality after the fixed-catch years. |
| 6 | OFL threshold determination | Applies the OFL harvest rate for threshold and status determination. |
| 7 | Status-determination ramp | Applies maximum permissible ABC for three projection years, then uses the OFL status-determination calculation. |
6.1 Seven Tier-3 scenario results
The current spmR release (version 0.3.0, main commit e86fc6a) ran all seven alternatives. The comparison starts in 2027 because the 2025 and 2026 catches are specified at 1,350 thousand t in every alternative.
| Seven Tier-3 Projection Alternatives | |||||||||||||
| Alternative | Scenario |
2027
|
2028
|
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Catch | ABC | OFL | \(B\) | \(F\) | \(B/B_{35\%}\) | Catch | ABC | OFL | \(B\) | \(F\) | \(B/B_{35\%}\) | ||
| 1 | Maximum permissible ABC | 1,620 | 1,620 | 1,947 | 2,553 | 0.270 | 122% | 1,507 | 1,507 | 1,795 | 2,360 | 0.260 | 113% |
| 2 | Author-specified ABC | 1,620 | 1,620 | 1,947 | 2,553 | 0.270 | 122% | 1,507 | 1,507 | 1,795 | 2,360 | 0.260 | 113% |
| 3 | Average recent F | 1,353 | 1,353 | 1,947 | 2,587 | 0.220 | 124% | 1,347 | 1,347 | 1,906 | 2,482 | 0.220 | 119% |
| 4 | Alternative SPR rate | 783 | 783 | 1,947 | 2,656 | 0.120 | 127% | 843 | 843 | 2,093 | 2,762 | 0.120 | 132% |
| 5 | No fishing | 0 | 0 | 1,947 | 2,744 | 0.000 | 131% | 0 | 0 | 2,309 | 3,163 | 0.000 | 151% |
| 6 | OFL threshold determination | 1,671 | 1,671 | 1,671 | 2,262 | 0.310 | 108% | 1,501 | 1,501 | 1,501 | 2,101 | 0.290 | 101% |
| 7 | Status-determination ramp | 1,537 | 1,840 | 1,840 | 2,417 | 0.270 | 116% | 1,692 | 1,692 | 1,692 | 2,244 | 0.310 | 107% |
| Projection Age-Specific Schedules | ||||
| Age | Spawning wt-at-age | Fishery wt-at-age | Maturity | Selectivity |
|---|---|---|---|---|
| 1 | 0.085 | 0.025 | 0.000 | 0.000 |
| 2 | 0.196 | 0.186 | 0.008 | 0.063 |
| 3 | 0.322 | 0.401 | 0.289 | 0.250 |
| 4 | 0.534 | 0.667 | 0.641 | 0.743 |
| 5 | 0.621 | 0.663 | 0.842 | 1.426 |
| 6 | 0.707 | 0.720 | 0.901 | 1.118 |
| 7 | 0.822 | 0.791 | 0.947 | 1.162 |
| 8 | 0.946 | 0.905 | 0.963 | 1.263 |
| 9 | 1.051 | 1.009 | 0.970 | 1.307 |
| 10 | 1.113 | 1.061 | 1.000 | 1.300 |
| 11 | 1.178 | 1.138 | 1.000 | 1.286 |
| 12 | 1.290 | 1.257 | 1.000 | 1.271 |
| 13 | 1.332 | 1.267 | 1.000 | 1.271 |
| 14 | 1.367 | 1.290 | 1.000 | 1.271 |
| 15 | 1.415 | 1.368 | 1.000 | 1.271 |
6.2 Alternative 2 fixed-catch projection
The companion Alternative 2 run holds catch at 1,300 thousand t annually from 2025 through 2032. The resulting biomass path remains above the Tier-3 \(B_{35\%}\) proxy throughout the specified-catch horizon.
| Candidate ABC Projection Given Assumed Future Catches | |||||
| Year | Catch | ABC | OFL | Mean \(B\) | \(B/B_{35\%}\) |
|---|---|---|---|---|---|
| 2025 | 1,300 | 2,029 | 2,433 | 3,269 | 156% |
| 2026 | 1,300 | 1,726 | 2,073 | 2,870 | 137% |
| 2027 | 1,300 | 1,641 | 1,971 | 2,631 | 126% |
| 2028 | 1,300 | 1,632 | 1,951 | 2,534 | 121% |
| 2029 | 1,300 | 1,606 | 1,921 | 2,553 | 122% |
| 2030 | 1,300 | 1,638 | 1,962 | 2,612 | 125% |
| 2031 | 1,300 | 1,668 | 2,003 | 2,684 | 128% |
| 2032 | 1,300 | 1,697 | 2,043 | 2,751 | 132% |
| Alternative 1 Annual Projection Means | ||||||
| Year | Mean \(B\) | Catch | ABC | OFL | F | \(B/B_{35\%}\) |
|---|---|---|---|---|---|---|
| 2025 | 3,263 | 1,350 | 2,029 | 2,433 | 0.170 | 156% |
| 2026 | 2,844 | 1,350 | 1,715 | 2,059 | 0.204 | 136% |
| 2027 | 2,553 | 1,620 | 1,620 | 1,947 | 0.268 | 122% |
| 2028 | 2,360 | 1,507 | 1,507 | 1,795 | 0.259 | 113% |
| 2029 | 2,348 | 1,458 | 1,458 | 1,744 | 0.246 | 112% |
| 2030 | 2,395 | 1,504 | 1,504 | 1,801 | 0.244 | 115% |
| 2031 | 2,439 | 1,538 | 1,538 | 1,843 | 0.245 | 117% |
| 2032 | 2,478 | 1,563 | 1,563 | 1,874 | 0.246 | 119% |
| 2033 | 2,498 | 1,581 | 1,581 | 1,894 | 0.246 | 120% |
| 2034 | 2,489 | 1,572 | 1,572 | 1,883 | 0.246 | 119% |
| 2035 | 2,484 | 1,564 | 1,564 | 1,874 | 0.246 | 119% |
| 2036 | 2,476 | 1,562 | 1,562 | 1,871 | 0.246 | 118% |
| 2037 | 2,472 | 1,554 | 1,554 | 1,861 | 0.246 | 118% |
| 2038 | 2,484 | 1,561 | 1,561 | 1,870 | 0.245 | 119% |
6.3 Projection figures
The lines show simulation medians, shaded bands span the central 90% of the 1,000 simulations, and colored lines identify the same 10 reproducibly selected simulations in each panel (242, 278, 361, 495, 507, 510, 598, 837, 937, 989).
The reproducible workflow is implemented in R/write_spmr_projection_inputs.R and analysis/run_sporc_spmr_projection.R. The generated handoff preserves the reference projection layout and replaces the assessment state with quantities extracted directly from SPoRC.
7 ESP-linked Recruitment Research
Environmental and ecosystem-linked recruitment models lie beyond the exact implementation bridge tested here. The current SPoRC configuration retains the accepted Ricker stock-recruit relationship and holds the recruitment hypothesis constant during implementation testing. A future research stage could compare environmental covariates or dynamic recruitment structures against this validated bridge, with each alternative evaluated using common data, convergence criteria, retrospective behavior, and simulation recovery.
8 Summary
The SPoRC bridge achieves its primary implementation goal: it reproduces the corrected full-age BTS ADMB candidate’s spawning biomass, recruitment, population state, and selectivity outputs at high numerical accuracy. The correction yields unit-sum observed and predicted BTS compositions across ages 1–15 with nominal sample sizes, while ages 2–15 continue to define the BTS abundance total. The result supports continued development of SPoRC as a member of the EBS pollock model family, while the accepted ADMB assessment remains the management reference. Fixing steepness preserves the corrected bridge. The correlated BTS parameter-level random walk improves the maximum-likelihood objective and provides the sparse-metric posterior trial. The stated convergence gate determines the appropriate use of those draws.
The current results support review of the corrected implementation bridge, positive retrospective bias, 4 self-test failures, and updated SparseNUTS convergence findings. They support continued SPoRC development while retaining the accepted management model.
The immediate work sequence retains the corrected ADMB and RTMB comparisons as regression gates after SPoRC package, likelihood, or data changes. Subsequent diagnostics should use the corrected bridge configuration. Reparameterizing the weakest-mixing block and repeating the correlated-RW SparseNUTS gate will establish readiness for using MCMC draws in uncertainty summaries or projections.
9 Reproducibility
- SPoRC branch: dev-popn-seasons
- SPoRC fit commit: 63af5a30dedeb38fbc2dea347748441c2f5f3af1
- SPoRC configured commit: 63af5a30dedeb38fbc2dea347748441c2f5f3af1
- SPoRC local-source changes present: FALSE
- SPoRC local-source fingerprint: d41d8cd98f00b204e9800998ecf8427e
- Verified latest-commit refresh manifest:
analysis/outputs/latest_commit_refresh_manifest.csv - Case-study source: single-region EBS pollock case study
- Corrected ADMB runner:
../rtmb_ebswp/scripts/run_corrected_full_age_bts_admb.R - Corrected SPoRC data builder:
analysis/build_corrected_full_age_bts_data.R - Model runner:
analysis/run_family_model.R - Corrected model artifact:
analysis/outputs/family_sporc_corrected_full_age_bts.rds - Corrected input artifact:
analysis/outputs/family_sporc_corrected_full_age_bts_input_list.rds - Legacy adjusted-ISS artifact:
analysis/outputs/family_sporc.rds - OSA diagnostic runner:
analysis/run_family_osa_afscosa.R - OSA diagnostic artifact:
analysis/outputs/family_diagnostics/osa/sporc_corrected_full_age_bts_afscosa.rds - Retrospective runner:
analysis/run_family_retro_9.R - Retrospective data audit:
analysis/outputs/family_diagnostics/retro_9_data_availability.csv - Retrospective selectivity audit:
analysis/outputs/family_diagnostics/retro_9_selectivity_check.csv - afscOSA commit: 2dfe160f15b0d733d24305dd4f51e35a2fa60128
- SparseNUTS runner:
analysis/run_sporc_sparsenuts.R - SparseNUTS version: 1.0.2
- Fixed-steepness runner:
analysis/run_family_model_fixed_steepness.R - Fixed-steepness model artifact:
analysis/outputs/family_sporc_fixed_steepness.rds - Fixed-steepness tuned MCMC artifact: fixed-steepness SparseNUTS result
- Fixed-steepness MCMC source-fit MD5: a4a98d2ee88614aa9b8dc6489be5056e
- BTS parameter-RW runner:
analysis/run_family_model_bts_parameter_rw.R - Correlated BTS parameter-RW artifact:
analysis/outputs/family_sporc_fixed_steepness_bts_mvrw.rds - Correlated BTS enhancement base commit: 63af5a30dedeb38fbc2dea347748441c2f5f3af1
- Correlated BTS local-source changes present: TRUE
- Correlated BTS local-source fingerprint: 8aac0c131d6182122aa5d290b4e62934
- Correlated BTS parameter-RW MCMC artifact: sparse-metric correlated-RW SparseNUTS result
- Correlated BTS parameter-RW MCMC source-fit MD5: b7d4f30d323167a3f73cc2b6b1ce833e
- Projection input adapter:
R/write_spmr_projection_inputs.R - Projection runner:
analysis/run_sporc_spmr_projection.R - spmR version: 0.3.0
- spmR source commit: e86fc6aa6f48a4de29d1deba0e8bd1df93b8717f
- Projection source-fit MD5: 17288f8dd88bf766cdb3f5b7bce82068
- ASAR version: 2.5.0.9000
- ASAR source commit: e61c0f7d15569163fd5be8a7bfc582d5ca96c9af
- ASAR-format project glossary:
reporting/report_glossary.tex - Primary model artifact: analysis/outputs/family_sporc_corrected_full_age_bts.rds
- Primary input and mapping artifact: analysis/outputs/family_sporc_corrected_full_age_bts_input_list.rds
- Model-family registry:
config/model_family.yml
Rscript analysis/build_corrected_full_age_bts_data.R
SPORC_CASE_ID=sporc_corrected_full_age_bts SPORC_OUTPUT_STEM=family_sporc_corrected_full_age_bts SPORC_COMPOSITION_ISS_POLICY=nominal_full_age SPORC_DATA_RDS=analysis/outputs/corrected_full_age_bts/sporc_data.rds Rscript analysis/run_family_model.R
Rscript analysis/run_family_osa_afscosa.R
Rscript analysis/run_family_retro_9.R
Rscript analysis/run_family_self_test_30.R
Rscript analysis/run_family_model_fixed_steepness.R
Rscript analysis/run_sporc_sparsenuts.R --fit-stem=family_sporc_fixed_steepness --model-name=sporc_corrected_full_age_bts_fixed_steepness --objective-mode=global-data --adapt-delta=0.95 --max-treedepth=12 --output-stem=sporc_sparsenuts_family_sporc_fixed_steepness_tuned --fig-prefix=sporc_sparsenuts_family_sporc_fixed_steepness_tuned
Rscript analysis/run_family_model_bts_parameter_rw.R
Rscript analysis/run_sporc_sparsenuts.R --fit-stem=family_sporc_fixed_steepness_bts_mvrw --model-name=sporc_corrected_full_age_bts_fixed_steepness_bts_mvrw_sparse --objective-mode=global-data --chains=4 --cores=4 --init=last.par.best --metric=sparse --random-effects=ln_srvsel_devs --laplace=false --adapt-delta=0.95 --max-treedepth=12 --output-stem=sporc_sparsenuts_family_sporc_fixed_steepness_bts_mvrw_sparse --fig-prefix=sporc_sparsenuts_family_sporc_fixed_steepness_bts_mvrw_sparse
Rscript analysis/run_sporc_spmr_projection.R
quarto render reporting/EBS_wp_sporc.qmd --to html
cp reporting/EBS_wp_sporc.html docs/index.htmlAppendix
Acronyms
This appendix follows the Alaska Stock Assessment Report (ASAR) package glossary convention. The project glossary uses ASAR’s \newacronym format, retains shared package entries where available, and adds terms specific to the SPoRC bridge and its diagnostics.
| Acronym | Definition |
|---|---|
| AD | automatic differentiation |
| ADMB | AD Model Builder |
| ASAR | Alaska Stock Assessment Report |
| ATS | acoustic-trawl survey |
| AVO | acoustic vessels of opportunity |
| BTS | bottom trawl survey |
| CPUE | catch per unit of effort |
| EBS | eastern Bering Sea |
| ESS | effective sample size |
| HMC | Hamiltonian Monte Carlo |
| ISS | input sample size |
| MCMC | Markov Chain Monte Carlo analysis |
| MLE | maximum-likelihood estimate |
| NUTS | No-U-Turn sampler |
| OSA | one-step-ahead |
| R-hat | rank-normalized split-chain convergence statistic |
| RMS | root mean square |
| SDNR | standard deviation of normalized residuals |
| SPoRC | Stock Population and Recruitment Computational framework |
| SSB | spawning stock biomass |
Session information
R version 4.6.1 (2026-06-24)
Platform: aarch64-apple-darwin23
Running under: macOS Tahoe 26.6.1
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
locale:
[1] C.UTF-8/C.UTF-8/C.UTF-8/C/C.UTF-8/C.UTF-8
time zone: America/Los_Angeles
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] yaml_2.3.12 gt_1.3.0 ggthemes_5.2.0 ggplot2_4.0.3
[5] asar_2.5.0.9000 spmR_0.3.0 SPoRC_1.2.0.9000 RTMB_1.9
loaded via a namespace (and not attached):
[1] tidyselect_1.2.1 dplyr_1.2.1 farver_2.1.2
[4] loo_2.10.0 S7_0.2.2 fastmap_1.2.0
[7] PBSmodelling_2.70.2 XML_3.99-0.23 digest_0.6.39
[10] timechange_0.4.0 lifecycle_1.0.5 StanHeaders_2.32.10
[13] magrittr_2.0.5 compiler_4.6.1 rlang_1.3.0
[16] sass_0.4.10 tools_4.6.1 knitr_1.51
[19] labeling_0.4.3 htmlwidgets_1.6.4 pkgbuild_1.4.8
[22] curl_7.1.0 plyr_1.8.9 xml2_1.6.0
[25] RColorBrewer_1.1-3 abind_1.4-8 afscOSA_0.0.1
[28] withr_3.0.3 purrr_1.2.2 grid_4.6.1
[31] stats4_4.6.1 diffobj_0.3.6 future_1.70.0
[34] inline_0.3.21 progressr_1.0.0 globals_0.19.1
[37] scales_1.4.0 MASS_7.3-65 cli_3.6.6
[40] rmarkdown_2.31 crayon_1.5.3 generics_0.1.4
[43] otel_0.2.0 RcppParallel_5.1.11-2 future.apply_1.20.2
[46] reshape2_1.4.5 tzdb_0.5.0 commonmark_2.0.0
[49] rstan_2.32.7 stringr_1.6.0 tmbstan_1.1.0
[52] parallel_4.6.1 base64enc_0.1-6 matrixStats_1.5.0
[55] vctrs_0.7.3 V8_8.2.0 Matrix_1.7-5
[58] jsonlite_2.0.0 litedown_0.9 hms_1.1.4
[61] patchwork_1.3.2 listenv_1.0.0 tidyr_1.3.2
[64] glue_1.8.1 parallelly_1.48.0 randtests_1.0.2
[67] codetools_0.2-20 cowplot_1.2.0 lubridate_1.9.5
[70] stringi_1.8.7 gtable_0.3.6 QuickJSR_1.10.0
[73] tibble_3.3.1 pillar_1.11.1 htmltools_0.5.9
[76] R6_2.6.1 TMB_1.9.21 tcltk_4.6.1
[79] evaluate_1.0.5 lattice_0.22-9 markdown_2.0
[82] readr_2.2.0 png_0.1-9 Rcpp_1.1.2
[85] gridExtra_2.3.1 xfun_0.60 fs_2.1.0
[88] pkgconfig_2.0.3