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 \(L_{0}\), which is the mean length at time 0 (i.e., at “hatch”). Thus, either of these parameterizations could be used if the \(L_{0}\) 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

\[ E[L|t] = L_{\infty} - (L_{\infty}-L_{0})e^{-Kt} \]

where \(L_{\infty}\) and \(K\) are as defined for the typical parameterization and \(L_{0}\) is the mean length at \(t=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

\[ E[L|t] = L_{1} + (L_{3}-L_{1})\frac{1-r^{2\frac{t-t_{1}}{t_{3}-t_{1}}}}{1-r^{2}} \]

where

\[ r=\frac{L_{3}-L_{2}}{L_{2}-L_{1}} \]

The function parameters are \(L_{1}\), \(L_{2}\), and \(L_{3}\), which represent the mean lengths at ages \(t_{1}\), \(t_{2}\), and \(t_{3}\), respectively, where \(t_{1}\) and \(t_{3}\) are relatively young and old ages chosen by the user and \(t_{2}\) is the average of \(t_{1}\) and \(t_{3}\).

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 \(t_{1}\) and \(t_{3}\). 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 \(t_{1}\) and \(t_{3}\) 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.