A range of stock-recruitment (SR) models commonly used in fisheries science are provided in FLCore.

## Usage

```
ricker()
bevholt()
bevholtDa()
bevholtss3()
segreg()
geomean()
shepherd()
cushing()
rickerSV()
bevholtSV()
shepherdSV()
bevholtAR1()
rickerAR1()
segregAR1()
rickerCa()
survRec(ssf, R0, Sfrac, beta, SF0 = ssf[, 1])
bevholtsig()
mixedsrr()
```

## Arguments

- rho
Autoregression

- sigma2
Autoregression

- obs
Observed values

- hat
estimated values

- steepness
Steepness.

- vbiomass
Virgin biomass.

- spr0
Spawners per recruit at F=0, see

`spr0`

.- model
character vector with model name, either 'bevholt' or 'ricker'.

## Details

Each method is defined as a function returning a list with one or more elements as follows:

model: Formula for the model, using the slot names

*rec*and*ssb*to refer to the usual inputslogl: Function to calculate the loglikelihood of the given model when estimated through MLE (See

`fmle`

)initial: Function to provide initial values for all parameters to the minimization algorithms called by

`fmle`

or`nls`

. If required, this function also has two attributes,`lower`

and`upper`

, that give lower and upper limits for the parameter values, respectively. This is used by some of the methods defined in`optim`

, like`"L-BFGS-B"`

.

The *model<-* method for `FLModel`

can then be called
with *value* being a list as described above, the name of the function
returning such a list, or the function itself. See the examples below.

Several functions to fit commonly-used SR models are available. They all use
maximum likelihood to estimate the parameters through the method
`loglAR1`

.

ricker: Ricker stock-recruitment model fit: $$R = a S e^{-b S}$$

*a*is related to productivity (recruits per stock unit at small stock size) and*b*to density dependence. (*a, b*> 0).bevholt: Beverton-Holt stock-recruitment model fit: $$R = \frac{a S}{b + S}$$

*a*is the maximum recruitment (asymptotically) and*b*is the stock level needed to produce the half of maximum recruitment \(\frac{a}{2}\). (*a, b*> 0).segreg: Segmented regression stock-recruitment model fit: $$R = \mathbf{ifelse}(S \leq b, a S, a b)$$

*a*is the slope of the recruitment for stock levels below*b*, and \(a b\) is the mean recruitment for stock levels above*b*. (*a, b*> 0).geomean: Constant recruitment model fit, equal to the historical geometric mean recruitment. $$(R_1 R_2 \ldots R_n)^{1/n} = e^{\mathbf{mean}(\log(R_1),\ldots , }$$$$ \log(R_n))$$

shepherd: Shepherd stock-recruitment model fit: $$R = \frac{a S}{1+(\frac{S}{b})^c}$$

*a*represents density-independent survival (similar to*a*in the Ricker stock-recruit model),*b*the stock size above which density-dependent processes predominate over density-independent ones (also referred to as the threshold stock size), and*c*the degree of compensation.cushing: Cushing stock-recruitment model fit: $$R = a S e^{b}$$ This model has been used less often, and is limited by the fact that it is unbounded for

*b*>=1 as*S*increases. (*a, b*> 0).

Stock recruitment models parameterized for steepness and virgin biomass:

rickerSV: Fits a ricker stock-recruitment model parameterized for steepness and virgin biomass. $$a = e^{\frac{b \cdot vbiomass}{spr0}}$$ $$b = \frac{\log(5 \cdot steepness)}{0.8 \cdot vbiomass}$$

bevholtSV: Fits a Beverton-Holt stock-recruitment model parameterised for steepness and virgin biomass. $$a = \frac{4 \cdot vbiomass \cdot steepness}{(spr0 \cdot (5 \cdot steepness-1.0}$$ $$b = \frac{vbiomass (1.0-steepness)}{5 \cdot steepnes-1.0}$$

sheperdSV: Fits a shepher stock-recruitment model parameterized for steepness and virgin biomass. $$a = \frac{1.0+(\frac{vbiomass}{b})^c}{spr0}$$ $$b = vbiomass (\frac{0.2-steepness}{steepness (0.2)^c - 0.2})^ (\frac{-1.0}{c})$$

Models fitted using autoregressive residuals of first order:

bevholtAR1, rickerAR1, segregAR1: Beverton-Holt, Ricker and segmented regression stock-recruitment models with autoregressive normal log residuals of first order. In the model fit, the corresponding stock-recruit model is combined with an autoregressive normal log likelihood of first order for the residuals. If \(R_t\) is the observed recruitment and \(\hat{R}_t\) is the predicted recruitment, an autoregressive model of first order is fitted to the log-residuals, \(x_t = \log(\frac{R_t}{\hat{R}_t})\). $$x_t=\rho x_{t-1} + e$$ where \(e\) follows a normal distribution with mean 0: \(e \sim N(0, \sigma^2_{AR})\).

Ricker model with one covariate. The covariate can be used, for example, to
account for an enviromental factor that influences the recruitment dynamics.
In the equations, *c* is the shape parameter and *X* is the
covariate.

rickerCa: Ricker stock-recruitment model with one multiplicative covariate. $$R = a (1- c X) S e^{-b S}$$

## References

Beverton, R.J.H. and Holt, S.J. (1957) On the dynamics of exploited fish populations. MAFF Fish. Invest., Ser: II 19, 533.

Needle, C.L. Recruitment models: diagnosis and prognosis. Reviews in Fish Biology and Fisheries 11: 95-111, 2002.

Ricker, W.E. (1954) Stock and recruitment. J. Fish. Res. Bd Can. 11, 559-623.

Shepherd, J.G. (1982) A versatile new stock-recruitment relationship for fisheries and the construction of sustainable yield curves. J. Cons. Int. Explor. Mer 40, 67-75.

## Examples

```
# inspect the output of one of the model functions
bevholt()
#> $logl
#> function(a, b, rec, ssb)
#> loglAR1(log(rec), log(a*ssb/(b+ssb)))
#> <bytecode: 0x55884250e6d0>
#> <environment: 0x55884afe3ae8>
#>
#> $model
#> rec ~ a * ssb/(b + ssb)
#> <environment: 0x55884afe3ae8>
#>
#> $initial
#> function(rec, ssb) {
#> a <- max(quantile(c(rec), 0.75, na.rm = TRUE))
#> b <- max(quantile(c(rec)/c(ssb), 0.9, na.rm = TRUE))
#> return(FLPar(a = a, b = a/b))}
#> <bytecode: 0x55884250acf0>
#> <environment: 0x55884afe3ae8>
#> attr(,"lower")
#> [1] -Inf -Inf
#> attr(,"upper")
#> [1] Inf Inf
#>
names(bevholt())
#> [1] "logl" "model" "initial"
bevholt()$logl
#> function(a, b, rec, ssb)
#> loglAR1(log(rec), log(a*ssb/(b+ssb)))
#> <bytecode: 0x55884250e6d0>
#> <environment: 0x558848710930>
# once an FLSR model is in the workspace ...
data(nsher)
# the three model-definition slots can be modified
# at once by calling 'model<-' with
# (1) a list
model(nsher) <- bevholt()
# (2) the name of the function returning this list
model(nsher) <- 'bevholt'
# or (3) the function itself that returns this list
model(nsher) <- bevholt
```