Length-Based Spawning Potential Ratio
Introduction
This “package” contains functions to run the Length-Based Spawning Potential Ratio (LBSPR) method. The LBSPR “package” can be used in two ways:
simulation using the LBSPR model and
fitting to empirical length data to provide an estimate of the spawning potential ratio (SPR).
In this exercise the model will be used in the option 2.
The LBSPR method has been developed for data-limited fisheries, where few data are available other than a representative sample of the size structure of the vulnerable portion of the population (i.e., the catch) and an understanding of the life history of the species. The LBSPR method does not require knowledge of the natural mortality rate (M), but instead uses the ratio of natural mortality and the von Bertalanffy growth coefficient (K) (M/K), which is believed to vary less across stocks and species than M (Prince et al. 2015).
Like any assessment method, the LBSPR model relies on a number of simplifying assumptions. In particular, the LBSPR models are equilibrium based, and assume that the length composition data is representative of the exploited population at steady state.
** See the publicaitons listed in the reference list for full details of the assumptions of the model.
Please make sure that you understand the assumptions of the model before using the LBSPR package on your data.
** Shiny Applications - Many of the functions in the LBSPR package are available as online applications at http://barefootecologist.com.au/
Age-Structured Length-Based Model
The LBSPR model described by Hordyk et al. (2015a, b), and tested in a MSE framework (Hordyk et al. 2015c), use a conventional age-structured equilibrium population model. An inherent assumption of this model structure is that selectivity is age-based not length-based.
Length-Structured Growth-Type-Group Model
Hordyk et al. (2016) describe a length-structured version of the LBSPR model that uses growth-type-groups (GTG) to account for size-based selectivity. The GTG-LBSPR model also has the ability to include variable M at size (by default M is assumed to be constant). The GTG-LBSPR model typically estimates a lower fishing mortality rate for a given size structure compared to the earlier age-structured model. This is because the age-structured model has a ‘regeneration assumption’, where, because of the age-based selectivity assumption, large individuals are expected even at high fishing mortality (large, young fish).
The default setting for the LBSPR package is to use the GTG-LBSPR model for all simulation and estimation. Control options in the simulation and estimation functions can be used to switch to the age-structured LBSPR model.
Only the life history parameters need to be specified for the estimation model. The exploitation parameters will be estimated.
Example
First Steps
Installing the LBSPR Package
# install.packages("LBSPR")
## Load the Package
library(LBSPR)
#Setup the working directory
** You will need to create your workshop directory on your computer. Example of suggested directory name “C:/…User…/ICCAT_DL_WS/LBSPR”
<- DataDir()
datdir <- "C:/Users/demersais/Dropbox/_ICCAT_Data_limited workshop/Scripts/LBSPR/Example data files" datdir
The available example files can be printed out using
list.files
:
list.files(datdir, pattern=".csv")
## [1] "LFreq_MultiYr.csv" "LFreq_MultiYrHead.csv" "LFreq_SingYr.csv"
## [4] "LFreq_SingYrHead.csv" "LRaw_MultiYr.csv" "LRaw_MultiYrHead.csv"
## [7] "LRaw_SingYr.csv" "LRaw_SingYrHead.csv"
Fitting Empirical Length Data
Two objects are required to fit the LBSPR model to length data: –>
LB_pars
which contains the life-history parameters
(described above) and –> LB_lengths
, which contains the
length frequency data.
Creating a LB_pars
object
A valid LB_pars
object must be first created (see
sections above):
<- new("LB_pars") MyPars
## A blank LB_pars object created
## Default values have been set for some parameters
@Species <- "Example"
MyPars@Linf <- 110 # Von Bertalanffy asymptotic length
MyPars@L50 <- 50 # Size at first maturity
MyPars@L95 <- 75 # Size at 95% of maturity
MyPars@MK <- 1.6 # Relationship between natural mortality "M" and individual growth coefficient "K"
MyPars@BinMax <- 127.5 # Máximum length bin which must be larger than Linf and the larger sampled individual
MyPars@BinMin <- 2.5 # Minimum length bin which must be smaller than the smaller sampled individual
MyPars@BinWidth <- 5 # Length bin width
MyPars@SPR <- 1 # Target SPR MyPars
Creating a LB_lengths
object
Specifications of files containing length data:
** The length data can be either raw data, that is, individual length measurements, or length frequency data, where the first column of the data set must contain the mid-points of the length bins, and the remaining columns contain the counts for each length class.
** The data type (freq
or raw
) must be
specified in the call to the new
function.
** A LB_lengths
object can be created by reading from a
CSV file with the data to be used:
** See the different CSV files configurations contained in the workshop directory “…/ICCAT_DL_WS/Example data files”
–> A length frequency data set with multiple years:
<- new("LB_lengths", LB_pars=MyPars, file=paste0(datdir, "/LFreq_MultiYr.csv"), dataType="freq") Len1
–> A length frequency data set with multiple years and a header row (identical to Len1 data, but with a header row):
<- new("LB_lengths", LB_pars=MyPars, file=paste0(datdir, "/LFreq_MultiYrHead.csv"), dataType="freq", header=TRUE) Len2
–> A raw length data set with multiple years:
<- new("LB_lengths", LB_pars=MyPars, file=paste0(datdir, "/LRaw_MultiYr.csv"), dataType="raw") Len3
–> A raw length data set with multiple years and a header row (identical to Len3 data, but with a header row):
<- new("LB_lengths", LB_pars=MyPars, file=paste0(datdir, "/LRaw_MultiYrHead.csv"), dataType="raw", header=TRUE) Len4
** Notice that for raw length measurements you must specify the
parameters for the length bins (maximum, minimum, and width of length
classes) in the LB_pars
object. If these are left blank,
default values are used.
Plotting Length Data
The plotSize
function can be used to plot the imported
length data. This is usually a good idea to do before proceeding with
fitting the model, to confirm that everything has been read in
correctly:
plotSize(Len1)
plotSize(Len2)
plotSize(Len3)
plotSize(Len4)
Fit the Model
The LBSPR model is fitted using the LBSPRfit
function:
<- LBSPRfit(MyPars, Len1)
myFit1 <- LBSPRfit(MyPars, Len2) myFit2
Note that the Control
argument can be used to modify the
additional parameters or LBSPR model type (see description in the
“Control” section below).
Examine and Plot Results
The LBSPR package uses a Kalman filter and the Rauch-Tung-Striebel
smoother function (see FilterSmooth
) to smooth out the
multi-year estimates of SPR, F/M, and selectivity parameters.
The smoother parameter estimates can be accessed from the
myFit
object (which is an object of class
LB_obj
[see earlier section for details]):
@Ests myFit1
## SL50 SL95 FM SPR
## [1,] 50.16 65.12 0.98 0.36
## [2,] 50.16 65.15 0.98 0.36
## [3,] 50.13 65.02 0.98 0.37
## [4,] 50.13 65.02 0.98 0.37
## [5,] 50.04 64.81 0.98 0.37
## [6,] 49.85 64.59 0.96 0.37
@Ests myFit2
## SL50 SL95 FM SPR
## [1,] 52.97 70.02 1.26 0.33
## [2,] 52.91 69.90 1.26 0.33
## [3,] 52.74 69.72 1.24 0.33
## [4,] 52.86 70.18 1.25 0.33
## [5,] 52.90 70.30 1.25 0.33
## [6,] 52.91 70.15 1.24 0.33
Note that by default the smoothed estimates are used in the plotting routines.
The individual point estimates for each year can be accessed from the
LB_obj
object:
data.frame(rawSL50=myFit1@SL50, rawSL95=myFit1@SL95, rawFM=myFit1@FM, rawSPR=myFit1@SPR)
## rawSL50 rawSL95 rawFM rawSPR
## 1 50.68 65.46 1.01 0.3610884
## 2 50.41 66.78 0.99 0.3621779
## 3 49.85 63.72 0.98 0.3599764
## 4 51.01 67.12 0.92 0.3865039
## 5 51.05 64.84 1.22 0.3185321
## 6 47.97 62.45 0.76 0.4133589
The plotSize
function can also be used to show the model
fit to the data:
plotSize(myFit1)
plotSize(myFit2)
Similarly, the plotMat
function can be used to show the
specified maturity-at-length curve, and the estimated
selectivity-at-length curve:
plotMat(myFit1)
plotMat(myFit2)
Finally, the plotEsts
function can be used to visually
display the estimated parameters. Note that this works for all data
sets, but only makes sense when there are several years of data:
plotEsts(myFit1)
plotEsts(myFit2)
Obs. Estimates of SPR for any given year are independent of every other year because LBSPR is an equilibrium calculation. So it does not provide a time series of SPR, and the smoothing is not a time series, but an average response over the many years. An alternative treatment to the smoothing would be to combine length comps over years to get an average SPR over those multiple samples.
Comparing Observed Length Data to Target Size Structure
You can compare the observed size data against an expected size
composition at a target SPR using the plotTarg
function.
Here we have set the target SPR at 100%, by the function MyPars@SPR <- 1
But we can set SPR at 75% by setting MyPars@SPR <- 0.75
Then import your prefeered length data. Here we will use the Frequency type with multiple years.
<- new("LB_lengths", LB_pars=MyPars, file=paste0(datdir, "/LFreq_MultiYr.csv"), dataType="freq") LenDat
Finally, you must set the selectivity parameters for the simulated size data. You may be able to estimate these from the data:
<- LBSPRfit(MyPars, LenDat) Mod
## Fitting model
## Year:
## 1
## 2
## 3
## 4
## 5
## 6
<- 1 # first year of data
yr
@SL50 <- Mod@SL50[yr] # Length at first selectivity estimated from the fitted model
MyPars@SL95 <- Mod@SL95[yr] # Length at 95% selectivity estimated from the fitted model
MyPars
plotTarg(MyPars, LenDat, yr=yr)
<- 6 # last year of data
yr
@SL50 <- Mod@SL50[yr] # Length at first selectivity estimated from the fitted model
MyPars@SL95 <- Mod@SL95[yr] # Length at 95% selectivity estimated from the fitted model
MyPars
plotTarg(MyPars, LenDat, yr=yr)
Control Options
There are a number of additional parameters that can be modified to control other aspects of the simulation model.
For example, by default the LBSPR model using the Growth-Type-Group
model (Hordyk et at. 2016). The Control
argument can be
used to switch to the Age-Structured model (Hordyk et al. 2015a, b):
@Linf <- 100
MyPars@SL50 <- 50
MyPars@SL95 <- 55
MyPars@FM <- numeric()
MyPars@SPR <- 0.4
MyPars<- LBSPRsim(MyPars, Control=list(modtype="absel"))
MySim @FM MySim
## [1] 0.95
<- LBSPRsim(MyPars, Control=list(modtype="GTG"))
MySim @FM # lower F/M for the GTG model MySim
## [1] 0.95
See the help file for the LBSPRsim
function for
additional parameters for the Control
argument.
References
Hordyk, A.R., Ono, K., Sainsbury, K.J., Loneragan, N., and Prince, J.D. 2015a. Some explorations of the life history ratios to describe length composition, spawning-per-recruit, and the spawning potential ratio. ICES J. Mar. Sci. 72: 204–216.
Hordyk, A.R., Ono, K., Valencia, S.R., Loneragan, N.R., and Prince, J.D. 2015b. A novel length-based empirical estimation method of spawning potential ratio (SPR), and tests of its performance, for small-scale, data-poor fisheries. ICES J. Mar. Sci. 72: 217–231.
Hordyk, A.R., Loneragan, N.R., and Prince, J.D. 2015c. An evaluation of an iterative harvest strategy for data-poor fisheries using the length-based spawning potential ratio assessment methodology. Fish. Res. 171: 20–32.
Hordyk, A., Ono, K., Prince, J.D., and Walters, C.J. 2016. A simple length-structured model based on life history ratios and incorporating size-dependent selectivity: application to spawning potential ratios for data-poor stocks. Can. J. Fish. Aquat. Sci. 13: 1–13. doi: 10.1139/cjfas-2015-0422.
Prince, J.D., Hordyk, A.R., Valencia, S.R., Loneragan, N.R., and Sainsbury, K.J. 2015. Revisiting the concept of Beverton–Holt life-history invariants with the aim of informing data-poor fisheries assessment. ICES J. Mar. Sci. 72: 194–203.