4  Comparing MSE Scenarios

4.1 Introduction

In the previous chapter a description was given of how to run the aMSE software and produce an array of results. That has many interesting aspects but the underlying intent of the MSE software is to test and compare alternative harvest strategies. In general terms formal harvest strategies have three main components: 1) specified data sets, 2) a specified data analysis or assessment relative to limits and targets, and 3) a harvest control rule that produces a specified catch or fishing mortality. In addition to these three components, optionally, it is common, especially with empirical harvest strategies, to include meta-rules that are used to modify the harvest strategy’s behaviour under different circumstances. These metarules are designed to change the normal behaviour of the HS, should a particular threshold be reached, or set of conditions apply, such as number of consecutive years the CPUE above the target.

Strictly, if a change is introduced into any of the details of the three main requirements of a harvest strategy, or the meta-rules if present, that would constitute a different harvest strategy. It is therefore very simple to devise multiple alternative harvest control rule or meta-rule variants for comparison. The objective of making such comparisons is to determine which of the alternatives performs the best (best means it achieves the objectives of the HS most effectively). Sometimes, as often in politics, the choice is limited to the least-worst.

Once again, before going into the details, it is useful to have a real-world example in mind to aid making sense of the theoretical descriptions. To that end, in this chapter, we will develop an example that makes a comparison between four versions of a Tasmanian HS (Haddon & Mundy, 2024b) in which a constant set of reference years are used. This will introduce the processes required to set up and then make comparisons between the results of different scenarios, which will, hopefully, give the user/reader a more intuitive grasp of how to use the suite of R packages that revolve around aMSE. The Tasmanian HS is under constant exploration for ways to make it more effective, however, an unvarying version has been produced for the examples in this guide: EGHS. This contains the constantrefhcr, which uses a fixed set of reference years (defined in hsargs) and the consthcr, a very simple HCR that uses a set of constant aspirational catches for each sau and that ignores any responses of the stock. This is effectively projection with a constant catch and strictly is more a risk assessment than a MSE.

4.1.1 The Example

The example will involve changing which meta-rules are included in the example Tasmanian HS found in EGHS, that is, we need to change components of hsargs. The user should read the documentation for the Tasmanian harvest strategy (at very least read the help page ?EGHS::constantrefhcr and ?EGHS::EGHS, but also the latest Tasmanian abalone assessment and Bradshaw, 2018). The three input arguments, within hsargs, that are to be changed are the metRunder, metRover, and pmwtSwitch values. A description of each of the components within hsargs is provided in the help for the EGHS package. After calling library(EGHS) then one can type ?EGHS in the console and the packages help will be listed, including the componebnts making up the hsargs.

The Tasmanian HS currently uses three performance measures for each sau:

  1. the targCPUE, which is the current standardized cpue relative to a target CPUE,

  2. the grad1, which is the gradient of change in cpue over the previous 12 months, relative to a target gradient of zero,

  3. the grad4, which is the gradient of change in cpue over the past four years, including year-to-date, relative to a target gradient of zero.


The Tasmanian HS is based on Multi-Criteria Decision Analysis principles. A utility function is developed to assign a score from 0 to 10 for each PM, with a score of 5 for the Target value.

There are currently 16 or 17 components in the input hsargs (depending on whether two are used to define a reference period or one vector; and this may change as other meta-rules are considered). The three arguments relating to the current three meta-rules can be turned off by setting them all = 0, or turned on by setting the first two to any number > 0, and the third is set to the number of years after the target CPUE has been achieved that CPUE needs to keep increasing before the alternative, more generous, HCR multipliers are used and the weights attributed to the different performance measures are altered to whatever vector is out into the stablewts argument. There will be four scenarios compared:

  • No meta-rules - named EG from the previous chapter (already saved)
  • only meta-rule 1 & 2 activated - named EGMR12
  • only meta-rule 3 activated - named EGMR3
  • all meta-rules 1 - 3 activated - named EGMRall

4.2 Running the Three Extra Scenarios

As in the previous chapter we will first start with a base-case that uses the current Tasmanian HS but it will have the first two meta-rules activated (if required, see the previous chapter for a description of these steps).

options("show.signif.stars"=FALSE, # some R options that I find can help
        "max.print"=50000,
        "width"=240)
suppressPackageStartupMessages({  # declare libraries -------------
  # this is the minimum, others can be added if desired
  library(aMSE)
  library(EGHS)     # obviously only if using the Tasmanian HS
  library(codeutils) 
  library(hplot)
  library(makehtml)
  library(knitr)
}) 
dropdir <- getDBdir()
prefixdir <- pathtopath(dropdir,"A_codeR/aMSEGuide/runs/")
# we then use the _copyto()_ function to copy the required files from the 
# original example EG from the previous chapter. This is merely to facilitate 
# ensuring that the necessary files are put in the correct places. 
# _copyto()_ fixes the runlabel and datafile names but if changes are made to 
# internal fixed settings, such as to _lambda_ or _M_ then the copied files 
# will still require editing. In these examples we will only be altering the 
# hsargs metRunder, metRover, and pmwtSwitch values so no other changes are
# required.
filelist=c("controlEG.csv","lf_WZ90-20.csv","saudataEG.csv")
aMSE::copyto(prefixdir=prefixdir,fromdir="EG",todir="EGMR12",
             filelist=filelist)


controlEG.csv  has been copied to  EGMR12  as  controlEGMR12.csv 
lf_WZ90-20.csv  has been copied to  EGMR12  as  lf_WZ90-20.csv 
saudataEG.csv  has been copied to  EGMR12  as  saudataEGMR12.csv 
Be sure to change the control, data, and run files where necessary 
[1] "c:/Users/malco/DropBox/A_codeR/aMSEGuide/runs/EGMR12"


Now we can define the rundir for the first scenario where no meta-rules are implemented. In all cases you would, obviously, define your own rundir by defining the prefixdir and postfixdir to suit your own computing environment.


startime <- Sys.time()   # just to document the time taken
#  OBVIOUSLY, modify the rundir definition to suit your own setup!!!
postfixdir <- "EGMR12"  # a name for the rundir, in fact, same as base-case
rundir <- pathtopath(prefixdir,postfixdir)  # define the rundir
verbose <- TRUE
controlfile <- paste0("control",postfixdir,".csv")
outdir <- "C:/aMSE_scenarios/EG/"   # for storing results
# check all is well with the directories
confirmdir(rundir,ask=FALSE)   # automatically make it if it does not exist
c:/Users/malco/DropBox/A_codeR/aMSEGuide/runs/EGMR12  already exists  
confirmdir(outdir,ask=FALSE)   # interactively ask default = TRUE
C:/aMSE_scenarios/EG/  already exists  


One can see that the new rundir (EGMR12) now contains the three files required to run the MSE. It is a good idea to check the controlEGMR12.csv file where you should find the the runlabel and the datafile names have been changed appropriately by the copyto() function. As the change to be made is in the hsargs input then everything is ready to run the MSE, as before. Normally we conduct a run with at least 250 replicates, or perhaps 500, for this example, we will leave the number of replicates, as set in controlEG.csv, at 250, which is generaly sufficient to understand the implications of a given HS. Note also that we have set includeNAS=FALSE to keep the saved outputs relatively compact.

#  set metUnder and metOver = 2, and pmwtSwitch = 0
hsargs <- list(mult=0.1, wid = 4, 
               targqnt = 0.55, maxtarg = c(150,150,150,150,150,150,150,150), 
               pmwts = c(0.65,0.25,0.1),  # relative weights of PMs
               hcr = c(0.25,0.75,0.8,0.85,0.9,1,1.05,1.1,1.15,1.2),
               hcrm3 = c(0.25,0.75,0.8,0.85,0.9,1,1.1,1.2,1.25,1.3), 
               startCE = 2000, endCE = 2019, 
               metRunder = 2, metRover = 2, # set = 2 means metarule 1 and 2  
               decrement=1, pmwtSwitch = 0, # set = 0 means no metarule 3 
               stablewts = c(0.8, 0.15, 0.05), 
               hcrname="constantrefhcr", printmat=NULL)
checkhsargs(hsargs)
The hcr being used is:  constantrefhcr 
meta-rule 2 is being used 
meta-rule 1 is being used 
hsargs$startCE and hsargs$endCE are used to define the reference periods for each sau 
 
out <- do_MSE(rundir,controlfile,hsargs=hsargs,hcrfun=constantrefhcr,  
              sampleCE=tasCPUE,sampleFIS=tasFIS,sampleNaS=tasNaS,
              getdata=tasdata,calcpopC=calcexpectpopC,makeouthcr=makeouthcr,
              fleetdyn=NULL,scoreplot=plotfinalscores,
              plotmultflags=plotmultandflags,interimout="",
              varyrs=7,startyr=38,verbose=TRUE,ndiagprojs=4,cutcatchN=56,
              matureL=c(40,170),wtatL=c(50,200),mincount=120,
              includeNAS = FALSE,depensate=0,kobeRP=c(0.4,0.2,0.15),
              nasInterval=5,minsizecomp=c(100,135),uplimH=0.35,incH=0.005)
All required files appear to be present 
Files read, now making zone 
Now estimating population productivity between H  0.005  and  0.35 
makeequilzone  25.78357 secs 
Conditioning on the Fishery data  
dohistoricC  1.2223 secs 
Conditioning plots completed  1.579889 secs 
Preparing for the projections 
Projection preparation completed  11.06572 secs 
Doing projections 
2021  2022  2023  2024  2025  2026  2027  2028  2029  2030  2031  2032  2033  2034  2035  2036  2037  2038  2039  2040  2041  2042  2043  2044  2045  2046  2047  2048  2049  2050  
All projections finished  1.498603 mins 
Now generating final plots and tables 
Starting the sau related plots 
Finished all sau plots  14.37203 secs 
Starting size-composition plots 
Finished size-composition plots 6.062365 secs 
Plotting fishery information 
hsargs.txt saved to rundir 
plotting HS performance statistics 
plotting Population level dynamics 
All plots and tables completed  15.57507 secs 
makeoutput(out,rundir,postfixdir,controlfile,hsfile="EGHS Package",
           doproject=TRUE,openfile=TRUE,verbose=FALSE)

save(out,file=pathtopath(outdir,paste0(postfixdir,".RData")))


Now we need to repeat this a further two times using EGMR3 and EGMRall, which involves redefining the postfixdir, which in turn, redefines the rundir. Do not forget to change the meta-rule values, else you only repeat the previous analysis! Remember also, if you want the web-sites to open automatically after they have finished you need to set the openfile argument in makeoutput() = TRUE.

# set metUnder and metOver = 0, and pmwtSwitch = 4, include hcr3 vector
postfixdir <- "EGMR3"     # a new name for the rundir 
rundir <- filenametopath(prefixdir,postfixdir)  # define the rundir
controlfile <- paste0("control",postfixdir,".csv")
# check all is well with the directories
confirmdir(rundir,ask=FALSE)   # automatically make it if it does not exist
c:/Users/malco/DropBox/A_codeR/aMSEGuide/runs/EGMR3  already exists  
filelist=c("controlEG.csv","lf_WZ90-20.csv","saudataEG.csv")
copyto(prefixdir=prefixdir,fromdir="EG",todir=postfixdir,filelist=filelist)


controlEG.csv  has been copied to  EGMR3  as  controlEGMR3.csv 
lf_WZ90-20.csv  has been copied to  EGMR3  as  lf_WZ90-20.csv 
saudataEG.csv  has been copied to  EGMR3  as  saudataEGMR3.csv 
Be sure to change the control, data, and run files where necessary 
[1] "c:/Users/malco/DropBox/A_codeR/aMSEGuide/runs/EGMR3"
hsargs <- list(mult=0.1, wid = 4, # mult changed to = 0.05
               targqnt = 0.55, maxtarg = c(150,150,150,150,150,150,150,150), 
               pmwts = c(0.65,0.25,0.1),  # relative weights of PMs
               hcr = c(0.25,0.75,0.8,0.85,0.9,1,1.05,1.1,1.15,1.2), 
               hcrm3 = c(0.25,0.75,0.8,0.85,0.9,1,1.1,1.2,1.25,1.3), 
               startCE = 2000, endCE = 2019, metRunder = 0, metRover = 0,   
               decrement=1, 
               pmwtSwitch = 4, stablewts = c(0.8, 0.15, 0.05), 
               hcrname="constantrefhcr", printmat=NULL)
checkhsargs(hsargs)
The hcr being used is:  constantrefhcr 
meta-rule 3 is being used 
hsargs$startCE and hsargs$endCE are used to define the reference periods for each sau 
 
out <- do_MSE(rundir,controlfile,hsargs=hsargs,hcrfun=constantrefhcr,  
              sampleCE=tasCPUE,sampleFIS=tasFIS,sampleNaS=tasNaS,
              getdata=tasdata,calcpopC=calcexpectpopC,makeouthcr=makeouthcr,
              fleetdyn=NULL,scoreplot=plotfinalscores,
              plotmultflags=plotmultandflags,interimout="",
              varyrs=7,startyr=38,verbose=TRUE,ndiagprojs=4,cutcatchN=56,
              matureL=c(40,170),wtatL=c(50,200),mincount=120,
              includeNAS = FALSE,depensate=0,kobeRP=c(0.4,0.2,0.15),
              nasInterval=5,minsizecomp=c(100,135),uplimH=0.35,incH=0.005)
All required files appear to be present 
Files read, now making zone 
Now estimating population productivity between H  0.005  and  0.35 
makeequilzone  24.15677 secs 
Conditioning on the Fishery data  
dohistoricC  1.175031 secs 
Conditioning plots completed  1.54356 secs 
Preparing for the projections 
Projection preparation completed  10.52267 secs 
Doing projections 
2021  2022  2023  2024  2025  2026  2027  2028  2029  2030  2031  2032  2033  2034  2035  2036  2037  2038  2039  2040  2041  2042  2043  2044  2045  2046  2047  2048  2049  2050  
All projections finished  1.477146 mins 
Now generating final plots and tables 
Starting the sau related plots 
Finished all sau plots  14.55459 secs 
Starting size-composition plots 
Finished size-composition plots 6.066806 secs 
Plotting fishery information 
hsargs.txt saved to rundir 
plotting HS performance statistics 
plotting Population level dynamics 
All plots and tables completed  15.89351 secs 
makeoutput(out,rundir,postfixdir,controlfile,hsfile="EGHS Package",
           doproject=TRUE,openfile=TRUE,verbose=FALSE)

save(out,file=pathtopath(outdir,paste0(postfixdir,".RData")))

And now the final scenario EGMRall, including all three meta-rules:


# set metUnder and metOver = 2, and pmwtSwitch = 4, include hcr3 vector
postfixdir <- "EGMRall"     # a new name for the rundir 
rundir <- filenametopath(prefixdir,postfixdir)  # define the rundir
controlfile <- paste0("control",postfixdir,".csv")
# check all is well with the directories
confirmdir(rundir,ask=FALSE)   # automatically make it if it does not exist
c:/Users/malco/DropBox/A_codeR/aMSEGuide/runs/EGMRall  already exists  
filelist=c("controlEG.csv","lf_WZ90-20.csv","saudataEG.csv")
copyto(prefixdir=prefixdir,fromdir="EG",todir=postfixdir,filelist=filelist)


controlEG.csv  has been copied to  EGMRall  as  controlEGMRall.csv 
lf_WZ90-20.csv  has been copied to  EGMRall  as  lf_WZ90-20.csv 
saudataEG.csv  has been copied to  EGMRall  as  saudataEGMRall.csv 
Be sure to change the control, data, and run files where necessary 
[1] "c:/Users/malco/DropBox/A_codeR/aMSEGuide/runs/EGMRall"
hsargs <- list(mult=0.1, wid = 4, # mult changed to = 0.15
               targqnt = 0.55, maxtarg = c(150,150,150,150,150,150,150,150), 
               pmwts = c(0.65,0.25,0.1),  # relative weights of PMs
               hcr = c(0.25,0.75,0.8,0.85,0.9,1,1.05,1.1,1.15,1.2), 
               hcrm3 = c(0.25,0.75,0.8,0.85,0.9,1,1.1,1.2,1.25,1.3),
               startCE = 2000, endCE = 2019, metRunder = 2, metRover = 2,   
               decrement=1, pmwtSwitch = 4, stablewts = c(0.4, 0.5, 0.1), 
               hcrname="constantrefhcr", printmat=NULL)
checkhsargs(hsargs)
The hcr being used is:  constantrefhcr 
meta-rule 2 is being used 
meta-rule 1 is being used 
meta-rule 3 is being used 
hsargs$startCE and hsargs$endCE are used to define the reference periods for each sau 
 
out <- do_MSE(rundir,controlfile,hsargs=hsargs,hcrfun=constantrefhcr,  
              sampleCE=tasCPUE,sampleFIS=tasFIS,sampleNaS=tasNaS,
              getdata=tasdata,calcpopC=calcexpectpopC,makeouthcr=makeouthcr,
              fleetdyn=NULL,scoreplot=plotfinalscores,
              plotmultflags=plotmultandflags,interimout="",
              varyrs=7,startyr=38,verbose=TRUE,ndiagprojs=4,cutcatchN=56,
              matureL=c(40,170),wtatL=c(50,200),mincount=120,
              includeNAS = FALSE,depensate=0,kobeRP=c(0.4,0.2,0.15),
              nasInterval=5,minsizecomp=c(100,135),uplimH=0.35,incH=0.005)
All required files appear to be present 
Files read, now making zone 
Now estimating population productivity between H  0.005  and  0.35 
makeequilzone  23.75161 secs 
Conditioning on the Fishery data  
dohistoricC  1.164149 secs 
Conditioning plots completed  1.508313 secs 
Preparing for the projections 
Projection preparation completed  10.55444 secs 
Doing projections 
2021  2022  2023  2024  2025  2026  2027  2028  2029  2030  2031  2032  2033  2034  2035  2036  2037  2038  2039  2040  2041  2042  2043  2044  2045  2046  2047  2048  2049  2050  
All projections finished  1.514959 mins 
Now generating final plots and tables 
Starting the sau related plots 
Finished all sau plots  14.55305 secs 
Starting size-composition plots 
Finished size-composition plots 6.047119 secs 
Plotting fishery information 
hsargs.txt saved to rundir 
plotting HS performance statistics 
plotting Population level dynamics 
All plots and tables completed  15.59358 secs 
makeoutput(out,rundir,postfixdir,controlfile,hsfile="EGHS Package",
           doproject=TRUE,openfile=TRUE,verbose=FALSE)

save(out,file=pathtopath(outdir,paste0(postfixdir,".RData")))


Now, in your browser, there should be at least four webpages, each with the standard array of tabs.


An image of the 4 scenarios browser page when runs are finished.
Figure 4.1: A view of a browser with four scenarios run and completed.

4.3 Making Comparisons

While it would be possible to open the same tab in each of the three pages and step between them for a visual comparison that is not conducive to making useful comparisons. Instead, R functions have been generated that make a series of comparisons between the scenarios by first reading in the stored out objects from each MSE run. This involves knowing the outdir that was used and selecting those stored objects that contain the information about each scenario that the user wants to compare. So, assuming that a number of scenarios have already been run (as above), first we set up the required libraries and directories and then list the contents of outdir so an explicit selection can be made. If the user has setup a different way of storing their results then, obviously, a different way of selecting and reading the required scenarios will be required.

4.3.1 Prepare the Analysis

options("show.signif.stars"=FALSE,"stringsAsFactors"=FALSE,
        "max.print"=50000,"width"=240)
suppressPackageStartupMessages({
  library(aMSE)
  library(EGHS)
  library(codeutils)
  library(hplot)
  library(makehtml)
  library(knitr)
})
dropdir <- getDBdir()
prefixdir <- pathtopath(dropdir,"A_codeR/aMSEGuide/runs/")

postfixdir <- "EG_compare"
verbose <- TRUE
rundir <- pathtopath(prefixdir,postfixdir)
outdir <- "C:/aMSE_scenarios/EG/" # obviously define one that suits you
confirmdir(rundir,ask=FALSE)
c:/Users/malco/DropBox/A_codeR/aMSEGuide/runs/EG_compare  already exists  
confirmdir(outdir,ask=FALSE)
C:/aMSE_scenarios/EG/  already exists  
files <- dir(outdir)
printV(files)
           value index
1   BCtest.RData     1
2       EG.RData     2
3   EGMR12.RData     3
4    EGMR3.RData     4
5  EGMRall.RData     5
6 MR4noLML.RData     6
7  testMR4.RData     7


We will compare all four ‘EG’ scenarios, though that will make some of the plots relatively busy.

4.3.2 Make the Comparisons

Currently, in the vector called files there are six scenarios, there could be very many more so a method of selecting which files to use is needed. This is handled by the wrapper function do_comparison() using an argument pickfiles, which is merely a vector of the index of each file wanted in a comparison. In this case, pickfiles=c(1,2,3,4), if there had been two files listed before the three we are interested in it would have been pickfiles=c(3,4,5,6). To understand all the arguments to do_comparisons() see the function’s help. Running the following code will generate a new webpage with multiple tabs (see the help for ?do_comparison). The output from the do_comparison() function is directed into an object, called here, result. The structure of the contents of result are listed in the appendix to this chapter. This is made available so that individuals can develop new plots and comparisons of their own.

pfiles <- grep("EG",files) # or some other way of selecting, even manually.
result <- do_comparison(rundir=rundir,postfixdir=postfixdir,outdir=outdir,
                        files=files,pickfiles=pfiles,verbose=TRUE,
                        intensity=100,zero=FALSE,Q90=TRUE,
                        altscenes=NULL,juris="",
                        ribbonleg="topleft",scencol=c(1,2,3,4))
Loading  EG.RData  which may take time, be patient  
Loading  EGMR12.RData  which may take time, be patient  
Loading  EGMR3.RData  which may take time, be patient  
Loading  EGMRall.RData  which may take time, be patient  

          Base_Case     EGMR12      EGMR3    EGMRall same
reps         250.00     250.00     250.00     250.00    1
randseed 3543304.00 3543304.00 3543304.00 3543304.00    1
sigR           0.35       0.35       0.35       0.35    1
sigB           0.10       0.10       0.10       0.10    1
sigCE          0.10       0.10       0.10       0.10    1
projyrs       30.00      30.00      30.00      30.00    1
numpop        56.00      56.00      56.00      56.00    1
nSAU           8.00       8.00       8.00       8.00    1
Nclass       105.00     105.00     105.00     105.00    1
hyrs          58.00      58.00      58.00      58.00    1
pyrs          30.00      30.00      30.00      30.00    1
larvdisp       0.01       0.01       0.01       0.01    1
initdepl       1.00       1.00       1.00       1.00    1
Now doing the comparisons  
Now doing the HSPM tab 
Now doing the C_vs_MSY tab  
Now doing the Scenario PMs  
Now doing the Zone tab  
Now doing the Catch tab  
Now doing the cpue tab  
Now doing the depletion spawnB tab  
Now doing the depletion exploitB tab  
Now doing the harvestR tab  
Now doing the phaseplots tab  


An image of what the browser page produced by the do_comparison() function.
Figure 4.2: A view of a browser page with the tabs currently produced by the do_comparison() function.


4.3.3 The Different Tabs

Hopefully, by now, it is not unexpected that the Home tab exhibits details relating to the run.

The comparisons begin in the scenes tab, which currently only contains a single table detailing the underlying characteristics of each scenario. This table is a repeat of the table of scenario characteristics printed to the console.

Given the challenge is to recover the stock in each SAU and that should allow the recovery of the fishery, a balance or trade-off is required between the rapidity with which catches are returned to the fishery and the rate at which stock biomass is predicted to recover. As the plots in the Dynamics tab demonstrate, returning catches too rapidly does not allow the biomass to increase as quickly, as evidenced by the predicted CPUE rising then falling rapidly. To approach a more stable and resilient fishery such oscillations are best avoided.

Dynamics tab, where the median and 90th quantiles of the predicted projections for cpue, actual catch, mature biomass, and harvest rate for each scenario are plotted against each other. Few differences occur between scenarios in their CPUE until between 2028 – 2030, depending on which Sau is considered. SAU 13 exhibits the relatively similar trends through time. In all other SAU the no meta-rule (noMR) and meta-rule 3 (MR3) scenarios exhibit a similar oscillatory trend except the noMR has a time-lag to reach the minimum CPUE of about 10-11 years. In all cases in all scenarios (except in SAU13) CPUE remains above 100kg following the period of stock recovery. The MRall appears to achieve a relatively stable CPUE more rapidly than MR12 and does not reach such high levels.

In terms of predicted catches MR3 returns catch to the fishery the fastest but then rapidly reduces it again to become more stable eventually. As with CPUE, noMR follows a similar pattern just 10 years more slowly. MRall leads to somewhat higher stable catches than MR12 and once again appears to find an improved balance between speed of recovery of the fishery and a conservative rturn of catches. These outcomes are reflected in the predicted annual harvest rates as well.

The mature biomass follows approximately the same trajectories in all scenarios until 2028-2030 where they begin to diverge. noMR and MR3 aer both oscillatory with noMR lagging behind the MR3. MR12 and MRall are both more stable in their trajectories with the MR12 scenario ending up with a somewhat higher level of mature biomass in all SAU except SAU13. While that is a positive thing for the stock it implies a somewhat lower final catch.

The Productivity only exhibits a single table, which implies that all scenarios share the same productivity characteristics. If the selected scenarios differed in some factor that influenced productivity (perhaps different natural mortality values) then each different scenario would have its own table of productivity properties by sau.

The Scores tab illustrates the final median harvest strategy scores for each sau and compare them in the plot. But each scenario has a table with the final scores tabulated. These data derive from functions within EGHS and will quite likely require changes when other Harvest Strategies are implemented. Given the harvest control rule implemented in the HS the median target would be a value of six (where values between 5 and 6 imply no change in catch).

The HSPM tab contains tables that, for each sau (and sometimes the whole zone), is gives the median annual average variation in catch (aavc), the sum of the first 5 projection years of catch, and the sum of the first 10 projection years of catch. The variability of catches during the recovery stage is relatively low and it only begins to increase after about 10 years. Even so, this table demonstrates that MR3 tends to be more variable in its catches than the other three scenarios in all SAU. The sum to 5 and sum to 10 years illustrate differences between the scenario with the sum10 reflectig the rapidly return of catches made by MR3 with MRall providing a more rapid return than either noMR or MR12.

The Catches tab contains three plots and a table. The key plots are where the average annual variation of catches is plotted for each scenario x each sau, this is repeated for the sum of catches over the first five years, and then for the first 10 years. The effect on sau12 become apparent once again in each of these plots. The final table contains the boxplot statistics for each comparison and each sau.

The catchBoxPlots is similar to the catches tab but contains boxplots for each sau for each scenario, for the three harvest strategy performance measures: aavc, sum5, and sum10.

The cpueBoxPlots tab contains boxplots for each sau within each scenario of the years taken to achieve the maximum cpue, and for each sau x scenario, the years taken to achieve the median maximum cpue.

The C_vs_MSY tab contains plots for each scenario and sau of the ratio of the predicted catches divided by the predicted MSY for each sau, which is one of the preferred MSE performance measures. In the current example, the trajectory of return to near the MSY might be better illustrated by a new ribbon plot as seen in the zone tab, and this will be implemented.

The ScenarioPMs tab contains a set of histograms of the deviations from a loess fitted, in each scenario, to all replicates across years. The mean and standard deviation of those distributions are tabulated below. This is a different measure of catch variability.

The zone tab contains ribbon plot outlines of each scenario’s 90th quantile bounds for the total zone statistics, overlaid so that areas of overlap and differences become clear. The use of rgb colours allows for transparency so that the degree of overlap can become clear. When too many scenarios are included in a plot this can become confusing.


The zone tab generated by the do_comparison() function. The base-case = EG, no meta-rules.
Figure 4.3: The zone tab generated by the do_comparison() function. The base-case = EG, no meta-rules.


The Catch, cpue, deplsB, depleB, and the harvestR tabs all use the same ribbon plots as in the zone tab except they repeat the information in the Dynamics tab in a manner that makes comparisons simpler for some people.

The Catch tab uses ribbon plots to illustrate the overlap and differences between the scenarios in terms of the combined catch for each sau. The use of semi-transparent colours helps to discern the level of overlap.


The Catch tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.
Figure 4.4: The Catch tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.


The cpue tab uses ribbon plots to illustrate the overlap and differences between the scenarios in terms of the cpue in each sau. Once again, the use of semi-transparent colours helps to discern the level of overlap.


The cpue tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.
Figure 4.5: The cpue tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.

The deplsB tab uses ribbon plots to illustrate the overlap and differences between the scenarios in terms of the mature biomass depletion levels in each sau.


The spawning biomass depletion tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.
Figure 4.6: The spawning biomass depletion tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.


The depleB tab uses ribbon plots to illustrate the overlap and differences between the scenarios in terms of the exploitable biomass depletion levels in each sau. In the example, the differences found in sau12 become very clear. The results here are similar to those exhibited with the spawning biomass depletion, but remain of interest because the exploitable biomass is more closely associated with cpue than the spawning biomass.


The exploitable biomass depletion tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.
Figure 4.7: The exploitable biomass depletion tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.


The harvestR tab makes it very clear that MR3, sustains oscillatory behaviour in terms of harvest rates (and other dynamics) much longer than the other scenarios.


The harvest rate tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.
Figure 4.8: The harvest rate tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.


Finally, the phaseplots tab contains ten plots depicting, for each sau the effect of the different scenarios on the relationships, during the projections, of the following combinations of variable (using the medians in all cases): 1) actual catch/MSY vs exploitable biomass depletion, 2) actual catch/MSY vs mature biomass depletion, 3) actual catch/MSY vs Mature Biomass/Bmsy, 4) actual catch vs exploitable biomass depletion, 5) Actual catches vs mature biomass depletion, 6) Aspirational catch vs mature biomass, 7) Aspirational catch vs Mature Biomass depletion, 8) CPUE vs Actual catches, 9) Annual harvest rate vs actual catches, and 10) Actual catches vs Exploitable biomass.


The harvest rate tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.
Figure 4.9: The harvest rate tab generated by the do_comparison() function for sau12. The base-case = EG, no meta-rules.


4.4 Further Developments

While above the text ended on “Finally, …” the comparison of scenarios is as areas still under active development and further additions continue to be made with different requirements for different jurisdictions. This, along with each jurisdiction’s harvest strategy, is another areas where the needs of the different jurisdictions may differ and require either extra R source files or packages to be developed in each jurisdiction to provide the analyses and plots wanted in each region.

4.5 Appendix Structure of the output from do_comparison()

Here we explore the structure of the outputs from do_comparion() by using the four scenarios comared in this chapter.

The top level components of result are:

str1(result) : List of 7

  • scenes : chr [1:4] “Base_Case” “EGMR12” “EGMR3” “EGMRall”
  • ans :List of 4
  • quantscen:List of 4
  • dyn :List of 4
  • prods :List of 4
  • scenprops: num [1:13, 1:5] 2.50e+02 3.54e+06 3.50e-01 1.00e-01 1.00e-01 …
  • devout :List of 2

The scenes object is, as shown above, a character vector with the names of each scenario

The ans object contains the outputs from each do_MSE() scenario.

str1(result$ans) : List of 4

  • EG :List of 29
  • EGMR12 :List of 29
  • EGMR3 :List of 29
  • EGMRall:List of 29

where each of he scenario lists have the following structure:

str1(result\(ans\)EG) : List of 29

  • tottime : ‘difftime’ num 2.94
  • runtime : POSIXct[1:1], format: “2025-01-07 07:54:54”
  • starttime : POSIXct[1:1], format: “2025-01-07 07:51:58”
  • glb :List of 19
  • ctrl :List of 13
  • zoneCP :List of 56
  • zoneD :List of 14
  • zoneDD :List of 14
  • zoneDP :List of 14
  • NAS : NULL
  • projC :List of 5
  • condC :List of 15
  • sauout :List of 10
  • outzone :List of 13
  • production : num [1:71, 1:6, 1:56] 256 244 233 223 213 …
  • condout :List of 2
  • HSstats :List of 2
  • saudat : num [1:32, 1:8] 21.5 0.3 130 1 54.3 …
  • constants : num [1:33, 1:56] 6 21.5 0.3 130 1 …
  • hsargs :List of 16
  • sauprod : num [1:7, 1:8] 438.882 149.874 20.272 0.341 140.632 …
  • zonesummary :List of 2
  • kobedata : num [1:8, 1:4] 0.33 0.449 0.258 0.242 0.313 …
  • outhcr :List of 8
  • scoremed : num [1:30, 1:7] 42.8 35.3 31.8 31.5 33.4 …
  • popmedcatch :List of 8
  • popmedcpue :List of 8
  • popmeddepleB:List of 8
  • pops : num [1:56, 1:26] 1 2 3 4 5 6 7 8 9 10 …

and would include the numbers-at-size objects is these were saved with NAS=TRUE.

The result$quantscen object and internal structures contain the quantiles for the dynamics of each SAU for the four variables cpue, catch. matureB, and harvestR, with the 0.025, 0.05, 0.5, 0.95, and 0.975 quantiles across the reps replicates, giving the central 95%, and 90% ranges and the median.

str1(result$quantscen) : List of 4

  • cpue :List of 4
  • catch :List of 4
  • matureB :List of 4
  • harvestR:List of 4

str1(result\(quantscen\)cpue) : List of 4

  • Base_Case:List of 8
  • EGMR12 :List of 8
  • EGMR3 :List of 8
  • EGMRall :List of 8

str1(result\(quantscen\)cpue$Base_Case) : List of 8

  • sau6 : num [1:5, 1:30] 97.6 99.9 110.3 121.3 123.1 …
  • sau7 : num [1:5, 1:30] 111 112 124 136 140 …
  • sau8 : num [1:5, 1:30] 149 150 161 174 177 …
  • sau9 : num [1:5, 1:30] 117 119 131 143 148 …
  • sau10: num [1:5, 1:30] 96 97.1 104.5 112.8 114.7 …
  • sau11: num [1:5, 1:30] 89 90.4 97.2 106.6 107.9 …
  • sau12: num [1:5, 1:30] 83.4 85 89.9 95.9 96.9 …
  • sau13: num [1:5, 1:30] 84.7 85.5 89.5 93.7 95.2 …

The structure of the dyn object within result provides all replicates within the dynamics for each SAU. Each of the scenarios is made up of arrays of 88 years including the historic years and the projections, the 8 SAU, and the 250 replicates.

str1(result$dyn) : List of 4

  • EG :List of 10
  • EGMR12 :List of 10
  • EGMR3 :List of 10
  • EGMRall:List of 10

str1(result\(dyn\)EG) : List of 10

  • matureB : num [1:88, 1:8, 1:250] 439 438 436 429 409 …
  • exploitB: num [1:88, 1:8, 1:250] 415 414 413 409 395 …
  • midyexpB: num [1:88, 1:8, 1:250] 0 431 430 428 421 …
  • catch : num [1:88, 1:8, 1:250] 0 1 2 8 22 …
  • acatch : num [1:88, 1:8, 1:250] 0 1 2 8 22 …
  • harvestR: num [1:88, 1:8, 1:250] NaN 0.00232 0.00465 0.0187 0.05228 …
  • cpue : num [1:88, 1:8, 1:250] 0 437 436 432 422 …
  • recruit : num [1:88, 1:8, 1:250] 259139 259078 258961 258478 257088 …
  • deplsB : num [1:88, 1:8, 1:250] 1 0.998 0.994 0.977 0.933 …
  • depleB : num [1:88, 1:8, 1:250] 1 0.999 0.996 0.985 0.953 …

The structure of result$prods object provides the productivity characteristics of each SAU.

str1(result$prods) ; List of 4

  • EG : num [1:8, 1:7] 439 872 524 2439 2072 …
  • EGMR12 : num [1:8, 1:7] 439 872 524 2439 2072 …
  • EGMR3 : num [1:8, 1:7] 439 872 524 2439 2072 …
  • EGMRall: num [1:8, 1:7] 439 872 524 2439 2072 …

result\(prods\)EG

  •          B0      Bmsy       MSY      Dmsy     CEmsy  Hmsy     Bexmsy 
  • sau6 438.8820 149.8744 20.27160 0.3414914 140.63196 0.195 91.32144
  • sau7 872.1711 272.7968 43.73620 0.3127790 115.88669 0.200 191.66429
  • sau8 524.4789 166.0719 24.93913 0.3166417 194.81373 0.175 126.23452
  • sau9 2438.8778 748.3589 122.48502 0.3068456 198.17074 0.180 600.52685
  • sau10 2071.9641 616.6733 102.77587 0.2976274 142.30645 0.170 536.12436
  • sau11 4152.7893 1257.9882 207.63196 0.3029261 140.28520 0.180 1018.44438
  • sau12 3126.2611 951.3633 156.59858 0.3043135 91.10815 0.175 792.96791
  • sau13 915.9109 303.9922 41.73923 0.3319015 75.48181 0.190 193.28620

The result$scenprops object contain the properties of each scenario used to ensure that like is being compared with like. The same colomn identifies any rows which have difference between scenarios.

result$scenprops

  •        Base_Case     EGMR12      EGMR3    EGMRall same 
  • reps 250.00 250.00 250.00 250.00 1
  • randseed 3543304.00 3543304.00 3543304.00 3543304.00 1
  • sigR 0.35 0.35 0.35 0.35 1
  • sigB 0.10 0.10 0.10 0.10 1
  • sigCE 0.10 0.10 0.10 0.10 1
  • projyrs 30.00 30.00 30.00 30.00 1
  • numpop 56.00 56.00 56.00 56.00 1
  • nSAU 8.00 8.00 8.00 8.00 1
  • Nclass 105.00 105.00 105.00 105.00 1
  • hyrs 58.00 58.00 58.00 58.00 1
  • pyrs 30.00 30.00 30.00 30.00 1
  • larvdisp 0.01 0.01 0.01 0.01 1
  • initdepl 1.00 1.00 1.00 1.00 1

The result$devout object contains, for each SAU, the mean deviates from a loess fitted to each catch replicate as well as their standard deviation. This repeats the tables and complements the plots seen in the ScenarioPMs tab in the do_comparions() HTML output. It compares the variability of catches within each SAU across scenarios across the full set of projection years. In the meandevs table below for example, notice in SAU6 how the mean for EGMR3 is more than twice that of the other scenarios.

str1(result$devout) : List of 2

  • meandevs: num [1:4, 1:8] 22.4 16.9 55.2 21.4 51 …
  • sddevs : num [1:4, 1:8] 5.2 4.27 15.61 6.65 13.6 …

result\(devout\)meandevs

  •           sau6     sau7     sau8     sau9     sau10    sau11    sau12     sau13 
  • Base_Case 22.36759 51.00718 27.86222 123.9374 89.31076 211.9045 139.0051 100.81643
  • EGMR12 16.88400 42.09966 23.32073 116.9489 88.71891 196.1574 127.8207 75.98318
  • EGMR3 55.17959 98.20418 75.87913 344.6366 185.62404 519.1445 314.5054 147.18156
  • EGMRall 21.43495 51.51618 32.01075 160.5546 119.10000 265.3326 172.1482 87.70842