Individual Growth – Other VBGF Params
Other VBGF Parameterizations
The von Bertalanffy Growth Function (VBGF) was introduced and methods for fitting the function were illustrated in Chapter 12 of the Introductory Fisheries Analyses with R (IFAR) book. The VBGF used there is from Beverton and Holt (1957) and is called the “Typical” parameterization of the VBGF. The VBGF can be expressed in alternative forms that are called parameterizations. The most common parameterizations of the VBGF may be seen with vbModels()
from FSA
.
Different parameterizations do not fit the data differently. In other words, all parameterizations of the VBGF have the same number of parameters and will produce the same predicted values and fitted model plots. However, different parameterizations have different function parameters that may be of interest to the fisheries scientist for biological reasons or because they have useful statistical properties. For example, the parameterizations of von Bertalanffy (1938) and Mooij et al. (1999) both use L0L0, which is the mean length at time 0 (i.e., at “hatch”). Thus, either of these parameterizations could be used if the L0L0 parameter was of biological interest. In contrast, the parameters in the parameterizations of Schnute (1981) and Francis (1988) are either largely or wholly based on expected values, which are generally less correlated. Thus, if one wants to avoid the problems associated with highly correlated parameters (as discussed in the IFAR book) and is not interested in the parameters of the other parameterizations, then either of these two parameterizations may be used.
The parametarization of Francis (1988) will be fit in this supplement to illustrate fitting other than the “Typical” parameterization used in Chapter 12 of the IFAR book. Other supplements demonstrate how to fit other growth functions and use alternative nonlinear model fitting algorithms.
Required Packages for this Supplement
Functions used in this supplement require the packages shown below.
> library(FSA)
> library(dplyr)
> library(nlstools)
Data Used in this Supplement
The male Black Drum data (view, download, meta-data) used in the IFAR book are also used in this supplement.
> bdmf <- read.csv("BlackDrum2001.csv") %>%
select(-c(spname,day,weight)) %>%
filterD(sex %in% c("male","female"),otoage<50)
> bdm <- filterD(bdmf,sex=="male")
> headtail(bdm)
year agid month tl sex otoage
1 2001 1 4 787.5 male 6
2 2001 2 5 700.0 male 5
3 2001 8 5 1140.0 male 23
72 2001 122 5 1175.0 male 39
73 2001 125 6 590.0 male 4
74 2001 127 6 530.0 male 3
Fitting Other VBGF Parameterizations
Original Parameterization
The parameterization originally proposed by von Bertalanffy (1938) is defined as
where L∞L∞ and KK are as defined for the typical parameterization and L0L0 is the mean length at t=0t=0.
As demonstrated in the IFAR chapter for the “Typical” VBGF, an R function that uses the VBGF to predict length from a given age is needed. This R function may be created by the user, but for the common parameterizations shown in vbModels()
it is easier to use vbFuns()
from FSA
. As a reminder, vbFuns()
requires the name for the parameterization to use in quotes as the first argument. A brief explanation of the parameters is also returned if msg=TRUE
is included in vbFuns()
.
An R function called vbO()
is created for the “original” parameterization below. Note with this function that values for the three parameters may be included as a vector in Ling=
.
> ( vbO <- vbFuns("Original") )
function(t,Linf,L0=NULL,K=NULL) {
if (length(Linf)==3) { L0 <- Linf[[2]]
K <- Linf[[3]]
Linf <- Linf[[1]] }
Linf-(Linf-L0)*exp(-K*t)
}
<environment: 0x03f1e4d0>
Starting values are obtained with vbStarts()
as described in the IFAR chapter.
> ( svO <- vbStarts(tl~otoage,data=bdm,type="Original") )
$Linf
[1] 1192.692
$L0
[1] 88.57503
$K
[1] 0.1924053
The VBGF is fit and parameter estimates with likelihood profile confidence intervals are obtained as described in the IFAR book. Bootstrapped confidence intervals and predictions may also be obtained as described in the IFAR book.
> nlsO <- nls(tl~vbO(otoage,Linf,L0,K),data=bdm,start=svO)
> cbind(Ests=coef(nlsO),confint(nlsO))
Waiting for profiling to be done...
Ests 2.5% 97.5%
Linf 1196.7192108 1177.9880068 1217.3520912
L0 242.1882291 133.1636548 338.4767316
K 0.1418268 0.1214678 0.1649841
> bootO <- nlsBoot(nlsO)
> cbind(Ests=coef(nlsO),confint(bootO))
Ests 95% LCI 95% UCI
Linf 1196.7192108 1180.856750 1215.089792
L0 242.1882291 147.578306 325.960829
K 0.1418268 0.124511 0.161096
> predict(bootO,vbO,t=3)
prediction 95% LCI 95% UCI
572.5216 535.9480 610.3373
Francis Parameterization
The Francis (1988) parameterization is defined as
where
The function parameters are L1L1, L2L2, and L3L3, which represent the mean lengths at ages t1t1, t2t2, and t3t3, respectively, where t1t1 and t3t3 are relatively young and old ages chosen by the user and t2t2 is the average of t1t1 and t3t3.
Similar to above, an R function called vbF()
is created for the “Francis” parameterization below. Note with this function that values for the three parameters may be included as a vector in L1=
and that the youngest and oldest ages may be included as a vector in t1=
.
> ( vbF <- vbFuns("Francis") )
function(t,L1,L2=NULL,L3=NULL,t1,t3=NULL) {
if (length(L1)==3) { L2 <- L1[[2]]; L3 <- L1[[3]]; L1 <- L1[[1]] }
if (length(t1)==2) { t3 <- t1[[2]]; t1 <- t1[[1]] }
r <- (L3-L2)/(L2-L1)
L1+(L3-L1)*((1-r^(2*((t-t1)/(t3-t1))))/(1-r^2))
}
<environment: 0x073c2010>
As stated above, the user must choose values for t1t1 and t3t3. In this example, I have chosen to use the youngest and oldest ages in the data (as found with range()
).
> ( ages <- range(bdm$otoage) )
[1] 3 42
Starting values are obtained with vbStarts()
as described in the IFAR chapter and above. However, with the “Francis” parameterization, the ages that define t1t1 and t3t3 must also be provided in ages2use=
.
> ( svF <- vbStarts(tl~otoage,data=bdm,type="Francis",ages2use=ages) )
$L1
[1] 572.775
$L2
[1] 1139.625
$L3
[1] 1205
The VBGF is fit and parameter estimates with likelihood profile confidence intervals are obtained as described in the IFAR book, with the exception that the vector that defines the youngest and oldest ages must be supplied to vbF()
. Bootstrapped confidence intervals and predictions may also be obtained as described in the IFAR book.
> nlsF <- nls(tl~vbF(otoage,L1,L2,L3,t1=ages),data=bdm,start=svF)
> cbind(Ests=coef(nlsF),confint(nlsF))
Waiting for profiling to be done...
Ests 2.5% 97.5%
L1 572.975 533.2025 612.3236
L2 1157.463 1145.6535 1169.2496
L3 1194.248 1176.6756 1212.7376
> bootF <- nlsBoot(nlsF)
> cbind(Ests=coef(nlsF),confint(bootF))
Ests 95% LCI 95% UCI
L1 572.975 534.7997 613.7465
L2 1157.463 1146.7695 1168.4532
L3 1194.248 1177.5684 1210.2266
> predict(bootF,vbF,t=3,t1=ages)
prediction 95% LCI 95% UCI
573.0725 534.7997 613.7465
Note that the intra-parameter correlations are relatively low for this parameterization. Additionally, the scale of the parameters in the “Francis” parameterization are usually similar. Both of these characteristics may aid model convergence.
> summary(nlsF,correlation=TRUE)
Formula: tl ~ vbF(otoage, L1, L2, L3, t1 = ages)
Parameters:
Estimate Std. Error t value Pr(>|t|)
L1 572.975 19.424 29.5 <2e-16
L2 1157.463 5.910 195.9 <2e-16
L3 1194.248 8.717 137.0 <2e-16
Residual standard error: 45.6 on 71 degrees of freedom
Correlation of Parameter Estimates:
L1 L2
L2 -0.16
L3 0.17 0.65
Number of iterations to convergence: 5
Achieved convergence tolerance: 3.023e-06
Reproducibility Information
- Compiled Date: Sat Feb 13 2016
- Compiled Time: 9:50:14 AM
- R Version: R version 3.2.3 (2015-12-10)
- System: Windows, i386-w64-mingw32/i386 (32-bit)
- Base Packages: base, datasets, graphics, grDevices, methods, stats, utils
- Required Packages: FSA, dplyr, nlstools, captioner, knitr and their dependencies (assertthat, car, DBI, digest, evaluate, formatR, gdata, gplots, graphics, grDevices, highr, Hmisc, lazyeval, magrittr, markdown, methods, plotrix, plyr, R6, Rcpp, sciplot, stats, stringr, tools, utils, yaml)
- Other Packages: captioner_2.2.3, dplyr_0.4.3, extrafont_0.17, FSA_0.8.5, knitr_1.12.3, nlstools_1.0-2
- Loaded-Only Packages: assertthat_0.1, DBI_0.3.1, digest_0.6.9, evaluate_0.8, extrafontdb_1.0, formatR_1.2.1, gdata_2.17.0, gtools_3.5.0, htmltools_0.3, lazyeval_0.1.10, magrittr_1.5, MASS_7.3-45, parallel_3.2.3, plyr_1.8.3, R6_2.1.2, Rcpp_0.12.3, rmarkdown_0.9.2, Rttf2pt1_1.3.3, stringi_1.0-1, stringr_1.0.0, tools_3.2.3, yaml_2.1.13
- Links: Script / RMarkdown
References
Beverton, R. J. H., and S. J. Holt. 1957. On the dynamics of exploited fish populations. Page 533. United Kingdom Ministry of Agriculture; Fisheries.
Francis, R. I. C. C. 1988. Are growth parameters estimated from tagging and age-length data comparable? Canadian Journal of Fisheries and Aquatic Sciences 45:936–942.
Mooij, W. M., J. M. V. Rooij, and S. Wijnhoven. 1999. Analysis and comparison of fish growth from small samples of length-at-age data: Detection of sexual dimorphism in Eurasian Perch as an example. Transactions of the American Fisheries Society 128:483–490.
Schnute, J. 1981. A versatile growth model with statistically stable parameters. Canadian Journal of Fisheries and Aquatic Sciences 38:1128–1140.
von Bertalanffy, L. 1938. A quantitative theory of organic growth (inquiries on growth laws II). Human Biology 10:181–213.