Skip to contents

tinyAM follows fish as they recruit, survive, and move into older age groups. Catch and survey data help estimate abundance and mortality. Process error describes variation in population dynamics; observation error describes variation in the measurements. This reference specifies the model fitted by fit_tam() and simulated by sim_tam().

Choose process assumptions to express biological hypotheses. "iid" allows independent departures, "ar1" allows departures to be similar in adjacent years and ages, and "rw" allows departures to accumulate over time without returning to a mean. These choices make different assumptions, even when they produce similar fitted curves. N, F and M can also have their process switched "off". Recruitment defaults to a temporal random walk; rec_settings$mu_form can describe stock-recruit relationships and covariates.

Neighbouring ages can experience similar annual changes in fishing mortality. F_settings$process = "cor_rw" models those changes together; "rw" retains independent changes between ages.

sd_form in N, F and M settings describes process variation at each age. For example, ~ age_group estimates shared SDs for groups supplied in data$catch for F or data$pop_covariates for N/M; it does not pool states. Start with few groups and examine their uncertainty.

Supply data$maturity$spawn_time to calculate SSB after a fraction of annual mortality, also used by stock-recruit relationships. Omit it for start-of-year SSB. Timing may vary by year and age; projections retain terminal timing at each age. Supplied weight and maturity do not change seasonally.

Details

Indices, units, and states

Let \(t=1,\ldots,T\) index consecutive modeled years, with historical years ending at \(H \le T\). Let \(a=1,\ldots,A\) index consecutive modeled ages (these indices need not equal the biological age labels). The final age is a plus group. At least two years and two ages are required. \(N_{t,a}\) is abundance at the start of the year, \(F_{t,a}\) and \(M_{t,a}\) are annual instantaneous mortality rates, and \(Z_{t,a}=F_{t,a}+M_{t,a}\). Supplied weight \(W_{t,a}\) and mature proportion \(P_{t,a}\) are treated as known without uncertainty. Optional table unit columns label the numerical scale. Catch units also describe N and recruitment; weight is mass per fish. Their product sets biomass and SSB units (thousand fish times kg gives tonnes). F, M and Z are per year. Survey units can differ, and q need not be dimensionless. The model never converts inputs automatically; see as_tam_data().

Optional catch fleets share N and M but have separate F surfaces: $$F^{total}_{t,a}=\sum_f F_{t,a,f},\quad Z_{t,a}=M_{t,a}+F^{total}_{t,a},\quad \widehat C_{t,a,f}=N_{t,a}\frac{F_{t,a,f}}{Z_{t,a}}(1-e^{-Z_{t,a}}).$$ The selected F process operates independently within fleets; sharing SDs or correlations does not correlate their innovations. Typed fleet catch weights determine yield, while stock weights determine biomass and SSB. A stock-wide projection multiplier scales all fleets, preserving their relative F at age.

log_r, log_n0, log_n, log_f, and log_m are absolute latent log states. Full surfaces log_N, log_F, and log_M are constructed from them by recursion, age-block expansion, and projection. An eta_* quantity is a deviation from an expected log state, never an additional absolute state. All matrices have years in rows. Vectorization stacks columns, as in R.

Recruitment and initial abundance

Recruitment is \(R_t=N_{t,1}\). The first log recruitment log_r0 is an estimated fixed state with no process penalty. By default, subsequent log_r states obey $$\log R_t=\log R_{t-1}+\epsilon^R_t,\qquad \epsilon^R_t\stackrel{ind}{\sim}N(0,\sigma_R^2),\quad t=2,\ldots,T.$$ Alternative recruitment_formulas allow deterministic recruitment, IID/AR1 residuals, fixed covariates, and Beverton-Holt or Ricker curves. For a curve, $$\log R_t=\log g(SSB_{t-L})+X_t\gamma+u_t.$$ SSB is mature biomass at the configured spawning time, defined below. Lag defaults to the youngest modeled age. Additional early years without in-window parent SSB use free fixed recruitment states without a process penalty. Curve-plus-RW residuals are not supported. Curves describe medians, not arithmetic means. AR1 starts at its first eligible year with a stationary residual distribution. See recruitment_formulas for the equations, units and zero-lag restrictions.

Initial older-age abundance is chosen independently of the subsequent N process. Write \(b_a=\log N_{1,a-1}-Z_{1,a-1}\), for \(a=2,\ldots,A\). With init = "exp", \(\log N_{1,a}=b_a\). With "free", these log abundances (log_n0) are separate unpenalized fixed parameters. With "latent", the same older-age states are integrated without an initial density. Recruitment boundary states, including r0, are fixed by default; rec_settings$init = "latent" integrates them without an initial density. For "mono", \(\log N_{1,a}=\log r_0-\sum_{j=2}^a d_j\); for "capped", \(\log N_{1,a}=\log r_0-d_a\), with \(d_j\ge0\). These fixed constraints include the terminal plus group and allow ties. A pooled plus group can exceed a single age's abundance, so imposing these constraints on it is a deliberate biological assumption. Wald intervals at a constraint boundary are only local approximations. The baseline always uses the realized preceding initial-age state. No equilibrium plus-group correction is applied in this first year. This is an initial-state assumption, not a reconstruction of past cohorts.

Cohort survival

For \(t\ge2\), define expected log abundance for non-plus older ages by $$g_{t,a}=\log N_{t-1,a-1}-Z_{t-1,a-1},\quad 2\le a<A.$$ For the plus group, $$g_{t,A}=\log\{N_{t-1,A-1}e^{-Z_{t-1,A-1}}+ N_{t-1,A}e^{-Z_{t-1,A}}\}.$$ An optional N_settings$mu_form adds \(X_{t,a}\beta_N\) to these log survivor predictions, using destination-year/age population covariates. This multiplies survivor abundance by \(\exp(X_{t,a}\beta_N)\) after the plus-group survivor sum. It represents apparent gains or losses, not separately identified migration. It does not alter recruitment or N0. Covariates can confound mortality, catchability and survival deviations; source support and sensitivity analysis are needed. With the N process off, \(\log N_{t,a}=g_{t,a}\). Otherwise log_n contains the realized states and \(\eta^N_{t,a}=\log N_{t,a}-g_{t,a}\) follows the selected process below. Its matrix is \((T-1)\times(A-1)\). An N random walk acts on these cohort residuals, not on absolute abundance.

Weight and maturity within a shortened plus group

If the oldest biological input age \(B\) exceeds the modeled plus age \(A\), weight and maturity inputs are retained for \(A,\ldots,B\). The last internal age is interpreted as \(B+\). Hidden abundances \(n_{t,j}\), \(j=0,\ldots,K-1\), with \(K=B-A+1\), partition the modeled total \(N_{t,A}\); they are not additional fitted parameters. Here A and B denote biological age labels rather than matrix indices.

In the first year, let \(s=\exp(-Z_{1,A})\). Geometric survivor shares are \(p_j=(1-s)s^j\) for \(j<K-1\) and \(p_{K-1}=s^{K-1}\) for the hidden plus-group tail. Normalize these shares and set \(n_{1,j}=N_{1,A}p_j/\sum_k p_k\). This assumes constant plus-group mortality for the initial internal composition, without changing the chosen initial total abundance (exp, free, latent, mono, or capped).

Subsequent predicted components are $$v_{t,0}=N_{t-1,A-1}e^{-Z_{t-1,A-1}},$$ $$v_{t,j}=n_{t-1,j-1}e^{-Z_{t-1,A}},\quad 1\le j<K-1,$$ $$v_{t,K-1}=(n_{t-1,K-2}+n_{t-1,K-1})e^{-Z_{t-1,A}}.$$ Their sum equals the ordinary plus-group cohort prediction. A common scaling factor incorporates any N process deviation: $$n_{t,j}=N_{t,A}\frac{v_{t,j}}{\sum_k v_{t,k}}.$$ All hidden ages therefore experience the modeled plus-group mortality, while entrants experience the previous modeled age's mortality. Calculations use log abundances and normalized log shares for stability.

Effective terminal biology is $$W_{t,A}^{eff}=\frac{\sum_j n_{t,j}W_{t,A+j}^{input}}{N_{t,A}},\qquad P_{t,A}^{eff}=\frac{\sum_j n_{t,j}W_{t,A+j}^{input}P_{t,A+j}^{input}} {\sum_j n_{t,j}W_{t,A+j}^{input}}.$$ Weight is abundance-weighted; maturity is biomass-weighted. Thus modeled terminal biomass and mature biomass equal their hidden-age sums exactly, and effective maturity remains a proportion. When all hidden input weights in a year are zero, effective W and P are set to zero (biomass and mature biomass are both zero). Supplied biology at the oldest input age applies to all fish in its hidden plus group.

Effective stock weights are used for biomass and SSB; effective catch weights use the same abundance shares for yield (stock fallback if absent). These effective values are used for their respective summaries in both estimation and simulation. Projection biological inputs are averaged over recent years separately at each retained age before this aggregation. Catch/index aggregation, the N/F/M/Z equations, process penalties, and observation equations are unchanged. Formula covariates still use the input rows at modeled ages, not the effective W/P values. If the modeled and biological maximum ages are equal, there is no hidden-age calculation. With hidden ages, fit$rep$N_plus, fit$rep$W, and fit$rep$P report the resulting abundance and effective biology; the inputs remain in fit$dat.

Mortality means and latent states

Formula design matrices define $$\log\mu^F=X_F\beta_F,\qquad \log\mu^M=\log M^{supplied}+X_M\beta_M.$$ An absent F formula contributes zero. Either M contribution may be absent (then contributes zero on the log scale), but at least one is required. The M formula intercept is removed when supplied M is also present. F designs use catch covariates; M designs use population covariates. With AR1 M residuals, one age-defined IID random-slope mean term may be added. Its group slopes are drawn once and multiplied by a supplied numeric covariate each year, independently of the AR1 residual matrix. All mean contributions remain constant within M state blocks, which continue to share actual M. Ordinary terms supply any common slope; without them the slopes are centred on zero. See formula_effects for the equations and cautions.

F mean curves with no residual process or with IID/AR1 residuals add cumulative non-negative log-F increments for mono(), or \(\log S(a)\) for logistic() or double_logistic(). Parametric curves multiply the ordinary mean F by selectivity, without extra peak normalization. These are fixed curve parameters, separate from Gaussian mean effects and latent F states. Static curves cancel from RW increments and are not supported there.

Penalized smooth_formulas instead contribute \(\sum_j Z_j u_j\) to the log F or q-link predictor. mgcv supplies the basis and penalty conversion; unpenalized directions join \(X\beta\). Each penalized block has the proper density \(u_j\sim N(0,\tau_j^2 I)\), including its normalization. Its SD depends on the retained basis scale and is distinct from F residual-process SD. Factor groups and tensor penalties have separate coefficient blocks. F smooths support off/IID/AR1 residual processes; overlapping mean/residual patterns require experimental-combination and uncertainty checks.

With F_settings$process = "off", historical \(F=\mu^F\). No F latent states, process SD or correlations are created. Projection controls still scale terminal historical F or solve for total catch. With an active F process, historical F has one log_f state per year, fleet and active age block (separate ages when no blocks are supplied): $$\log F_{t,a}=\log\mu^F_{t,a}+\eta^F_{t,a},\quad t\le H.$$ log_f is the left-hand side; eta_log_f is the deviation on the right. For an active M process, log_m has one state per selected year and age block. Its deviation is eta_log_m = log_m - log_mu_M, evaluated at the block's first age. The full M surface is the exponential of that state repeated across the block; the mean is not added again. Each mean component must be constant across ages within a fitted block. Blocks share actual states, not just correlated deviations.

The M process starts at M_settings$first_dev_year, by default the second historical year, and extends through projection years. Before that start, outside selected age blocks, or with M off, \(M=\mu^M\). Default blocks use cut_ages(ages[-1], unique(range(ages[-1]))): normally one shared block excluding the youngest age (two older ages form two singletons under the cut_ages() endpoint convention). F has no corresponding delayed start or coupled boundary state.

mu_F and mu_M are exponentiated mean log surfaces. For zero-mean Gaussian deviations they are medians, not arithmetic means on the natural scale. No lognormal mean correction is applied to states or observations.

Process distributions

The following distributions apply separately to the matrices \(\eta^N\), \(\eta^F\), and \(\eta^M\); each has its own SD and, for AR1, two correlations. Processes are independent of one another and of recruitment and initial-age innovations before population recursion.

  • IID: all entries are independent \(N(0,\sigma^2)\).

  • RW: successive-row differences are independent \(N(0,\sigma^2)\), independently across ages or age blocks. The first row is unpenalized. Conditional on starting residual \(e_{1,a}\), \(E(e_{i,a})=e_{1,a}\) and \(\operatorname{Cov}(e_{i,a},e_{j,b})= \mathbb{1}(a=b)\sigma^2\min(i-1,j-1)\). This defines a density of increments, not a proper prior over all levels.

  • Correlated F RW: process = "cor_rw" uses independent annual increment vectors with covariance \(\Sigma_{ab}=\sigma_a\sigma_b\rho^{|a-b|}\). Its first row is unpenalized, as for RW. The signed correlation \(-1<\rho<1\) is estimated through tanh(atanh_rho_f). Here SD describes each age's annual increment, without the AR1 variance inflation below.

  • AR1: the whole matrix has a stationary zero-mean Gaussian density with $$\operatorname{Cov}\{\operatorname{vec}(\eta)\}= \frac{\sigma^2}{(1-\phi_a^2)(1-\phi_t^2)}\;C_a\otimes C_t,$$ where \((C_a)_{ij}=\phi_a^{|i-j|}\) and \((C_t)_{ij}=\phi_t^{|i-j|}\). Thus \(\sigma\) is an innovation scale; marginal SD is larger when correlations are positive. Correlation between age blocks uses their index distance, not block widths.

Scalar SDs use exp(log_sd_*). Ordinary age-based sd_form formulas replace scalar SDs with \(\sigma_a=\exp(X_a\beta)\). Sharing an SD does not share states. Designs must be finite, identifiable and constant across years at each active age. Numeric and categorical terms are supported; temporal variation and structured random-effect terms are not. N SDs use destination ages after recruitment, keeping recruitment and initial-abundance SDs separate. M SD designs must be constant within each fitted state block.

Default ~ 1 retains scalar log_sd_* parameters. Other formulas estimate sd_beta_* coefficients on the log-SD predictor scale: these may be negative and are not individually SDs. fit$pop$sd_F, sd_N and sd_M contain derived positive SD profiles and RTMB confidence intervals for nondefault formulas. Reported M ages identify state-block starts. Numerical convergence does not establish support for every SD group; inspect check_tam(), uncertainty and simpler sharing structures, especially when estimating M.

For stationary AR1, standardize each age by its innovation SD before evaluating the same separable correlation density, including the scale Jacobian. Its marginal SD remains \(\sigma_a/\sqrt{(1-\phi_a^2)(1-\phi_t^2)}\).

Fitted AR1 correlations use plogis(logit_phi_*) and are restricted to positive correlations less than one. A singleton matrix axis has its correlation fixed at zero, since it cannot be distinguished from the variance scale. The standalone AR1 helpers also accept negative correlations with absolute value below one. Independent RW has no correlation parameters. If a RW matrix has only one row, its SD is held fixed because there are no increments. Mean coefficients that cancel from all RW increments and do not control any other mortality cells are held at their starting values rather than estimated from a flat likelihood.

Catchability and observations

For survey observation row \(i\), $$\eta_{q,i}=X_{q,i}\beta_q+B_i d+\sum_h z_{h,i},\qquad d_j\ge0.$$ The default q_link = "log" gives \(q_i=\exp(\eta_{q,i})\). The optional q_link = "logit" gives \(q_i=1/(1+\exp(-\eta_{q,i}))\), restricting q to between zero and one. This bounds the full prediction, including covariates; it is not a prior. Formula coefficients are log_q or logit_q, respectively. Ordinary terms in q_form build \(X_q\). An additive mono() term builds cumulative step indicators \(B\); its optimized increments are dq, on the selected link scale. For level \(k\), its contribution is \(\sum_{j<k}d_j\). A zero step gives an exact plateau. Separate by groups have independent steps; ordinary terms supply their baselines. Monotonicity holds with other covariates held constant. Gaussian formula terms \(z_h\) can be IID, random intercepts, anchored RWs, or stationary AR1 processes; see formula_effects. Their normalized densities include each unique state or increment once, rather than each observation row. A categorical by separates trajectories with shared process parameters; numeric by multiplies one shared trajectory. Logistic terms multiply the inverse-link prediction by rising selectivity curves, so the logit link still restricts the full catchability to below one.

Catch and index predictions are $$\widetilde C_{t,a}=N_{t,a}\frac{F_{t,a}}{Z_{t,a}} (1-e^{-Z_{t,a}}),\qquad \widetilde I_i=q_i N_{t_i,a_i}e^{-s_i Z_{t_i,a_i}},$$ where \(s_i\in[0,1]\) is survey sampling time within the year. With power() in q_form, write \(A_i=N_{t_i,a_i}e^{-s_iZ_{t_i,a_i}}\). The log link then gives $$q_i=q_{0,i}A_i^{p_i-1},\qquad \widetilde I_i=q_{0,i}A_i^{p_i}, \qquad p_i=\exp(\gamma_i)>0.$$ Ordinary and other q terms determine \(q_0\). Abundance is not centered; this retains the usual SAM power relationship and its baseline-q sharing. Missing power-group labels fix p to one while retaining the observation. For each positive observation \(Y_i\), independently conditional on states, $$\log Y_i\sim N(\log\widetilde Y_i,\tau_i^2),\qquad \tau_i=\tau_i^{supplied}\exp(X_{sd,i}\beta_{sd}).$$ Catch and survey SDs have separate designs and coefficients. Without a supplied SD the baseline is one; with a supplied SD the formula intercept is removed. All supplied SDs and M offsets must be positive and finite; formula covariates must produce one finite design row per observation. Predictions \(\widetilde Y\) are conditional medians. Arithmetic means are \(\widetilde Y\exp(\tau^2/2)\).

Zero and NA catch/index values are treated as missing, not as censored values or counts. They contribute no observation density and remain missing in simulation. Population states and observation predictions are still calculated throughout the model grid. Complete catch, weight, and maturity year-age grids are required; surveys may be sparse. Reducing the maximum age sums catch and index within year (and within survey for indices). Weight and maturity use the hidden-age abundance and biomass weighting described above. Other covariates come from the plus age or the first available older age. Check that this aggregation suits the data.

Likelihood and inference

The joint negative log-likelihood is minus the sum of recruitment innovation, active process, formula-effect, and observation log densities. Unpenalized initial states have no initial density. Gaussian normalizing constants are retained; there are no added hyperparameter priors. Observation densities are evaluated on log data. The response Jacobian \(-\sum_i\log Y_i\) is omitted because it is constant in the parameters for the same observed data. Latent parameters are defined in log coordinates; their residual transformations have unit triangular Jacobians.

fit_tam() integrates log_r, active log_n, log_f, active log_m, and log_n0 for init = "latent" using RTMB's Laplace approximation. rec_settings$init = "latent" also integrates log_r0 and any log_r_init boundary states. Their EDF is counted with other initial effects, separately from subsequent recruitment innovations. Powers remain fixed effects. All remaining estimated parameters, including free log_n0, are fixed effects optimized by nlminb; dq has a zero lower bound. Uncertainty is a local Gaussian approximation from curvature, with delta-method uncertainty for reported quantities. Boundary steps can have unreliable symmetric Wald intervals. Convergence checks assess gradients (accounting for active step bounds) and positive-definite curvature, not biological identifiability. Inspect optimizer status as well. Intrinsic RW starting levels require care when comparing likelihoods with models having proper initial distributions.

Projection and simulation

For projection year \(H+h\), \(F_{H+h,a}=k_hF_{H,a}\). Multipliers are relative to terminal historical F, not compounded across years. There are no projected F process states. Recruitment, N, and active M processes extend forward under the same equations. A zero F multiplier is replaced by 1e-12 with a warning because the catch equation is evaluated on the log scale. Alternatively, proj_settings$catch fixes annual catch biomass, and an AD-aware root solver chooses the nonnegative multiplier to satisfy $$C_t=\sum_a N_{t,a}W^{catch}_{t,a}\frac{k_tF_{H,a}}{k_tF_{H,a}+M_{t,a}} (1-e^{-(k_tF_{H,a}+M_{t,a})}).$$ Catch targets use native abundance-times-weight units. They constrain modeled removals, not noisy simulated observation totals. Biology is updated within the plus group before solving each year. Zero catch gives exactly zero F; unattainable targets are errors, not reduced quotas. Fixed zero F has zero uncertainty on its reported scale. Catch control with zero-lag recruitment and spawning-time SSB is rejected because F and recruitment depend on each other.

Active AR1 M states already extend into projection years. Their conditional log-scale forecast is \(\log\mu_{M,H+h,b}+\phi_y^h\eta^M_{H,b}\); simulation includes conditional innovations with the existing age covariance and innovation SD normalization. This is not an immediate reset to mean M.

Weight and maturity use age-specific arithmetic means over the requested recent historical years; other covariates are copied from the last available table year. Future catch and index observations are missing. New formula levels cannot be estimated solely from unobserved future data. These projections do not forecast changes in supplied covariates.

nll_fun() simulation first draws mortality and then advances abundance chronologically. Recruitment uses parent SSB from that same realization, including updated biology within a shortened plus group. Predictions and observation draws then use each row's SD. Initial RW states are retained: F/M walks start from the supplied first latent row; the N walk retains its first log_n row and computes that row's residual against the newly generated cohort prediction. Initial older-age abundance, first recruitment and additional early recruitment boundaries retain their supplied values, including when integrated with init = "latent".

sim_tam() can hold parameters fixed, draw fixed effects with their estimated covariance while retaining fitted random states, or draw all parameters with the approximate joint precision. These are local Gaussian uncertainty draws, not an exact posterior sampler. Negative drawn dq values are clipped to zero. redraw_random = TRUE then regenerates process histories across the whole modeled period; it is not a future-only forecast conditional on all historical states. With FALSE, observations alone are redrawn conditional on the fitted or sampled states. Missing observation cells remain NA in simulations and are excluded from observed catch and yield totals.

Derived quantities and uncertainty tables

Abundance is \(\sum_a N_{t,a}\), biomass is \(\sum_a W_{t,a}N_{t,a}\), and SSB is \(\sum_a W_{t,a}P_{t,a}N_{t,a}e^{-\tau_{t,a} Z_{t,a}}\), where \(\tau_{t,a}\) is data$maturity$spawn_time, zero if absent. Each supplied fraction applies to both F and M and may vary by year and age. The timing column must contain finite values in [0, 1] at every supplied biological age. Hidden ages contribute with their own timing before aggregation; spawning times are not averaged. With age-specific timing, SSB sums contributions at different spawning dates rather than one common date. Mortality is constant within each year. This same quantity supplies parent SSB for recruitment. Weight and maturity retain their supplied definitions; seasonal growth, maturation and an additional sex-ratio adjustment are not introduced. Fully selected F is \(\max_a F_{t,a}\) and selectivity is F divided by that maximum. F_bar and M_bar are abundance-weighted means over their selected ages.

F age blocks share actual mortality, not just mean selectivity or process deviations. With F_settings$age_breaks, each active year–block has one absolute log-F state; its realized F is repeated across member ages. Ages below the first boundary have exactly zero F. Explicit boundaries are left-closed and right-open and must end at the oldest modeled age plus one. Process densities and correlated-RW distances operate on unique ordered blocks. Initial states, SD interpretations and correlation transformations otherwise retain their existing conventions. Zero-F ages create no latent F states or catch residuals; their catch predictions are exactly zero. Survey observations at these ages remain in the index likelihood. Projections scale only the fished part of terminal F. Catch-target feasibility uses biomass at ages with positive terminal F. Total catch sums numbers; yield uses catch weights, falling back to stock weights when no catch weights are supplied. Observed totals omit missing cells; predicted totals sum the conditional median predictions over all catch cells.

Optional weight$type distinguishes complete stock and catch weights on the same biological year-age grid. Untyped or stock-only inputs use stock weights for both purposes. In the equations above, W denotes stock weight. Yield is \(Y_t=\sum_{a,f} C_{t,a,f}W^{catch}_{t,a,f}\); catch targets use these same catch weights. Effective plus-group catch weights use the same abundance shares as stock weights, retaining all biological ages. Projection averages are calculated separately by age, type and fleet over training years. Stock weights have no fleet label. Catch weights can be one shared complete grid or complete grids for every catch fleet, never partial fleet overrides. Stock and catch weights share one optional mass-unit label, conventionally kg. They describe values without converting them. This adds no parameters and does not change the catch-number likelihood. fit$rep$W remains stock weight; fit$rep$W_catch reports effective catch weights.

Tidied estimates and confidence limits are on reported scales. se stays on the estimation scale, identified by se_scale. For log quantities, limits are \(\exp(\widehat\ell\pm z\,SE_\ell)\). A small log-scale SE approximates relative uncertainty (CV), but it is not universally a CV. Use the asymmetric confidence interval when uncertainty is large. Zero derived totals cannot have finite log-scale intervals. See tidy_par() and tidy_sdrep().

Examples

data <- cod_obs
data$maturity$spawn_time <- 0.25
data$catch$age_group <- factor(
  ifelse(data$catch$age < 6, "young", "older")
)
dat <- prepare_tam(data,
  F_settings = list(process = "cor_rw", sd_form = ~age_group),
  N_settings = list(process = "iid", sd_form = ~1)
)
make_par(dat)$sd_beta_f
#>    (Intercept) age_groupyoung 
#>              0              0