Class for stock-recruitment models.

FLSR(model, ...)

# S4 method for ANY
FLSR(model, ...)

# S4 method for missing
FLSR(model, ...)

Details

A series of commonly-used stock-recruitment models are already available, including the corresponding likelihood functions and calculation of initial values. See SRModels for more details and the exact formulation implemented for each of them.

Slots

name

Name of the object (character).

desc

Description of the object (character).

range

Range (numeric).

rec

Recruitment series (FLQuant).

ssb

Index of reproductive potential, e.g. SSB or egg oor egg production (FLQuant).

fitted

Estimated values for rec (FLQuant).

residuals

Residuals obtained from the model fit (FLArray).

covar

Covariates for SR model (FLQuants).

model

Model formula (formula).

gr

Function returning the gradient of the likelihood (function).

logl

Log-likelihood function (function).

initial

Function returning initial parameter values for the optimizer (function).

params

Estimated parameter values (FLPar).

logLik

Value of the log-likelihood (logLik).

vcov

Variance-covariance matrix (array).

details

Extra information on the model fit procedure (list).

logerror

Is the error on a log scale (logical).

distribution

(factor).

hessian

Resulting Hessian matrix from the fit (array).

See also

Author

The FLR Team

Examples


  # Create an empty FLSR object.
  sr1 <- FLSR()

  # Create an  FLSR object using the existing SR models.
  sr2 <- FLSR(model = 'ricker')
  sr2@model
#> rec ~ a * ssb * exp(-b * ssb)
#> <environment: 0x557227629738>
  sr2@initial
#> function(rec, ssb) {
#> 		# The function to provide initial values
#>     res  <-coefficients(lm(log(c(rec)/c(ssb))~c(ssb)))
#>     return(FLPar(a=max(exp(res[1])), b=-max(res[2])))}
#> <bytecode: 0x557227621ee0>
#> <environment: 0x557227629738>
#> attr(,"lower")
#> [1] -Inf -Inf
#> attr(,"upper")
#> [1] Inf Inf
  sr2@logl
#> function(a, b, rec, ssb)
#>       loglAR1(log(rec), log(a*ssb*exp(-b*ssb)))
#> <bytecode: 0x557227620370>
#> <environment: 0x557227629738>

  sr3 <- FLSR(model = 'bevholt')
  sr3@model
#> rec ~ a * ssb/(b + ssb)
#> <environment: 0x557227acabf0>
  sr3@initial
#> function(rec, ssb) {
#>     a <- max(quantile(c(rec), 0.75, na.rm = TRUE))
#>     b <- max(quantile(c(rec)/c(ssb), 0.9, na.rm = TRUE))
#>     return(FLPar(a = a, b = a/b))}
#> <bytecode: 0x557227ac3240>
#> <environment: 0x557227acabf0>
#> attr(,"lower")
#> [1] -Inf -Inf
#> attr(,"upper")
#> [1] Inf Inf
  sr3@logl
#> function(a, b, rec, ssb)
#>       loglAR1(log(rec), log(a*ssb/(b+ssb)))
#> <bytecode: 0x557227abd730>
#> <environment: 0x557227acabf0>

  # Create an FLSR using a function.
  mysr1 <- function(){
    model <- rec ~ a*ssb^b
    return(list(model = model))}

  sr4 <- FLSR(model = mysr1)

  # Create an FLSR using a function and check that it works.
  mysr2 <- function(){
    formula <- rec ~ a+ssb*b

    logl <- function(a, b, sigma, rec, ssb) sum(dnorm(rec,
      a + ssb*b, sqrt(sigma), TRUE))

   initial <- structure(function(rec, ssb) {
      a   <- mean(rec)
      b   <- 1
      sigma <- sqrt(var(rec))

      return(list(a=a, b=b, sigma=sigma))},
        lower = c(0, 1e-04, 1e-04), upper = rep(Inf, 3))

   return(list(model = formula, initial = initial, logl = logl))
  }

  ssb <- FLQuant(runif(10, 10000, 100000))
  rec <- 10000 + 2*ssb + rnorm(10,0,1)
  sr5 <- FLSR(model = mysr2, ssb = ssb, rec = rec)

  sr5.mle <- fmle(sr5)
#>   Nelder-Mead direct search function minimizer
#> function value for initial parameters = 300009.608149
#>   Scaled convergence tolerance is 0.00447049
#> Stepsize computed as 10894.415305
#> BUILD              4 35604233172799.054688 246594.512118
#> LO-REDUCTION       6 8027994845809.416992 246594.512118
#> HI-REDUCTION       8 2039725245416.724609 246594.512118
#> HI-REDUCTION      10 513931463016.055481 246594.512118
#> HI-REDUCTION      12 128892303912.929276 246594.512118
#> HI-REDUCTION      14 32226144724.193943 246594.512118
#> HI-REDUCTION      16 8032781791.753624 246594.512118
#> HI-REDUCTION      18 1993248612.371147 246594.512118
#> HI-REDUCTION      20 490557443.511403 246594.512118
#> HI-REDUCTION      22 118829945.657251 246594.512118
#> HI-REDUCTION      24 27914415.365704 246594.512118
#> HI-REDUCTION      26 6199169.697422 246594.512118
#> HI-REDUCTION      28 1277860.003481 246594.512118
#> HI-REDUCTION      30 419003.785329 246594.512118
#> REFLECTION        32 301368.860949 169563.447589
#> HI-REDUCTION      34 300009.608149 169563.447589
#> LO-REDUCTION      36 246594.512118 154961.674216
#> HI-REDUCTION      38 176793.742088 153601.478392
#> EXTENSION         40 169563.447589 96638.628829
#> LO-REDUCTION      42 154961.674216 96638.628829
#> LO-REDUCTION      44 153601.478392 96638.628829
#> EXTENSION         46 119295.008370 66080.769087
#> EXTENSION         48 115364.613500 56420.892581
#> LO-REDUCTION      50 96638.628829 56420.892581
#> LO-REDUCTION      52 77531.719425 56420.892581
#> EXTENSION         54 66080.769087 37593.887867
#> LO-REDUCTION      56 61167.866773 37593.887867
#> EXTENSION         58 56420.892581 29758.469273
#> REFLECTION        60 38434.634697 19972.061004
#> HI-REDUCTION      62 37593.887867 19972.061004
#> EXTENSION         64 29758.469273 13292.146429
#> EXTENSION         66 27552.362509 2764.858404
#> LO-REDUCTION      68 19972.061004 2764.858404
#> LO-REDUCTION      70 13292.146429 2764.858404
#> REFLECTION        72 8828.272171 147.072099
#> LO-REDUCTION      74 3014.837648 147.072099
#> HI-REDUCTION      76 2764.858404 147.072099
#> HI-REDUCTION      78 584.469211 147.072099
#> HI-REDUCTION      80 499.581626 143.777028
#> HI-REDUCTION      82 461.176536 108.387971
#> LO-REDUCTION      84 164.272917 108.387971
#> HI-REDUCTION      86 147.072099 91.756835
#> HI-REDUCTION      88 143.777028 77.062808
#> HI-REDUCTION      90 108.387971 77.062808
#> LO-REDUCTION      92 91.756835 71.331379
#> HI-REDUCTION      94 80.893401 71.331379
#> HI-REDUCTION      96 77.062808 71.331379
#> HI-REDUCTION      98 74.333977 69.116436
#> LO-REDUCTION     100 71.388240 69.116436
#> LO-REDUCTION     102 71.331379 69.116436
#> HI-REDUCTION     104 70.398595 69.116436
#> LO-REDUCTION     106 69.486916 68.672613
#> HI-REDUCTION     108 69.468860 68.672613
#> LO-REDUCTION     110 69.116436 68.672613
#> LO-REDUCTION     112 68.787389 68.548236
#> HI-REDUCTION     114 68.732991 68.548236
#> HI-REDUCTION     116 68.672613 68.548236
#> LO-REDUCTION     118 68.568859 68.524579
#> REFLECTION       120 68.548520 68.481495
#> HI-REDUCTION     122 68.548236 68.481495
#> LO-REDUCTION     124 68.524579 68.479702
#> HI-REDUCTION     126 68.498588 68.479702
#> REFLECTION       128 68.488963 68.471117
#> LO-REDUCTION     130 68.481495 68.471117
#> EXTENSION        132 68.479702 68.466844
#> LO-REDUCTION     134 68.478520 68.466844
#> Exiting from Nelder Mead minimizer
#>     136 function evaluations used
  sr5.nls <- nls(sr5)

# NS Herring stock-recruitment dataset
data(nsher)

# already fitted with a Ricker SR model
summary(nsher)
#> An object of class "FLSR"
#> 
#> Name:  
#> Description:  
#> Quant: age 
#> Dims:  age 	year	unit	season	area	iter
#> 	1	45	1	1	1	1	
#> 
#> Range:  min	minyear	max	maxyear 
#> 	0	1960	0	2004	
#> 
#> 
#> Model: 	rec ~ a * ssb * exp(-b * ssb)
#>     params
#> iter   a       b
#>    1 119 0.00945
#> Log-likelihood:  15.862(0) 
#> Variance-covariance:    
#>               a            b
#>   a 255.3388181 1.808870e-02
#>   b   0.0180887 1.992659e-06

plot(nsher)


# change model
model(nsher) <- bevholt()

# fit through MLE
nsher <- fmle(nsher)
#>   Nelder-Mead direct search function minimizer
#> function value for initial parameters = -10.336211
#>   Scaled convergence tolerance is 1.54022e-07
#> Stepsize computed as 501.110000
#> BUILD              3 44.842344 -11.603908
#> Warning: NaNs produced
#> HI-REDUCTION       5 31.685209 -11.603908
#> Warning: NaNs produced
#> HI-REDUCTION       7 17.913114 -11.603908
#> Warning: NaNs produced
#> HI-REDUCTION       9 5.415279 -11.603908
#> Warning: NaNs produced
#> HI-REDUCTION      11 -3.412974 -11.603908
#> HI-REDUCTION      13 -8.018030 -11.603908
#> LO-REDUCTION      15 -10.336211 -11.603908
#> LO-REDUCTION      17 -11.081040 -11.603908
#> EXTENSION         19 -11.295930 -12.061705
#> LO-REDUCTION      21 -11.603908 -12.061705
#> REFLECTION        23 -11.813826 -12.087620
#> REFLECTION        25 -12.061705 -12.199591
#> LO-REDUCTION      27 -12.087620 -12.199591
#> LO-REDUCTION      29 -12.158184 -12.199591
#> LO-REDUCTION      31 -12.191726 -12.199591
#> HI-REDUCTION      33 -12.192269 -12.199591
#> HI-REDUCTION      35 -12.197784 -12.199591
#> LO-REDUCTION      37 -12.198015 -12.199591
#> HI-REDUCTION      39 -12.199555 -12.199776
#> REFLECTION        41 -12.199591 -12.200058
#> HI-REDUCTION      43 -12.199776 -12.200092
#> HI-REDUCTION      45 -12.200058 -12.200142
#> HI-REDUCTION      47 -12.200092 -12.200155
#> HI-REDUCTION      49 -12.200142 -12.200160
#> HI-REDUCTION      51 -12.200155 -12.200177
#> HI-REDUCTION      53 -12.200160 -12.200177
#> LO-REDUCTION      55 -12.200171 -12.200179
#> HI-REDUCTION      57 -12.200177 -12.200179
#> HI-REDUCTION      59 -12.200178 -12.200179
#> HI-REDUCTION      61 -12.200179 -12.200179
#> HI-REDUCTION      63 -12.200179 -12.200179
#> HI-REDUCTION      65 -12.200179 -12.200179
#> Exiting from Nelder Mead minimizer
#>     67 function evaluations used

plot(nsher)