Draft additional documentation for spmR
Jim Ianelli, Cole Monnahan
2026-09-30
more_documentation.RmdProjections for operational assessments
The R package spmR provides a tool to project assessment results in a consistent way over all “Tier 3” groundfish stocks. This is to conform to the Fishery Management Plan (FMP) for the Gulf of Alaska (GOA) and the Bering Sea and Aleutian Islands (BSAI). Specifically, as outlined in Amendment 56 of the FMP, age-structured assessment results are linked to the projection based on specified input files. These inputs allow estimation of fishing mortality rates based on spawning biomass per recruits (e.g., F40% and F35%). These rates (and variants) are applied to the estimated abundance at age from the most recent assessment model. The trend in spawning biomass is then contrasted with proxy reference points that align with the FMP. In summary, the model estimates proxy Fmsy values, applied to estimated population numbers at age, and compared against reference points to adjust the rates according to the control rule of the FMP.
Catch from the model follows three main scenarios given a selected model (approved by the SSC):
The maximum permissible ABC
The status determination relative to overfishing
The status determination to determine if the stock is overfished or approaching an overfished condition.
Additional “scenarios” are optionally included and were part of the historical requirement for an annual Environmental Assessment for ABC/OFL specifications by the Alaska Regional Office. They provide contrast and included scenarios based on the “author recommended” ABC, one with no fishing, one based on the recent 5-year average F, another with an alternative F-spr basis (varied between some stocks).
Biological assumptions used in the projections should follow the assessment model and decisions about expected future selectivity, maturity, weight-at-age etc should be considered best estimates and may reflect means over different recent periods. It should be noted that their specification should be clearly documented within the assessment.
Tier 3 stocks are based on expected trends and the extent to which these proxy estimates are determined with uncertainty is not explicitly part of the FMP ABC/OFL specification process. Nonetheless, the software runs simulations over the mean and variability of recruitment that is specified in the model input files. For FMP ABC/OFL specifications, the means are presented but longer-term trajectories accounting only for recruitment variability are presented figures as deemed useful.
Abbreviations
| A BC | Acceptable Biological Catch |
|
Initial Regulatory Flexibility Analysis |
|---|---|---|---|
| AI | Aleutian Islands | LLP | License Limitation Program |
| AP | Advisory Panel | M SFCMA |
Magnuson-Stevens Fishery Conservation and Management Act |
| AD FG | Alaska Dept. of Fish and Game |
|
Marine Mammal Protection Act |
| BS | Bering Sea | MRA | Maximum Retainable Amount |
| BS AI | Bering Sea and Aleutian Islands | MSY | Maximum Sustainable Yield |
| C DQ | Community Development Quota | t | Metric tons |
| EA/R IR |
Environmental Assessment/Regulatory Impact Review |
|
National Marine Fisheries Service |
| E BS | Eastern Bering Sea |
|
National Oceanic & Atmospheric Adm. |
| E EZ | Exclusive Economic Zone | NPFMC |
North Pacific Fishery Management Council |
| E FH | Essential Fish Habitat | OY | Optimum Yield |
| E FP | Exempted Fishing Permit |
|
Preview of Economic and Ecosystem Considerations |
| E SA | Endangered Species Act | PSC | Prohibited Species Catch |
| F EP | Fishery Ecosystem Plan |
|
Stock Assessment and Fishery Evaluation |
| F MP | Fishery Management Plan | SSC | Scientific and Statistical Committee |
| G HL | Guideline Harvest Level | SSL | Steller Sea Lion |
| G OA | Gulf of Alaska | TAC | Total Allowable Catch |
| HA PC | Habitat Areas of Particular Concern | USFWS | United States Fish & Wildlife Service |
|
I FQ |
Individual Fishing Quota | ||
|
IP HC |
International Pacific Halibut Commission |
Recommended usage
See readme on spmR package on github for installation options and vignettes (Articles here).
Current inputs: spmR 0.4.1 and format 2
New projections require version-2 metadata in
spm_metadata.json and a compatible executable compiled from
the current inst/admb/spm.tpl. Keep the order and number of
fields in spm.dat. In each split-sex species file, insert
the male spawning-weight vector wt_M immediately after
wt_F. Version 0.4.1 no longer reads
tacpar.dat. Store population weights in metadata; adding
another positional vector can shift later fields or be ignored by an
older executable. The runner validates these inputs and generates
spm_input_v2.dat for the native engine.
Each species declares recruitment_basis = "total" or
"per_sex". "per_sex" describes the recruitment
of either sex under a 50:50 ratio; pooled-sex inputs require
"total". The complete historical series is converted to
total recruitment before calculating its arithmetic mean, harmonic mean,
variability, or stock-recruitment inputs. Each projected total is then
divided equally between females and males once.
Supply female and male population weights with an explicit age
vector. The vectors must contain one positive, finite value per age in
kg, with the declared consecutive, increasing age order. Abundance and
biomass units must form a supported pair:
fish/kg,
thousand_fish/t, or
million_fish/thousand_t. Convert existing
values to the declared units and use N_scalar = 1.
A split-sex run requires male population weights. When those data are
unavailable, the user can explicitly select
male_population_substitute as
"female_population" or "mean_male_fishery"
(the arithmetic mean across male fishery-weight vectors at each age).
Each substitute produces a warning and is recorded with the output;
document its biological justification. Setting
strict = FALSE changes the treatment of unknown metadata
fields to warnings; required inputs and scientific checks still
apply.
See Migrating split-sex projection
inputs for a worked example. Run validate_spm_inputs()
before a new projection. Output provenance records the recruitment
convention, units, substitutions, and executable and input hashes.
Historical output remains readable with
runSPM(..., run = FALSE).
History of SPM
<links to the historical docs>
https://afsc-assessments.github.io/spmR/articles/background.html
How spmr grew out of “proj” and what the differences are
Definitions
Let
TY= this year - the year in which SPM is run
AY= the last year an assessment was done, AY<=TY
PY1= TY+1 = projection year 1 in the exec table
PY2= TY+2 = projection year 2 in the exec table
PYn=TY+n = projection year n in alternative scenarios
C_TY=estimate/assumed catch for the entirety of TY using e.g., an assumption about catch=ABC or some calculation to extrapolate for the remainder of TY (Oct - Dec).
N_AY= numbers at age on Jan-1 of AY
N_PY1= numbers at age on Jan-1 of PY1
N_PY2= numbers at age on Jan-1 of PY2
Summary of SPR calculations for Tier 3 stocks
SPM reads natural mortality, maturity, spawning weights, population weights, fishery weights, and fishery selectivity. These weights have distinct roles: female spawning weights determine spawning biomass; female and male population weights determine total biomass; fishery weights convert catch numbers to catch biomass. Total biomass is the sum of abundance times population weight across ages and sexes.
The spawning biomass per recruit (SPR) calculation follows one female recruit through survival, maturity, spawning timing, and the plus group. Let denote lifetime spawning biomass per female recruit with fishing mortality equal to zero, and let be the arithmetic mean of the normalized total recruitment history. Under the 50:50 recruitment ratio, . This applies the female fraction once. Summary output
Mean_recreports total recruitment;Mean_rec_femalereports its female half. The reference biomasses are and .SPM solves for the fishing mortality rates that produce the specified fractions of unfished spawning biomass per recruit. For inputs using 40% and 35%, these are for maximum ABC and for OFL. The resulting rates and spawning biomass enter the applicable harvest control rule. Population biomass reference points use the separate population weights for both sexes.
Initial numbers at age must describe the beginning of
styr, the first projection year declared inspm.dat. If the assessment supplies numbers for an earlier year, advance survivors, ages, and the plus group tostyrand explicitly choose recruitment entering that year before writing the inputs. Relabeling an earlier abundance vector changes the projection boundary without advancing the population. From the supplied initial state, SPM applies each year’s catches or scenario-specific fishing mortality and advances survivors into the next year. Record the catch assumptions and scenario used for each assessment table.
The detailed output row labeled Year = t reports biomass
from the beginning-of-year abundance in year
;
spawning biomass includes survival to spawning. Its Rec
value is the recruitment draw entering the youngest age in year
.
Initial-year recruitment is already part of the input abundance vectors.
Check these dates when comparing an assessment’s terminal year with the
first projection year.
Summary of the alternative scenario simulations
There are 7 projection “scenarios” built into spmR, along with some others that have been customized to address specific questions.
How to specify catches in TY
Years between AY and TY will have finalized total catches available. The total catches in TY are not complete and must be assumed. Several approaches are used:
The full ABC is taken in TY. This will be reasonable for fully exploited stocks. It may be wise as a general rule to be conservative. But for lightly exploited stocks it may not.
Extrapolate catches in TY from the end of the year using catches through October and historical catch patterns in the fishery. E.g., if 80% of total catches are typically taken by October then they can be scaled up by that number.
Known issues
When using time-varying quantities in a model then the average values used by proj to construct N_PY1 will not match what is used in the assessment and thus not much. For instance if spawning WAA is different, the N_PY will match between the AM and SPM in TY, but spawning biomass in TY will not match. If fisheries selectivity is different, then N_PY1 will differ as different fish are killed off between the beginning and end of TY. When there are no time-varying inputs then SPM will be able to recreate the AM through TY identically and there is no issue.
Cases where SPM needs to be run more than once.
Weird issues arising when there’s a big gap between AY and TY.