Chapter 4 The Operating Model

The Operating Model (OM) is the main component of the MSE framework. The OM is used to describe the characterstics of a fishery system and contains all the parameters required to simulate the population and fleet dynamics, the collection of data, and the application of a management procedure (e.g., implement a size regulation, effort control, spatial closure, or catch limit).

4.1 OM Components

An OM is built from four separate components, each containing a set of parameter values for different aspects of the simulation:

  1. Stock - parameters describing the stock dynamics
  2. Fleet - parameters describing the fishing fleet dynamics
  3. Obs (Observation) - parameters describing the observation processes (how the observed fishery data is generated from the simulated data)
  4. Imp (Implementation) - parameters describing the management implemetation (how well the management regulations are implemented)

There are a number of example Stock, Fleet, Obs, and Imp parameter sets built into DLMtool which make it easy to quickly construct an OM and run an MSE.

These parameter sets are referred to as Objects and have an associated Class.

4.1.1 Stock Object

The avail function can be used to examine the available Objects of a particular Class.

For example, to see the available objects of class Stock:

avail('Stock')
##  [1] "Albacore"          "Blue_shark"        "Bluefin_tuna"      "Bluefin_tuna_WAtl" "Butterfish"       
##  [6] "Herring"           "Mackerel"          "Porgy"             "Rockfish"          "Snapper"          
## [11] "Sole"              "Toothfish"

This shows that there are 12 objects of class Stock. We can confirm the class of this object by using the class function. For example, to examine the class of the object Albacore:

class(Albacore)
## [1] "Stock"
## attr(,"package")
## [1] "DLMtool"

As expected, the Albacore object is class Stock.

Let’s take a quick look at the contents of the Albacore Stock object:

slotNames(Albacore)
##  [1] "Name"         "Common_Name"  "Species"      "maxage"       "R0"           "M"            "M2"          
##  [8] "Mexp"         "Msd"          "Mgrad"        "h"            "SRrel"        "Perr"         "AC"          
## [15] "Period"       "Amplitude"    "Linf"         "K"            "t0"           "LenCV"        "Ksd"         
## [22] "Kgrad"        "Linfsd"       "Linfgrad"     "L50"          "L50_95"       "D"            "a"           
## [29] "b"            "Size_area_1"  "Frac_area_1"  "Prob_staying" "Fdisc"        "Source"

The output tells us that there are 34 slots in the Albacore Stock object. Each of these slots contains information relating to stock that is used in the MSE.

We can examine the information that is stored in the slots using the @ symbol. For example, the name of the species in the Stock object is:

Albacore@Name
## [1] "Albacore"

The maximum age parameter is:

Albacore@maxage 
## [1] 15

The values for the natural mortality (M) parameter for this stock are:

Albacore@M
## [1] 0.35 0.45

Note that the natural mortality parameter (M) has two values, while the maximum age (maxage) only has one value.

The MSE in the DLMtool is a stochastic model, and almost all parameters are drawn from a distribution. By default this distribution is assumed to be uniform, and the two values for the M parameter represent the lower and upper bounds of this uniform distribution.

Some parameters, such as maximum age (maxage), species name (Name), or initial recruitment (R0) have only a single value and are fixed in the MSE.

You can see more information on the content of the Stock object by using the help function:

class?Stock

4.1.2 Fleet Object

While the Stock object contains all the information relating to the fish stock that is being modeled, the Fleet object is populated with information relating to the fishing fleet and historical pattern of exploitation.

Like the Stock objects, there are a number of Fleet objects that are built into the DLMtoo:

avail('Fleet')
##  [1] "DecE_Dom"              "DecE_HDom"             "DecE_NDom"             "FlatE_Dom"            
##  [5] "FlatE_HDom"            "FlatE_NDom"            "Generic_DecE"          "Generic_FlatE"        
##  [9] "Generic_Fleet"         "Generic_IncE"          "IncE_HDom"             "IncE_NDom"            
## [13] "Low_Effort_Non_Target" "Target_All_Fish"       "Targeting_Small_Fish"

Here we will look at the Generic_Fleet object.

class(Generic_Fleet)
## [1] "Fleet"
## attr(,"package")
## [1] "DLMtool"
slotNames(Generic_Fleet)
##  [1] "Name"        "nyears"      "Spat_targ"   "EffYears"    "EffLower"    "EffUpper"    "Esd"         "qinc"       
##  [9] "qcv"         "L5"          "LFS"         "Vmaxlen"     "isRel"       "LR5"         "LFR"         "Rmaxlen"    
## [17] "DR"          "SelYears"    "AbsSelYears" "L5Lower"     "L5Upper"     "LFSLower"    "LFSUpper"    "VmaxLower"  
## [25] "VmaxUpper"   "CurrentYr"   "MPA"

There are 27 slots in the Fleet object. The parameters in the Fleet object relate to the exploitation pattern of the stock.

For example, the number of years that the stock has been exploited is specified in the nyears slot:

Generic_Fleet@nyears
## [1] 50

As another example, the smallest length at full selection is specified in the LFS slot:

Generic_Fleet@LFS
## [1] 0.75 1.10

Note that by default the values in the LFS (and the L5 [smallest length at 5% selectivity]) slots are specified as multiples of the length of maturity (e.g., Albacore@L50). This is necessary because the Fleet objects built into the DLMtool are all generic, in the sense that they can be used with any Stock object.

You will notice that the isRel slot in the Generic_Fleet object is set to “TRUE”. This means that the selectivity parameters are relative to the length of maturity in the Stock object. Absolute values for the selectivity parameters can be used, for example by specifying LFS and L5 to, say, 100 - 150 and 50 - 70 respectively. The isRel parameter must then be set to “FALSE”, so that the Operating Model knows that these selectivity values are in absolute terms, and does not multiply them by the length of maturity (strange things may happen if the model assumes that the size of first capture is 50 to 70 times greater than the size of maturity!).

Note that all the parameters in the Fleet object have two values, representing the minimum and maximum bounds of a uniform distribution (with some exceptions that will be discussed in more detail later).

More information on the Fleet object can be found by typing:

class?Fleet

4.1.3 Obs Object

The third component for the Operating Model is the Obs (Observation) object. This object contains all the information relating to how the fishery information is generated inside the model.

Why do we need a Obs object?

Although the MSE may be conditioned on real data and information about the fishery, all data is generated inside the model. Because it is a simulation model and the data was generated by a computer, rather than some unobserved real world process, the fishery data is known perfectly. In the real world, however, all data sources and parameter estimates are subject to some observation error. The degree of uncertainty may vary between different data types, and between fisheries.

The advantage of the MSE process is that the performance of a management procedure using the realistically noisy simulated data can be compared to the performance under conditions of perfect knowledge. This comparison, which unfortunately is never possible in the real world, can reveal important information about the robustness (or sensitivity) of certain methods to variability and error in particular data types. This knowledge can help to prioritize research to reduce uncertainty in the parameters and data sets that are most crucial to the performance of the method.

Like the other two objects, there are a number of built-in Obs objects in the DLMtool.

avail('Obs')
## [1] "Generic_Obs"        "Imprecise_Biased"   "Imprecise_Unbiased" "Perfect_Info"       "Precise_Biased"    
## [6] "Precise_Unbiased"

Let’s take a look at the Imprecise_Unbiased object:

class(Imprecise_Unbiased)
## [1] "Obs"
## attr(,"package")
## [1] "DLMtool"
slotNames(Imprecise_Unbiased)
##  [1] "Name"          "Cobs"          "Cbiascv"       "CAA_nsamp"     "CAA_ESS"       "CAL_nsamp"     "CAL_ESS"      
##  [8] "Iobs"          "Ibiascv"       "Btobs"         "Btbiascv"      "beta"          "LenMbiascv"    "Mbiascv"      
## [15] "Kbiascv"       "t0biascv"      "Linfbiascv"    "LFCbiascv"     "LFSbiascv"     "FMSYbiascv"    "FMSY_Mbiascv" 
## [22] "BMSY_B0biascv" "Irefbiascv"    "Brefbiascv"    "Crefbiascv"    "Dbiascv"       "Dobs"          "hbiascv"      
## [29] "Recbiascv"

There are 29 slots in Obs objects, each with information relating to the uncertainty of a data type.

For example, the LenMbiascv slot defines the bias (coefficient of variability) in the length of maturity:

Imprecise_Biased@LenMbiascv
## [1] 0.2

This means that the assumed length of maturity that is generated by the Operating Model, and used in the simulated application of a management procedure, is not the ‘true’ value set in the Stock object, but a value sampled with a 20% coefficient of variation.

More information on the Obs object can be found by typing:

class?Obs

4.1.4 Imp Object

The final component for the Operating Model is the Imp (Implementation) object. This object contains all the information relating to how the management recommendation is actually implemented in the fishery, i.e., the implementation error. The Imp object includes slots for the over or under catch of TAC, implementation error in total allowable effort, and variability in size regulations.

avail('Imp')
## [1] "Overages"    "Perfect_Imp"
class(Overages)
## [1] "Imp"
## attr(,"package")
## [1] "DLMtool"

More information on the Imp object can be found by typing:

class?Imp

4.2 Plotting OM Components

The OM Components Stock, Fleet, Obs, and Imp can be plotted to visually examine the contents.

For example, to plot a Stock object (note that the figures are not shown here):

plot(Albacore)

To plot a Fleet object you must also provide an object of class Stock, for example:

plot(FlatE_Dom, Albacore)

The Obs and Imp objects can also be plotted:

plot(Generic_Obs)
plot(Overages)

4.3 Building an OM from Component Objects

We will now look at how to combine objects of the four classes into an OM. For now we will work with the OM components that are built into DLMtool. In later sections of the user manual we will cover how to build your own Stock, Fleet, Obs, and Imp objects that characterises your fishery.

Objects of class Stock, Fleet, Obs and Imp are used to create an Operating Model object (class OM). The simplest way to do this is to use new command.

For example, here we are building a OM using the Rockfish Stock object, Generic_Fleet Fleet object, Generic_Obs Obs object, and Perfect_Imp Imp object and assigning it the name myOM:

myOM <- new("OM", Rockfish, Generic_Fleet, Generic_Obs, Perfect_Imp)

What is the class of our newly created objects myOM?

class(myOM)
## [1] "OM"
## attr(,"package")
## [1] "DLMtool"

If you use the slotNames function on the myOM object that was just created, you will see that it contains all of the information from the Stock, Fleet, Obs, and Imp objects:

slotNames(myOM)
##   [1] "Name"          "Agency"        "Region"        "Sponsor"       "Latitude"      "Longitude"     "nsim"         
##   [8] "proyears"      "interval"      "pstar"         "maxF"          "reps"          "cpars"         "seed"         
##  [15] "Source"        "Common_Name"   "Species"       "maxage"        "R0"            "M"             "M2"           
##  [22] "Mexp"          "Msd"           "Mgrad"         "h"             "SRrel"         "Perr"          "AC"           
##  [29] "Period"        "Amplitude"     "Linf"          "K"             "t0"            "LenCV"         "Ksd"          
##  [36] "Kgrad"         "Linfsd"        "Linfgrad"      "L50"           "L50_95"        "D"             "a"            
##  [43] "b"             "Size_area_1"   "Frac_area_1"   "Prob_staying"  "Fdisc"         "nyears"        "Spat_targ"    
##  [50] "EffYears"      "EffLower"      "EffUpper"      "Esd"           "qinc"          "qcv"           "L5"           
##  [57] "LFS"           "Vmaxlen"       "isRel"         "LR5"           "LFR"           "Rmaxlen"       "DR"           
##  [64] "SelYears"      "AbsSelYears"   "L5Lower"       "L5Upper"       "LFSLower"      "LFSUpper"      "VmaxLower"    
##  [71] "VmaxUpper"     "CurrentYr"     "MPA"           "Cobs"          "Cbiascv"       "CAA_nsamp"     "CAA_ESS"      
##  [78] "CAL_nsamp"     "CAL_ESS"       "Iobs"          "Ibiascv"       "Btobs"         "Btbiascv"      "beta"         
##  [85] "LenMbiascv"    "Mbiascv"       "Kbiascv"       "t0biascv"      "Linfbiascv"    "LFCbiascv"     "LFSbiascv"    
##  [92] "FMSYbiascv"    "FMSY_Mbiascv"  "BMSY_B0biascv" "Irefbiascv"    "Brefbiascv"    "Crefbiascv"    "Dbiascv"      
##  [99] "Dobs"          "hbiascv"       "Recbiascv"     "TACFrac"       "TACSD"         "TAEFrac"       "TAESD"        
## [106] "SizeLimFrac"   "SizeLimSD"

You can access individual slots in the OM object using the @ symbol and confirm that these values are the same as those in the Stock object used to create the OM:

Rockfish@M
## [1] 0.04 0.08
myOM@M
## [1] 0.04 0.08

In addition to the information from the Stock, Fleet, Obs, and Imp objects, the OM object also contains other values relating to the MSE, including the number of simulations to run (nsim), the number of projection years (proyears), and the management interval (interval):

myOM@nsim 
## [1] 48
myOM@proyears
## [1] 50
myOM@interval
## [1] 4

These slots all have default values that can be modified easily, for example:

myOM@proyears <- 60

Remember, you can access the help information for objects by typing ? followed by the class name, for example:

class?OM

In later chapters we will cover a range of methods to build new Stock, Fleet, Obs, and Imp objects and constructing OMs that characterise your fishery.

4.4 Visualizing an OM

The newly created OM object myOM contains all the parameters that will be used to simulate our fishery, both the historical conditions and the future projections. The OM can visualized with the plot function (plots not shown here):

plot(myOM)