Index selectivity

Next, we can move on to index selectivity. Unlike fleet selectivity, selectivity is unique to each index and no dummy fleets are used.

Is index selectivity already defined elsewhere?

The vector s_selectivity defines where the index selectivity is defined (the terms index and survey are used interchangeably). Index selectivity may be identical to fleet selectivity, i.e., vulnerable biomass, or could be related to spawning or total biomass. If we have 4 indices with:

s_selectivity <- c("SSB", "B", 1, 2)

The first index is an index of spawning biomass as denoted by “SSB” (maturity is configured in the OM), the second index tracks total biomass as denoted by “B” (selectivity = 1 for all ages), and the third and fourth indices have the selectivity of the first and second fleets, respectively. Integers for fleets refer to the true fleet and not to selectivity blocks/dummy fleets.

No further consideration of index selectivity is needed when defined elsewhere, and the RCM function call can look like this:

output <- RCM(OM, RCMdata, selectivity = selectivity, 
              s_selectivity = s_selectivity, 
              ...)

Index selectivity is independent of anything else in the model

On the other hand, if index selectivity needs to be explicitly defined, then the s_selectivity vector can indicate the functional form, using one of logistic, dome, or free. Let’s look at another situation with 5 indices with this selectivity definition:

s_selectivity <- c(2, "SSB", "B", "dome", "free")

For the fourth and fifth index, the selectivity functions are dome-shaped and free parameters, respectively. We will need to consider what the parameters defining this functions are, either as starting values to be estimated or fixed values in the model.

Selectivity parameters

Just as with the fleet selectivity parameters, the index selectivity parameters by default use OM@LFS, OM@L5, and OM@Vmaxlen for start values when s_selectivity = "logistic" or "dome". Custom start values are needed when index selectivity uses free parameters.

Custom start values are passed to the RCM in the start$ivul_par matrix with the same dimension and layout as for start$vul_par:

OM@maxage <- 5
s_selectivity <- c(2, "SSB", "B", "dome", "free")
ivul_par
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    0    0 55.0    1
## [2,]    0    0    0 40.0    0
## [3,]    0    0    0  0.5    0
## [4,]    0    0    0  0.0    0
## [5,]    0    0    0  0.0    0
## [6,]    0    0    0  0.0    0

Parameter slots for index 1-3 in the first three columns are ignored. Again they’re placeholders for internal organization. The first three rows in column four are the start values for the three parameters of the dome function (to be estimated), and the fifth index only selects age-0 animals, i.e., an index of recruits.

Finally, to remove parameters from estimation either because they’re just placeholders (indices 1-3) or they should be fixed in the model (index 5), we provide the map argument for ivul_par with map$ivul_par:

map_ivul_par
##      [,1] [,2] [,3] [,4] [,5]
## [1,]   NA   NA   NA    1   NA
## [2,]   NA   NA   NA    2   NA
## [3,]   NA   NA   NA    3   NA
## [4,]   NA   NA   NA   NA   NA
## [5,]   NA   NA   NA   NA   NA
## [6,]   NA   NA   NA   NA   NA

A function call utilizing this custom set-up for index selectivity would be:

output <- RCM(OM, data, selectivity = selectivity, 
              s_selectivity = s_selectivity, 
              start = list(ivul_par = ivul_par), 
              map = list(ivul_par = map_ivul_par), 
              ...)