A modification of SCA that incorporates density-dependent effects on M based on biomass depletion (Forrest et al. 2018). Set the bounds of M in the M_bounds argument, a length-2 vector where the first entry is M0, the M as B/B0 >= 1, and the second entry is M1, the M as B/B0 approaches zero. Note that M0 can be greater than M1 (compensatory) or M0 can be less than M1 (depensatory).

  x = 1,
  AddInd = "B",
  SR = c("BH", "Ricker", "none"),
  vulnerability = c("logistic", "dome"),
  catch_eq = c("Baranov", "Pope"),
  CAA_dist = c("multinomial", "lognormal"),
  CAA_multiplier = 50,
  rescale = "mean1",
  max_age = Data@MaxAge,
  start = NULL,
  prior = list(),
  fix_h = TRUE,
  fix_F_equilibrium = TRUE,
  fix_omega = TRUE,
  fix_tau = TRUE,
  LWT = list(),
  early_dev = c("comp_onegen", "comp", "all"),
  late_dev = "comp50",
  M_bounds = NULL,
  integrate = FALSE,
  silent = TRUE,
  opt_hess = FALSE,
  n_restart = ifelse(opt_hess, 0, 1),
  control = list(iter.max = 2e+05, eval.max = 4e+05),
  inner.control = list(),



A position in the Data object (by default, equal to one for assessments).


An object of class Data


A vector of integers or character strings indicating the indices to be used in the model. Integers assign the index to the corresponding index in Data@AddInd, "B" (or 0) represents total biomass in Data@Ind, "VB" represents vulnerable biomass in Data@VInd, and "SSB" represents spawning stock biomass in Data@SpInd. Vulnerability to the survey is fixed in the model.


Stock-recruit function (either "BH" for Beverton-Holt, "Ricker", or "none" for constant mean recruitment).


Whether estimated vulnerability is "logistic" or "dome" (double-normal). See details for parameterization.


Whether to use the Baranov equation or Pope's approximation to calculate the predicted catch at age in the model.


Whether a multinomial or lognormal distribution is used for likelihood of the catch-at-age matrix. See details.


Numeric for data weighting of catch-at-age matrix if CAA_hist = "multinomial". Otherwise ignored. See details.


A multiplicative factor that rescales the catch in the assessment model, which can improve convergence. By default, "mean1" scales the catch so that time series mean is 1, otherwise a numeric. Output is re-converted back to original units.


Integer, the maximum age (plus-group) in the model.


Optional list of starting values. Entries can be expressions that are evaluated in the function. See details.


A named list for the parameters of any priors to be added to the model. See below.


Logical, whether to fix steepness to value in Data@steep in the model for SCA. This only affects calculation of reference points for SCA2.


Logical, whether the equilibrium fishing mortality prior to the first year of the model is estimated. If TRUE, F_equilibrium is fixed to value provided in start (if provided), otherwise, equal to zero (assumes unfished conditions).


Logical, whether the standard deviation of the catch is fixed. If TRUE, omega is fixed to value provided in start (if provided), otherwise, value based on Data@CV_Cat.


Logical, the standard deviation of the recruitment deviations is fixed. If TRUE, tau is fixed to value provided in start (if provided), otherwise, value based on Data@sigmaR.


A named list (Index, CAA, Catch) of likelihood weights for the data components. For the index, a vector of length survey. For CAL and Catch, a single value.


Numeric or character string describing the years for which recruitment deviations are estimated in SCA. By default, equal to "comp_onegen", where rec devs are estimated one full generation prior to the first year when catch-at-age (CAA) data are available. With "comp", rec devs are estimated starting in the first year with CAA. With "all", rec devs start at the beginning of the model. If numeric, the number of years after the first year of the model for which to start estimating rec devs. Use negative numbers for years prior to the first year.


Typically, a numeric for the number of most recent years in which recruitment deviations will not be estimated in SCA (recruitment in these years will be based on the mean predicted by stock-recruit relationship). By default, "comp50" uses the number of ages (smaller than the mode) for which the catch-at-age matrix has less than half the abundance than that at the mode.


A numeric vector of length 2 to indicate the M as B/B0 approaches zero and one, respectively. By default, set to 75% and 125%, respectively, of Data@Mort[x].


Logical, whether the likelihood of the model integrates over the likelihood of the recruitment deviations (thus, treating it as a random effects/state-space variable). Otherwise, recruitment deviations are penalized parameters.


Logical, passed to MakeADFun, whether TMB will print trace information during optimization. Used for diagnostics for model convergence.


Logical, whether the hessian function will be passed to nlminb during optimization (this generally reduces the number of iterations to convergence, but is memory and time intensive and does not guarantee an increase in convergence rate). Ignored if integrate = TRUE.


The number of restarts (calls to nlminb) in the optimization procedure, so long as the model hasn't converged. The optimization continues from the parameters from the previous (re)start.


A named list of arguments for optimization to be passed to nlminb.


A named list of arguments for optimization of the random effects, which is passed on to newton.


Other arguments to be passed.


An object of class Assessment.


See SCA for more information on all arguments.

Online Documentation

Model description and equations are available on the openMSE website.


Forrest, R.E., Holt, K.R., and Kronlund, A.R. 2018. Performance of alternative harvest control rules for two Pacific groundfish stocks with uncertain natural mortality: Bias, robustness and trade-offs. Fisheries Research 2016: 259-286.


Q. Huynh


res <- SCA_DDM(Data = MSEtool::SimulatedData)