MLZ is a package that facilitates data preparation and estimation of mortality with statistical diagnostics using the mean length-based mortality estimator and several extensions.

In this section, a step-by-step guide to using the mean length (ML) estimator of Gedamke and Hoenig (2006) is provided. This guide outlines the main features of the package.

Work in the package can be divided into three general steps, with supporting diagnostic tools:

- Data preparation
- Mortality estimation
- Model selection procedure

MLZ uses the S4 class system. Data and life history parameters, i.e.,
von Bertalanffy Linf and K, are stored in a single object of class
`MLZ_data`

with pre-defined slots. Slots in the S4 class can
be accessed with `@`

.

Length data are imported as either a data frame of individual records or as a matrix (years x length bins):

```
data(SilkSnapper)
new.dataset <- new("MLZ_data", Year = 1983:2013, Len_df = SilkSnapper, length.units = "mm")
```

The `bin_length`

function can be used to convert
individual lengths into a length frequency matrix with specified length
bins.

The `plot`

function can be used to visualize the data to
aid in the selection of \(L_c\).

```
## Warning: The dot-dot notation (`..ncount..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(ncount)` instead.
## ℹ The deprecated feature was likely used in the MLZ package.
## Please report the issue to the authors.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
```

Once Lc is identified, `calc_ML()`

can be used to mean
lengths from records larger than Lc.

A `summary`

method function is also available for class
`MLZ_data`

.

Once mean lengths > Lc are calculated, mortality can be estimated
using the `ML`

function:

The function returns an object of class `MLZ_model`

which
includes predicted values of the data, parameter estimates with
correlation matrix and gradient vector. `summary`

and
`plot`

method functions are also available for
`MLZ_model`

objects.

```
## $Stock
## [1] "Goosefish: Northern Management Region"
##
## $Model
## [1] "ML"
##
## $Estimates
## Estimate Std. Error
## Z[1] 0.141 0.005
## Z[2] 0.310 0.037
## Z[3] 0.551 0.046
## yearZ[1] 1978.316 0.832
## yearZ[2] 1987.767 1.222
## sigma 24.342 0.000
```

With `i = 1, 2, ... I`

change points, `Z[i]`

is
the estimated mortality rate in successive time periods.
`yearZ[i]`

indicates the time when mortality changed from
`Z[i]`

to `Z[i+1]`

.

The analysis can be repeated by considering alternative numbers of change points (years in which mortality changes, estimated in continuous time).

Model runs with different change points can be compared using AIC.
The `compare_models`

function facilitates this feature and
produces a plot of the predicted data.

```
## negLL npar AIC delta.AIC
## 2-change point 111.1122 6 234.2244 0.000000
## 1-change point 116.5551 4 241.1103 6.885858
## 0-change point 157.9197 2 319.8394 85.615006
```

`compare_models`

can also be used with `MLCR`

and `MLmulti`

(See section 4).

To explore changes in the length distribution over time, the
`modal_length`

function plots the modal length from each
annual length distribution. The modal length can change for several
reasons, including changes in mortality, selectivity, and
recruitment.

In order to avoid local minima in the negative log-likelihood function, the estimation functions by default use a grid search over the change points in order to find starting values close to the maximum likelihood estimates.

The grid search function can also be called seperately using
`profile_ML`

. This function also serves as a likelihood
profile over the change points. Figures are provided for 1- and 2-change
point models.

`profile_MLCR`

, and `profile_MLmulti`

are also
available for the respective models (Section 4).

The `sensitivity_Lc`

function for the ML estimator plots
estimates of Z and change points with different values of Lc.

Additional diagnostics, including sensitivity to life hitory (growth, natural mortality), and bootstrapping routines are in development.

To use the MLCR estimator (Huynh et al. 2017b), a time series of CPUE is needed:

If the CPUE is biomass-based, e.g., pounds of fish per gear haul,
then length-weight exponent `b`

is also needed.

The corresponding estimation function and grid search function are
`MLCR`

and `profile_MLCR`

, respectively:

For a multispecies analysis (Huynh et al. 2017a), seperate
`MLZ_data`

objects are created for seperate stocks/species
and should be stored in a list:

`## [1] "list"`

The corresponding estimation function and grid search function are
`MLmulti`

and `profile_MLmulti`

, respectively. For
both functions, the Single Species Model or Multispecies 1, 2, or 3 must
also be identified in the `model`

argument:

In component `estimates`

of the output object, the
mortality estimates `Z[i,n]`

are indexed by time period
`i`

and species `n`

, change points
`yearZ[i]`

are indexed by time period `i`

, and
`sigma[n]`

is indexed by species `n`

. For models
`MSM2`

and `MSM3`

, `Z[i,n]`

are
estimated for `i = 1`

and derived for `i > 1`

.
Esimated parameters can be viewed by checking component `opt`

from the output:

The `compare_models`

function will correctly count the
number of estimated parameters for AIC calculation.

`MLeffort`

uses a time series of mean length and effort to
estimate a catchability coefficient `q`

and natural mortality
`M`

(Then et al.). Parameter \(t_0\) from the von Bertalanffy equation is
needed as well:

```
data(Nephrops)
Nephrops@Effort
Nephrops@vbt0 <- 0
MLeffort(Nephrops, start = list(q = 0.1, M = 0.2), n_age = 24)
```

Unlike other models in the package, starting values are required in MLeffort.

Instead of using an analytic model for the mean length, MLeffort uses an age-structured population model. The youngest age in the age-structured model is \(t_c\) which is obtained from von Bertalanffy parameters and \(L_c\): \(t_c = \frac{-1}{K}log(1 - \frac{L_c}{L_{\infty}}) + t_0\)

In the `MLeffort`

function call, the number of ages above
\(t_c\) to be modeled is specified in
argument `n_age`

. Time steps smaller than one year can be
used by indicating the number of seasons in the model with argument
`n_season`

. The season is matched to the season in which mean
lengths are observed with argument `obs_season`

. Currently
only one observation per year is supported. The timing within the
observed season that lengths are observed is set with argument
`timing`

, i.e. `timing = 0, 0.5`

is the beginning
and middle of the season, respectively. The equilibrium effort prior to
the first year of the model is indicated with argument
`eff_init`

, i.e. `eff_init = 0`

for virgin
equilibrium conditions.

`MLeffort(Nephrops, start = list(q = 0.1, M = 0.3), n_age = 24, n_season = 1, obs_season = 1, timing = 0.5)`

Finally, the model can be run with a fixed M with the argument
`estimate.M = FALSE`

, in which case, the value of M for the
model is obtained from slot `@M`

in the MLZ_data object.

Gedamke, T. and Hoenig, J.M. 2006. Estimating mortality from mean length data in nonequilibrium situations, with application to the assessment of goosefish. Transactions of the American Fisheries Society 135:476-487.

Huynh, Q.C., Gedamke, T., Hoenig, J.M, and Porch C. 2017a. Multispecies Extensions to a Nonequilibrium Length-Based Mortality Estimator. Marine and Coastal Fisheries 9:68-78.

Huynh, Q.C., Gedamke, T., Porch, C.E., Hoenig, J.M., Walter, J.F, Bryan, M., and Brodziak, J. 2017b. Estimating Total Mortality Rates from Mean Lengths and Catch Rates in Non-equilibrium Situations. Transactions of the American Fisheries Society 146:803-815.

Then, A.Y, Hoenig, J.M, and Huynh, Q.C. 2018. Estimating fishing and natural mortality rates, and catchability coefficient, from a series of observations on mean length and fishing effort. ICES Journal of Marine Science 75: 610-620.