Learn R Programming

FSA (version 0.9.5)

vbStarts: Find reasonable starting values for a von Bertalanffy growth function.

Description

Finds reasonable starting values for the parameters in a specific parameterization of the von Bertalanffy growth function.

Usage

vbStarts(
  formula,
  data = NULL,
  param = c("Typical", "typical", "Traditional", "traditional", "BevertonHolt",
    "Original", "original", "vonBertalanffy", "GQ", "GallucciQuinn", "Mooij", "Weisberg",
    "Ogle", "Schnute", "Francis", "Somers", "Somers2", "Pauly"),
  type = param,
  fixed = NULL,
  meth0 = c("yngAge", "poly"),
  methLinf = c("Walford", "oldAge", "longFish"),
  num4Linf = 1,
  ages2use = NULL,
  methEV = c("means", "poly"),
  valOgle = NULL,
  plot = FALSE,
  col.mdl = "gray70",
  lwd.mdl = 3,
  lty.mdl = 1,
  cex.main = 0.9,
  col.main = "red",
  dynamicPlot = FALSE,
  ...
)

Value

A list that contains reasonable starting values. Note that the parameters will be listed in the same order and with the same names as listed in vbFuns.

Arguments

formula

A formula of the form len~age.

data

A data frame that contains the variables in formula.

type, param

A string that indicates the parameterization of the von Bertalanffy model.

fixed

A named list that contains user-defined rather than automatically generated (i.e., fixed) starting values for one or more parameters. See details.

meth0

A string that indicates how the t0 and L0 parameters should be derived. See details.

methLinf

A string that indicates how Linf should be derived. See details.

num4Linf

A single numeric that indicates how many of the longest fish (if methLinf="longFish") or how any of the oldest ages (if methLinf="oldAge") should be averaged to estimate a starting value for Linf.

ages2use

A numerical vector of the two ages to be used in the Schnute or Francis parameterizations. See details.

methEV

A string that indicates how the lengths of the two ages in the Schnute parameterization or the three ages in the Francis parameterization should be derived. See details.

valOgle

A single named numeric that is the set Lr or tr value for use in type="Ogle". See details.

plot

A logical that indicates whether a plot of the data with the superimposed model fit at the starting values should be created.

col.mdl

A color for the model when plot=TRUE.

lwd.mdl

A line width for the model when plot=TRUE.

lty.mdl

A line type for the model when plot=TRUE.

cex.main

A character expansion value for the main title when plot=TRUE.

col.main

A color for the main title when plot=TRUE.

dynamicPlot

DEPRECATED.

...

Further arguments passed to the methods.

IFAR Chapter

12-Individual Growth.

Author

Derek H. Ogle, DerekOgle51@gmail.com

Details

This function attempts to find reasonable starting values for a variety of parameterizations of the von Bertalanffy growth function. There is no guarantee that these starting values are the ‘best’ starting values. One should use them with caution and should perform sensitivity analyses to determine the impact of different starting values on the final model results.

If methLinf="Walford", then the Linf and K parameters are estimated via the concept of the Ford-Walford plot. If methLinf="oldAge" then Linf is estimated as the mean length of the num4Linf longest observed lengths.

The product of the starting values for Linf and K is used as a starting value for omega in the GallucciQuinn and Mooij parameterizations. The result of log(2) divided by the starting value for K is used as the starting value for t50 in the Weisberg parameterization.

If meth0="yngAge", then a starting value for t0 or L0 is found by algebraically solving the typical or original parameterization, respectively, for t0 or L0 using the mean length of the first age with more than one data point as a “known” quantity. If meth0="poly" then a second-degree polynomial model is fit to the mean length-at-age data. The t0 starting value is set equal to the root of the polynomial that is closest to zero. The L0 starting value is set equal to the mean length at age-0 predicted from the polynomial function.

Starting values for the L1 and L3 parameters in the Schnute parameterization and the L1, L2, and L3 parameters in the Francis parameterization may be found in two ways. If methEV="poly", then the starting values are the predicted length-at-age from a second-degree polynomial fit to the mean lengths-at-age data. If methEV="means" then the observed sample means at the corresponding ages are used. In the case where one of the supplied ages is fractional, then the value returned will be linearly interpolated between the mean lengths of the two closest ages. The ages to be used for L1 and L3 in the Schnute and Francis parameterizations are supplied as a numeric vector of length 2 in ages2use=. If ages2use=NULL then the minimum and maximum observed ages will be used. In the Francis method, L2 will correspond to the age half-way between the two ages in ages2use=. A warning will be given if L2<L1 for the Schnute method or if L2<L1 or L3<L2 for the Francis method.

Starting values for the Somers and Pauly parameterizations are the same as the traditional parameterization for Linf, K, and t0. However, for the Pauly parameterization the starting value for Kpr is the starting value for K divided by 1 minus the starting value of NGT. The starting values of C, ts, WP, and NGT are set at constants that are unlikely to work for all species. Thus, the user should use the fixed argument to fix starting values for these parameters that are more likely to result in a reliable fit.

References

Ogle, D.H. 2016. Introductory Fisheries Analyses with R. Chapman & Hall/CRC, Boca Raton, FL.

See references in vbFuns.

See Also

See growthFunShow to display the equations for the parameterizations used in FSA and vbFuns for functions that represent the von Bertalanffy parameterizations. See nlsTracePlot for help troubleshooting nonlinear models that don't converge.

Examples

Run this code
## Simple examples of each parameterization
vbStarts(tl~age,data=SpotVA1)
vbStarts(tl~age,data=SpotVA1,type="Original")
vbStarts(tl~age,data=SpotVA1,type="GQ")
vbStarts(tl~age,data=SpotVA1,type="Mooij")
vbStarts(tl~age,data=SpotVA1,type="Weisberg")
vbStarts(tl~age,data=SpotVA1,type="Francis",ages2use=c(0,5))
vbStarts(tl~age,data=SpotVA1,type="Schnute",ages2use=c(0,5))
vbStarts(tl~age,data=SpotVA1,type="Somers")
vbStarts(tl~age,data=SpotVA1,type="Somers2")
vbStarts(tl~age,data=SpotVA1,type="Pauly")
vbStarts(tl~age,data=SpotVA1,type="Ogle",valOgle=c(tr=0))
vbStarts(tl~age,data=SpotVA1,type="Ogle",valOgle=c(Lr=8))

## Using a different method to find Linf
vbStarts(tl~age,data=SpotVA1,methLinf="oldAge")
vbStarts(tl~age,data=SpotVA1,methLinf="oldAge",num4Linf=2)
vbStarts(tl~age,data=SpotVA1,methLinf="longFish")
vbStarts(tl~age,data=SpotVA1,methLinf="longFish",num4Linf=10)
vbStarts(tl~age,data=SpotVA1,type="Original",methLinf="oldAge")
vbStarts(tl~age,data=SpotVA1,type="Original",methLinf="oldAge",num4Linf=2)
vbStarts(tl~age,data=SpotVA1,type="Original",methLinf="longFish")
vbStarts(tl~age,data=SpotVA1,type="Original",methLinf="longFish",num4Linf=10)
vbStarts(tl~age,data=SpotVA1,type="Ogle",valOgle=c(tr=0),methLinf="oldAge",num4Linf=2)
vbStarts(tl~age,data=SpotVA1,type="Ogle",valOgle=c(Lr=8),methLinf="longFish",num4Linf=10)

## Using a different method to find t0 and L0
vbStarts(tl~age,data=SpotVA1,meth0="yngAge")
vbStarts(tl~age,data=SpotVA1,type="original",meth0="yngAge")

## Using a different method to find the L1, L2, and L3
vbStarts(tl~age,data=SpotVA1,type="Francis",ages2use=c(0,5),methEV="means")
vbStarts(tl~age,data=SpotVA1,type="Schnute",ages2use=c(0,5),methEV="means")

## Examples with a Plot
vbStarts(tl~age,data=SpotVA1,plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="original",plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="GQ",plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Mooij",plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Weisberg",plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Francis",ages2use=c(0,5),plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Schnute",ages2use=c(0,5),plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Somers",plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Somers2",plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Pauly",plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Ogle",valOgle=c(tr=0),plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Ogle",valOgle=c(Lr=8),plot=TRUE)

## Examples where some parameters are fixed by the user
vbStarts(tl~age,data=SpotVA1,fixed=list(Linf=15))
vbStarts(tl~age,data=SpotVA1,fixed=list(Linf=15,K=0.3))
vbStarts(tl~age,data=SpotVA1,fixed=list(Linf=15,K=0.3,t0=-1))
vbStarts(tl~age,data=SpotVA1,fixed=list(Linf=15,K=0.3,t0=-1),plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Pauly",fixed=list(t0=-1.5),plot=TRUE)
vbStarts(tl~age,data=SpotVA1,type="Ogle",valOgle=c(tr=2),fixed=list(Lr=10),plot=TRUE)

## See examples in vbFuns() for use of vbStarts() when fitting Von B models

Run the code above in your browser using DataLab