02_specifying_demographic_parameters.Rmd
To parameterize a model built with afscOM to behave like a specific population, the user needs to specify a set of population demographic parameters. These parameters all take the same computational structure: a multi-dimensional array.
These multidimensional arrays MUST always follow the same dimension
structure for afscOM to work correctly. Biological parameters, such as
natural mortality, maturity, and weight-at-age should all have array
dimensions: [nyears, nages, nsexes, nregions]
. Fishery and
survey fleet parameters, such as selectivity, retention, and discard
mortality, should have array dimensions:
[nyears, nages, nsexes, nregions, nfleets]
(for fishing
fleets) or [nyears, nages, nsexes, nregions, nsurveys]
(for
survey fleets).
In this structure the first index along the “sex” dimension (dimension 3) will correspond to parameters for females, while the second index will correspond to parameters for males.
Required population parameters include:
Parameter Name | Description | Dimensions | Notes |
---|---|---|---|
mort |
Natural mortality rate | [nyears, nages, nsexes, nregions] |
|
mat |
Maturity at age | [nyears, nages, nsexes, nregions] |
|
waa |
Weight-at-age | [nyears, nages, nsexes, nregions] |
|
sexrat |
Recruitment sex ratio | [nyears, nages, nsexes, nregions] |
|
movement |
Movement matrix | [nregions, nregions, nyear, nages, nsexes] |
Only required for spatial models (nregions > 1) |
sel |
Fishery selectivity | [nyears, nages, nexes, nregions, nfleets] |
|
ret |
Fishery retention | [nyears, nages, nsexes, nregions, nfleets] |
|
dmr |
Fishery discard mortality (as an instantaneous rate) | [nyears, nages, nsexes, nregions, nfleets] |
|
surv_sel |
Survey selectivity | [nyears, nages, nsexes, nregions, nsurveys] |
Only required if observations are being simulated |
Note that all parameters must have the minimum dimensions specified above. This includes maturity parameters, even though maturity is typically only considered in the context of females. Also note that parameters, CANNOT, be specified by length.
To facilitate easier creation of these multi-dimensional parameter
matrices, a helper function generate_param_matrix(...)
has
been provided. This function accepts as input a single value, a vector
of values, or a matrix/array of values, and a list of dimensions over
which to fill a fully-formed parameter matrix with that input.
For example, if natural mortality (mort
) is assumed to
be constant across time, age, sex, and space, the following code will
create an [nyears, nages, nsexes, nregions]
parameter
matrix where every value is the same ( 0.113179 in this
case):
nyears <- 10
nages <- 11
dimension_names <- list(
"time" = 1:nyears,
"age" = 1:nages,
"sex" = c("F", "M"),
"region" = "Region 1",
"fleet" = c("Fleet 1", "Fleet 2")
)
M <- 0.113179
mort <- afscOM::generate_param_matrix(M, dimension_names = dimension_names)
mort
If maturity (mat
) is assumed to vary by age, but is
otherwise constant across time, sex, and space, the following code will
create a properly formed parameter matrix where each age has a different
maturity level:
maturity <- c(0.0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.0, 1.0, 1.0, 1.0, 1.0)
mat <- afscOM::generate_param_matrix(maturity, dimension_names = dimension_names, by="age")
mat
Finally, if weight-at-age (waa
) varies by both age and
sex, the following code will create the appropriately formed parameter
matrix with different values for WAA by age and sex, but repeated across
time and space:
weight_mat <- matrix(NA, nrow=11, ncol=2, dimnames=dimension_names[c("age", "sex")])
weight_mat[,1] <- c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22)
weight_mat[,2] <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
waa <- afscOM::generate_param_matrix(weight_mat, dimension_names = dimension_names, by=c("age", "sex"))
waa
The generate_param_matrix
requires the user to specify
as a parameter input the names of each dimension in the output matrix as
a list. The function will work correctly regardless of the specific
dimension names used, however, when filling across 2-or-more dimensions
(as in the above example with weight-at-age), the input matrix (that is
being used to fill the larger parameter matrix), must also have the same
dimension names along the corresponding axes.
In the weight-at-age example above, the weight_mat
matrix, which contained the WAAs for each age and sex, has dimension
names equivalent to the dimension names along the “age” and “sex”
dimensions that are provided to generate_param_matrix
. If
these names do not match, an error will be returned to the user
indicating as such.
For fleet parameters, such as selectivity or retention, an extra
dimension nfleets
is required.
generate_param_matrix
has an additional,
include_fleet_dim
parameter that can be specified to
indicate that the output array should have a fleet dimension in addition
to the other four dimensions. If the parameter is specified to vary
across fleets, the include_fleet_dim
parameter will be
automatically turned on.
For example:
selex_mat <- array(NA, dim=c(11, 2, 2), dimnames=dimension_names[c("age", "sex", "fleet")])
selex_mat[,1,1] <- c(0.0, 0.1, 0.3, 0.5, 0.7, 0.9, 1.0, 1.0, 1.0, 1.0, 1.0)
selex_mat[,2,1] <- c(0.0, 0.1, 0.2, 0.4, 0.6, 0.7, 0.8, 0.9, 1.0, 1.0, 1.0)
selex_mat[,1,2] <- c(0.3, 0.7, 1.0, 1.0, 0.9, 0.7, 0.6, 0.5, 0.4, 0.4, 0.4)
selex_mat[,2,2] <- c(0.2, 0.6, 1.0, 0.95, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3)
sel <- afscOM::generate_param_matrix(selex_mat, dimension_names = dimension_names, by=c("age", "sex", "fleet"))
sel
Once these population parameter matrices have been defined, they need to be added to a list that will be passed as a parameter to the OM:
dem_params <- list(
waa=waa,
mat=mat,
mort=mort,
sexrat=sexrat,
movement=movement,
sel=sel,
ret=ret,
dmr=dmr,
surv_sel=survey_sel
)
An additional helper function validate_dem_params
, takes
as input a list of population parameter matrices, and the expected
dimensions, and will check if all required parameter matrices are
present and of appropriate dimensions. If required parameters are
missing, or are of incorrect dimensions, an error will be returned. It
is recommended that this function be used prior to running the model to
verify that the input parameters matrices are correctly specified.