You are on page 1of 21

shR Vignette - Von Bertalany Growth Model - Extra

Dr. Derek Ogle, Northland College March 2, 2013

XXX THIS IS A WORK IN PROGRESS XXX The von Bertalany growth model (VBGM) was introduced in a separate vignette. This vignette builds on the previous vignette but contains some extensions from the more traditional use of the VBGM. The functions required to perform growth analyses in R are contained in the packages loaded below, > library(FSA) > library(FSAdata) > library(nlstools)

1
1.1

Methods for Tag-Recapture Data


Fabens (1965)

In tag-recapture data the length at two times in the shs life is known, the amount of time between those two periods is known, but the age of the sh at those times is not known. Fabens (1965) provided a modication of the traditional VBGM (see Appendix 6.1) for the derivation) that can be used to estimate L and K (but not t0 ) with this type of data. As with the traditional VBGM there are many parameterizations of Fabens modied model. The two most popular parameterizations appear to be, Lr = Lm + (L Lm ) 1 eKt and Lr Lm = (L Lm ) 1 eKt (2) (1)

where Lm is the length of the sh at the time of marking (tm ), Lr is the length of the sh at the time of recapture (tr ), t is the time-at-large (i.e., tr tm )), and the other parameters are as dened previously (but see Francis (1988)). Model (1) is preferred over (2) for tting because the left-hand-side contains only the response variable. Note also that this is a two-parameter (L and K ) model. Fabens method requires the length-at-marking, length-at-recapture, and the length of time between marking and recapture. As an example of this method, Baker et al. (1991) recorded these three variables for rainbow trout from the Kenai River. These data are loaded and viewed with, > data(RBTroutKenai) > str(RBTroutKenai)

'data.frame': 102 obs. of 3 variables: $ Lr: int 249 272 279 295 305 312 320 324 330 334 ... $ Lm: int 239 259 244 281 300 241 218 234 321 245 ... $ dt: num 0.175 0.06 0.211 0.093 0.06 ...
> view(RBTroutKenai) Lr Lm dt 13 345 269 0.824

22 34 51 67 72

365 384 408 437 448

238 297 310 323 448

1.087 0.887 1.060 1.246 0.090

Fabens model is a non-linear model; therefore, initial values of L and K must be supplied to nls(). Graphical procedures for nding initial values have not been developed for Fabens model. However, a simple starting value for L is the maximum length in the data frame, > max(RBTroutKenai$Lr) [1] 731 A reasonable starting value for K can be found with, r ) log (L m) log (L tr tm

Kinit =

which is made more robust by averaging across all sh in the sample, > with(RBTroutKenai,mean((log(Lr)-log(Lm))/dt)) [1] 0.2447 These initial values are then entered into a list as shown for the traditional VBGM. For example, > Fabens.sv <- list(Linf=730,K=0.25) The model is declared with > fvb <- vbFuns("Fabens") and t and summarized with > FVB1 <- nls(Lr ~ fvb(Lm,dt,Linf,K),start=Fabens.sv,data=RBTroutKenai) > summary(FVB1,correlation=TRUE) Formula: Lr ~ fvb(Lm, dt, Linf, K) Parameters: Estimate Std. Error t value Pr(>|t|) Linf 552.2012 20.3894 27.1 < 2e-16 K 0.4677 0.0584 8.0 2.2e-12 Residual standard error: 35.2 on 100 degrees of freedom Correlation of Parameter Estimates: Linf K -0.84 Number of iterations to convergence: 11 Achieved convergence tolerance: 6.28e-06

The second version using length increments can be t by rst constructing the length increments, > RBTroutKenai$dL <- RBTroutKenai$Lr-RBTroutKenai$Lm and then tting the model, > fvb2 <- vbFuns("Fabens2") > FVB2 <- nls(dL ~ fvb2(Lm,dt,Linf,K),start=Fabens.sv,data=RBTroutKenai) > summary(FVB2,correlation=TRUE) Formula: dL ~ fvb2(Lm, dt, Linf, K) Parameters: Estimate Std. Error t value Pr(>|t|) Linf 552.2012 20.3894 27.1 < 2e-16 K 0.4677 0.0584 8.0 2.2e-12 Residual standard error: 35.2 on 100 degrees of freedom Correlation of Parameter Estimates: Linf K -0.84 Number of iterations to convergence: 11 Achieved convergence tolerance: 6.27e-06 Fabens model has been criticized or modied by many authors (see following sections).

Wang(1998)

Wang et al. (1995) noted that Fabens method assumes that each sh follows the same growth curve and does not take into account individual growth variability and further noted that this characteristic caused Fabens method to produce biased and inconsistent parameter estimates. Wang (1998) provided a solution to this problem. Specically, he dened the model m Lm Lr Lm = l + Lm L 1 eKt

where l is the mean L over the recapture population and is a new parameter that XXXX. Wang (1998) proposed a slightly modied model of Lr Lm = (a + bLm ) 1 eKt The rst model is t with, > > > > wvb <- vbFuns("Wang") Wang.sv <- list(Linf=730,K=0.25,b=0) WVB1 <- nls(dL ~ wvb(Lm,dt,Linf,K,b),start=Wang.sv,data=RBTroutKenai) summary(WVB1,correlation=TRUE)

Formula: dL ~ wvb(Lm, dt, Linf, K, b)

Parameters: Estimate Std. Error t value Pr(>|t|) Linf 458.587 14.349 32.0 <2e-16 K 1.713 0.660 2.6 0.011 b 0.664 0.064 10.4 <2e-16 Residual standard error: 30.9 on 99 degrees of freedom Correlation of Parameter Estimates: Linf K K -0.95 b -0.67 0.73 Number of iterations to convergence: 8 Achieved convergence tolerance: 3.89e-06 The second model is t with, > > > > wvb2 <- vbFuns("Wang2") Wang2.sv <- list(K=0.25,a=200,d=1) WVB2 <- nls(dL ~ wvb2(Lm,dt,K,a,d),start=Wang2.sv,data=RBTroutKenai) summary(WVB2,correlation=TRUE)

Formula: dL ~ wvb2(Lm, dt, K, a, d) Parameters: Estimate Std. Error t value Pr(>|t|) K 1.713 0.660 2.60 0.011 a 213.910 34.898 6.13 1.8e-08 d -0.336 0.064 -5.24 9.1e-07 Residual standard error: 30.9 on 99 degrees of freedom Correlation of Parameter Estimates: K a a -0.88 d 0.73 -0.95 Number of iterations to convergence: 8 Achieved convergence tolerance: 3.23e-06 XXX I have not yet been able to verify these calculations XXX

2.1

Francis(1988)

Francis (1988) noted that L and K do not have the same meanings in Fabens and the traditional VBGM. In addition, he noted the very high correlation between these two parameters in Fabens model. To address these issues he suggested the following parameterization,
g g (g g )Lm

Lr = Lm +

1 1+

g g

where g and g are parameters that represent the mean growth rate at the arbitrary ages and . XXX MORE HERE XXX

2.2

Baker et al. (1991)

Finally, Baker et al. (1991) provide modications of Fabens method that produce analogues to Schnutes four-parameter growth model. XXX MORE HERE XXX

3
3.1

Modeling Seasonal Growth Oscillations


Background

Numerous models to describe the seasonal growth of organisms have been proposed. Nearly all these models are a modication of the traditional VBGM that allows for seasonal oscillations in length within each growth year. The model originally proposed by Hoenig and Hanumara in an unpublished report (Hoenig and Hanumara 1990; Pauly et al. 1992), but most often cited from its description in Somers (1988), is highly popular. Following other authors (e.g. Pauly (1988)), this model will be referred to as Somers model throughout this vignette. Pitcher and MacDonald (1973) and Pauly and Gaschutz (1979) modied the traditional VBGM to incorporate seasonal growth oscillations by including a sine function with a period of one year. However, Somers (1988) showed that these modications produced a model that only fullled the denition of t0 (i.e., when t = t0 , L = 0) under a very strict circumstance (i.e., the seasonal oscillations began at t = t0 ). Thus, Somers (1988) proposed the following formula for modeling seasonal growth that rectied this situation1 : E [L|t] = L 1 eK (tt0 )S (t)+S (t0 ) with CK sin(2 (t ts )) 2 (3)

S (t) =

where E [L|t] is the expected or average length at time (or age) t; C modulates the amplitude of the growth oscillations and corresponds to the proportion of decrease in growth at the depth of the oscillation (i.e., winter); ts is the time between time 0 and the start of the convex portion of the rst sinusoidal growth oscillation, and L , K , and t0 are as dened above. This model has two more parameters then the traditional VBGM. These parameters warrant further discussion. If C = 0, then there is no seasonal oscillation and the model reduces to the traditional VBGM (Figure 1). If C = 1, then growth completely stops once a year at the winter-point (W P ; Figure 1). Values of 0C 1 result in reduced, but not stopped, growth during the winter (Figure 1). Values of C 1 (or 0) allow seasonal decreases in average length-at-age, and might not seem realistic in organisms whose skeletons largely preclude shrinkage (Pauly et al. 1992), but could result from size-dependent overwinter mortality. The ts is harder to visualize because it is the very start of a convex oscillation on a curve (the traditional von Bertalanfy growth model) that is is already convex (Figure 2). Thus, many authors refer to the winter point, where growth is slowest and is the bottom of the seasonal oscillation (Figure 2). The winter point is half-way between the starts of two consecutive seasonal oscillations; thus, W P = ts + 0.5 (Figure 2). If interest is fully in W P and not ts , then the model of Somers (1988) can be modied by substituting ts = W P 0.5 into St , or E [L|t] = L 1 eK (tt0 )R(t)+R(t0 ) with CK sin(2 (t W P + 0.5)) 2 (4)

R(t) =

1 Note the warning expressed in Garcia-Berthou et al. (2012) about assuring that the correct formula for this equation is used in all analyses.

Length

10

20

30

40

C=0 C=1 C=0.25 C=0.5

0.0 0.5 1.0 1.5 2.0 2.5 3.0 Age (years)

Figure 1. Hypothetical growth trajectories from age -0.1 to 3 for Somers model using L =50, K =0.7, t0 =0, ts =0.2, and various values of C .

t0

ts

WP

Length

0 0.0

10

20

30

40

0.5

1.0

1.5

2.0

2.5

3.0

Age (years)

Figure 2. Hypothetical growth trajectory from age -0.1 to 3 for Somers model using L =50, K =0.7, t0 =0.1, ts =0.2, and C = 0. Vertical dotted lines are placed at t0 , ts , and W P =ts + 0.5 and a horizontal dotted line at Lt = 0 to aid understanding.

3.2

Fitting Models in R

Fitting Somers model will be illustrated with length-at-age data for Chilean anchoveta (Engraulis ringens ) extracted approximately from Figure 9 in Cubillos et al. (2001). The data are loaded and their structured is viewed with > data(AnchovetaChile) > str(AnchovetaChile)

'data.frame': 207 obs. of 3 variables: $ age.mon: int 42 44 51 52 53 42 43 44 45 46 ... $ tl.cm : num 17.1 18 18 18.2 18.3 ... $ cohort : int 1987 1987 1987 1987 1987 1988 1988 1988 1988 1988 ...
> view(AnchovetaChile) 102 108 146 151 183 186 age.mon 28 35 15 26 41 10 tl.cm cohort 15.56 1993 16.19 1993 10.50 1995 12.91 1995 16.65 1996 10.74 1997

The age is recorded in months. A new variable of age in years is created with > AnchovetaChile$age.yrs <- AnchovetaChile$age.mon/12 As with the traditional VBGM, Somers model requires starting values for each parameter. Starting values for L , K , and t0 can be obtained as described in the vignette for the VBGM. The range of possible values for both ts and C is from 0 to 1. Starting values near 0.5 for ts and nearer to 1 for C are likely adequate for most species. Starting values can be found with vbStarts using a formula of the form length~age as the rst argument, the data frame where the two variables are found in the data= argument, and type="Somers". Starting values for the Chilean anchoveta are found with > svbso <- vbStarts(tl.cm~age.yrs,data=AnchovetaChile,type="Somers") > unlist(svbso) # unlist used for display purposes only Linf 24.27855 K t0 0.02256 -0.55775 C 0.90000 ts 0.10000

Ths Somers model is a more complicated formula than the traditional VBGM function. Thus, the simplest way to enter the Somers model function is to use vbFuns() with "Somers" as the only argument. For example, > ( vbso <- vbFuns("Somers") ) function (t, Linf, K, t0, C, ts) { if (length(Linf) > 1) { K <- Linf[2] t0 <- Linf[3] C <- Linf[4] ts <- Linf[5] Linf <- Linf[1] } St <- (C * K)/(2 * pi) * sin(2 * pi * (t - ts)) Sto <- (C * K)/(2 * pi) * sin(2 * pi * (t0 - ts))

Linf * (1 - exp(-K * (t - t0) - St + Sto)) } <environment: 0x0e182ebc> The starting values and model function are then used with nls() to nd the best t model. The results of nls() must be saved to an object. That object is then submitted to overview() from the nlstools package to extract model parameters and other summary information. For example, > vbso1 <- nls(tl.cm~vbso(age.yrs,Linf,K,t0,C,ts),data=AnchovetaChile,start=svbso) > overview(vbso1) -----Formula: tl.cm ~ vbso(age.yrs, Linf, K, t0, C, ts) Parameters: Estimate Std. Error t value Pr(>|t|) Linf 21.9591 1.0055 21.84 < 2e-16 K 0.3673 0.0426 8.63 1.8e-15 t0 -0.6044 0.0561 -10.77 < 2e-16 C 0.9549 0.1573 6.07 6.2e-09 ts 0.2898 0.0261 11.09 < 2e-16 Residual standard error: 0.862 on 202 degrees of freedom Number of iterations to convergence: 18 Achieved convergence tolerance: 6.19e-06 -----Residual sum of squares: 150 -----Asymptotic confidence interval: 2.5% 97.5% Linf 19.9765 23.9418 K 0.2834 0.4512 t0 -0.7150 -0.4937 C 0.6448 1.2651 ts 0.2383 0.3413 -----Correlation matrix: Linf K t0 C ts Linf 1.00000 -0.97997 -0.8089 -0.05828 0.06224 K -0.97997 1.00000 0.8914 0.03324 -0.07673 t0 -0.80891 0.89137 1.0000 -0.17804 0.10822 C -0.05828 0.03324 -0.1780 1.00000 0.01997 ts 0.06224 -0.07673 0.1082 0.01997 1.00000 A tted line plot (Figure 3) can be obtained (manually) with > plot(tl.cm~age.yrs,data=AnchovetaChile,pch=19,xlab="Age (years)",ylab="Total Length (cm)") > curve(vbso(x,coef(vbso1)),from=0,to=5,col="red",lwd=2,add=TRUE) The modied version of Somers model used to estimate the winter point directly can be t very similarly as shown with (note use of "Somers2" and W P in the model function) 9

Total Length (cm)

10

12

14

16

18

Age (years)
Figure 3. Fitted line plot from the seasonally oscillating VBGM t to the Chilean anchoveta data.

> svbso2 <- vbStarts(tl.cm~age.yrs,data=AnchovetaChile,type="Somers2") > unlist(svbso2) # unlist used for display purposes only Linf K t0 C WP 24.27855 0.02256 -0.55775 0.90000 0.90000 > ( vbso2 <- vbFuns("Somers2") ) function (t, Linf, K, t0, C, WP) { if (length(Linf) > 1) { K <- Linf[2] t0 <- Linf[3] C <- Linf[4] WP <- Linf[5] Linf <- Linf[1] } Rt <- (C * K)/(2 * pi) * sin(2 * pi * (t - WP + 0.5)) Rto <- (C * K)/(2 * pi) * sin(2 * pi * (t0 - WP + 0.5)) Linf * (1 - exp(-K * (t - t0) - Rt + Rto)) } <environment: 0x080f1e5c> > vbso2 <- nls(tl.cm~vbso2(age.yrs,Linf,K,t0,C,WP),data=AnchovetaChile,start=svbso2) > overview(vbso2) -----Formula: tl.cm ~ vbso2(age.yrs, Linf, K, t0, C, WP) Parameters: Estimate Std. Error t value Pr(>|t|) Linf 21.9592 1.0055 21.84 < 2e-16 K 0.3673 0.0426 8.63 1.8e-15 t0 -0.6044 0.0561 -10.77 < 2e-16 C 0.9549 0.1573 6.07 6.2e-09 WP 0.7898 0.0261 30.24 < 2e-16

10

Residual standard error: 0.862 on 202 degrees of freedom Number of iterations to convergence: 19 Achieved convergence tolerance: 7.67e-06 -----Residual sum of squares: 150 -----Asymptotic confidence interval: 2.5% 97.5% Linf 19.9765 23.9419 K 0.2834 0.4512 t0 -0.7150 -0.4937 C 0.6448 1.2651 WP 0.7383 0.8413 -----Correlation matrix: Linf K t0 C WP Linf 1.00000 -0.97997 -0.8089 -0.05828 0.06224 K -0.97997 1.00000 0.8914 0.03324 -0.07673 t0 -0.80891 0.89138 1.0000 -0.17804 0.10823 C -0.05828 0.03324 -0.1780 1.00000 0.01997 WP 0.06224 -0.07673 0.1082 0.01997 1.00000

11

Double von Bertalany

Vaughan and Helser (1990) introduced and Porch et al. (2002) explored the so-called double VBGM that allows the tting of one Beverton-Holt VBGM to sh less than some critical age (tc ) and a dierent Beverton-Holt VBGM to sh greater than that critical age. The model is parameterized as follows, L 1 eK1 (tt1 ) L 1 eK2 (tt2 ) if t < tc if t tc

E [L|t] =

(5)

where L, t, and L are as dened previously, K1 and K2 are Brody growth rate coecients for the two groups, t1 and t2 are the ages when the average size is zero for each group, and K2 t2 K1 t1 K2 K1

tc =

This model is dicult to t because it is essentially a piecewise model where the critical point of switching between the two pieces depends on parameters in the model. Thus, the model eectively contains an if statement. Fitting this form of model is dicult with nls() because nls() depends on derivatives of the function, which cannot be taken with an if component to the model. Fortunately, other algorithms in R specically, optim() can be used to nd the minimum of a function without requiring the calculation of derivatives. Unfortunately, optim() requires a manual setup of the function to be minimized. The process of using optim() to t a VBGM is illustrated below, rst by using optim() to t the typical VBGM and then showing how to use it for tting the double VBGM. Before showing these methods, note that hypothetical data that follows a the double VBGM with L =40, K1 =0.412, K2 =0.114, t1 =0.053, t2 =8.41 parameters, resulting in , tc =3.291, was created and stored in the df data frame. A view of these data is shown below2 . > view(df) 539 791 1599 2458 2666 2764 len age 29.25 3 29.39 4 33.99 9 35.50 20 38.64 28 38.86 35

The traditional Beverton-Holt VBGM is t to these data with nls()3 > > > > svbs <- list(Linf=40,K=0.20,to=0) mdl <- len~Linf*(1-exp(-K*(age-to))) fit.nls <- nls(mdl,data=df,start=svbs) ( c.nls <- coef(fit.nls) ) K to 0.3620 -0.2949

Linf 37.3569

Then, for comparative purposes, the same model is t to the same data using optim(). To use optim(), a function must rst be created that returns the predicted lengths from the model given a current set of parameters (i.e., these parameters will change during the iterations required for tting the model) and the observed ages. Such a function is shown below where the rst argument is a vector of parameter values4 and the second argument is vector of the observed ages.
algorithm for creating these data can be seen by examining the R code script found in last section of this vignette. that the starting values were found graphically with growthModelSim("vbTypical",len age,data=df). 4 Note that this function is hard-wired such that the rst parameter must be L , the second must be K , and the third must be t0 .
3 Note 2 The

12

> sVonB <- function(params,age) { Linf <- params[1]; K <- params[2]; to <- params[3] Linf*(1-exp(-K*(age-to))) } The optim() function also requires a function that computes the residual sum-of-squares between the observed lengths and the predicted lengths. Such a function is shown below where the rst argument is again the vector of parameter estimates and the second and third arguments are the vectors of observed lengths and ages, respectively. Note how this function uses the function previously constructed to nd predicted lengths. > sRSS <- function(params,len,age) { sum((len-sVonB(params,age))^2) } Finally, optim() can be run by including the initial parameter guesses in the rst argument, the RSS function that should be minimized as the second argument, the vectors of observed lengths and ages as the third and fourth arguments, and two arguments (hessian=TRUE and method="BFGS") that control how the optim() routine will behave). The results should be assigned to an object as illustrated below. > fit.o <- optim(svbs,sRSS,len=df$len,age=df$age,hessian=TRUE,method="BFGS") The estimated parameters are extracted from the par portion of the object returned by optim() as follows

> fit.o$par Linf 37.3568 K to 0.3620 -0.2948

From this, it is evident that the parameter estimates are slightly, but imperceptibly, dierent between the optim() and nls() results (Figure 4). Using a similar process the double VBGM can t be t to the hypothetical data using optim(). So that the value of tc can be easily computed later it is useful to rst construct a function to compute tc . The function below performs this calculation using only a vector of parameter values as an argument5 . > tc <- function(params) { K1 <- params[2]; t1 <- params[3]; K2 <- params[4]; t2 <- params[5] (K2*t2-K1*t1)/(K2-K1) } The function to constructed predicted lengths from double VBGM equation is then constructed as shown below. In this function, note the use of ifelse() to calculate the two pieces of the double VBGM. > dVonB <- function(params,age) { Linf <- params[1]; K1 <- params[2]; t1 <- params[3]; K2 <- params[4]; t2 <- params[5] ifelse(age<tc(params),Linf*(1-exp(-K1*(age-t1))), Linf*(1-exp(-K2*(age-t2)))) } The function to compute the sum of squared residuals is a simple modication of the previously used function, i.e.,
5 Note

that this function is hard-wired such that the parameter values must be in the order of L , K1 , K1 , t1 , and t2 .

13

> dRSS <- function(params,len,age) { sum((len-dVonB(params,age))^2) } Finally, optim() is used as described previously and shown below6 The nal model t is shown in (Figure 4). > dvbs <- c(37,0.36,-0.3,0.26,-3.3) > fit.d <- optim(dvbs,dRSS,len=df$len,age=df$age,hessian=TRUE,method="BFGS") > fit.d$par [1] 39.77765 [1] 3.333 0.40651 0.02995 0.12306 -7.57933 > tc(fit.d$par)

6 Note

that there is not an automatic way to construct the starting values.

14

Total Length (mm)

20

30

40

single, nls single, optim double 0 10 20 30 40

10

Age (years; jittered)


Figure 4. Example of the t of a double VBGM, (5), t to RANDOM data.

15

Model of Porch et al. (2002)

WORKING ON THIS > > > > > > > > > > > > > > > > > > > > > > > > > > > > df$age1 <- df$age + runif(length(df$age),0.3,07)

beta1 <- function(params,age) { K1 <- params[4]; lambda1 <- params[5]; to <- params[3] K1/lambda1*(exp(-lambda1*age)-exp(-lambda1*to)) }

beta2 <- function(params,age) { K1 <- params[4]; lambda1 <- params[5]; to <- params[3] K2 <- params[6]; lambda2 <- params[7]; ts <- params[8] (K2/(4*pi^2+lambda2^2))*(exp(-lambda2*age)*(2*pi*cos(2*pi*(ts-age))-lambda2*sin(2*pi*(ts-age)))-e } porchVB <- function(params,age) { Linf <- params[1]; K0 <- params[2]; to <- params[3] Linf*(1-exp(beta1(params,age)+beta2(params,age)-K0*(age-to))) } porchRSS <- function(params,age,len) { sum((len-porchVB(params,age))^2) } pvbs <- c(43.4,0.0475,0.443,0.695,0.476,0.301,0.344,0.439) fit.p <- optim(pvbs,porchRSS,len=df$len,age=df$age1,hessian=TRUE,method="BFGS") fit.p$par pred.p <- porchVB(fit.p$par,p.ages) plot(len~age1,data=df,xlab="Age (years)",ylab="Total Length (mm)",pch=".") lines(p.ages,pred.p,col="blue",lwd=2,lty=1)

16

References
Baker, T., R. Laerty, and T. Q. II. 1991. A general growth model for mark-recapture data. Fisheries Research 11:257281. 1, 5 Cubillos, L., D. Arcos, D. Bucarey, and M. Canales. 2001. Seasonal growth of small pelagic sh o Talcahuano, Chile (37o S, 73o W): A consequence of their reproductive strategy to seasonal upwelling? Aquatic Living Resources 14:115124. 8 Fabens, A. 1965. Properties and tting of the von Bertalany growth curve. Growth 29:265289. 1 Francis, R. 1988. Are growth parameters estimated from tagging and age-length data comparable? Canadian Journal of Fisheries and Aquatic Sciences 45:936942. 1, 4 Garcia-Berthou, E., G. Carmona-Catot, R. Merciai, and D. H. Ogle. 2012. A technical note on seasonal growth models. Reviews in Fish Biology and Fisheries 22:635640. 6 Hoenig, N. and R. Hanumara. 1990. An empirical comparison of seasonal growth models. Fishbyte 8:3234. 6 Pauly, D. 1988. Beyond our original horizons: The tropicalization of Beverton and Holt. Reviews in Fish Biology and Fisheries 8:307334. 6 Pauly, D. and G. Gaschutz. 1979. A simple method for tting oscillating length growth data, with a program for pocket calculators, ices c.m. I.C.E.S. CM . Demersal Fish Comittee 1979/6:24:126. 6 Pauly, D., M. Soriano-Bartz, J. Moreau, and A. Jarre-Teichmann. 1992. A new model accounting for seasonal cessation of growth in shes. Marine and Freshwater Research 43:11511156. 6 Pitcher, T. and P. MacDonald. 1973. Two models for seasonal growth in shes. Journal of Applied Ecology 10:599606. 6 Porch, C. E., C. A. Wilson, and D. L. Nieland. 2002. A new growth model for red drum (Sciaenops ocellatus ) that accomodates seasonal and ontogenic changes in growth rates. Fisheries Bulletin 100:149152. 12 Somers, I. F. 1988. On a seasonally oscillating growth function. Fishbyte 6(1):811. 6 Vaughan, D. S. and T. E. Helser. 1990. Status of the red drum stock of the atlantic coast: stock assessment report for 1989. NOAA Technical Memorandum NMFS-SEFC-263, U.S. Department of Commerce. 12 Wang, Y.-G. 1998. An improved Fabens method for estimation of growth parameters in the von Bertalany model with individual asymptotes. Canadian Journal of Fisheries and Aquatic Sciences 55:397400. 3 Wang, Y.-G., M. Thomas, and I. Somers. 1995. A maximum likelihood approach for estimating growth from tag-recapture data. Canadian Journal of Fisheries and Aquatic Sciences 52:252259. 3

17

6
6.1

Appendix
Derivation of Fabens (1965) Increment Model

First Version Dene the length at time of marking (tm ) as Lm = L 1 eK (tm t0 ) which is immediately rewritten as,

Lm = 1 eK (tm t0 ) L Lm 1 = eK (tm t0 ) L Lm 1 = eK (tm t0 ) L L Lm = eK (tm t0 ) L Similarly, the length at time of recapture (tr ) is Lr = L 1 eK (tr t0 ) and dene t as time-at-large such that tr = tm + t Substitute (8) into (7) for tr and simplify, (8) (7) (6)

Lr = L 1 eK (tm +tt0 ) Lr = L 1 eK (tm t0 ) eKt and now substitute in the last expression in (6) and simplify to get,

Lr = L 1

L Lm Kt e L

Lr = L (L Lm ) eKt Some authors will further modify this (note the addition of Lm Lm ) to get,

Lr = Lm + L Lm (L Lm ) eKt Lr = Lm + (L Lm ) (L Lm ) eKt Lr = Lm + (L Lm ) 1 eKt 18

Finally, other authors will present this model as a change in length, Lr Lm = (L Lm ) 1 eKt

Second Version Alternatively, one can start the derivation by thinking of the increment in lengths

Lr Lm = L 1 eK (tm +tt0 ) L 1 eK (tm t0 ) Lr Lm = L L eK (tm +tt0 ) L + L eK (tm t0 ) Lr Lm = L eK (tm t0 ) L eK (tm +tt0 ) Lr Lm = L eK (tm t0 ) 1 eKt Now, note that Lm L = L eK (tm t0 ) or, more usefully, L Lm = L eK (tm t0 ) which can be substituted into the above to get Lr Lm = (L Lm ) 1 eKt

6.2

More Algebra Related to the Fabens (1965) Model

Understanding how the Fabens model works is sometimes dicult to visualize. However, some algebra on the increment model may help in this regard. Begin with, Lr Lm = (L Lm ) 1 eKt which is easily modied to Lr Lm = 1 eKt L Lm and then to L Lr = eKt L Lm

(9)

which shows that Fabens model examines the relative distances of Lr and Lm from L and models that ratio as an exponential decay model. This can be explored with hypothetical data. The predicted lengths at six ages were computed supposing that L =400, K =0.5, and t0 =0. All combinations of two of these lengths were then taken as a mark and recapture pair, such that the time-at-large was computed as the dierence in ages and the growth increment was computed as the dierence in predicted lengths. The results are shown in Table 1 and Figure 5. Thus, for example if the time-at-large (t) is small (near zero) then the length-at-marking and the lengthat-recapture should be approximately equal and both the LHS and the RHS of (9) will be approximately equal to 1. However, as the time-at-large increases the RHS will be smaller and Lr will be closer to L than Lm making the LHS also smaller.

19

Table 1. Results of several scenarious computed for hypothetical mark-recaptrue data from hypothetical von Bertalany data. L Lr Scenario Ager Agem t Lr Lm L L Lm 1 1.3 1.0 0.3 191.2 157.4 33.8 0.861 2 2.0 1.0 1.0 252.8 157.4 95.5 0.607 3 5.0 1.0 4.0 367.2 157.4 209.8 0.135 4 13.5 1.0 12.5 399.5 157.4 242.1 0.002 5 14.0 1.0 13.0 399.6 157.4 242.2 0.002 6 2.0 1.3 0.7 252.8 191.2 61.7 0.705 7 5.0 1.3 3.7 367.2 191.2 176.0 0.157 8 13.5 1.3 12.2 399.5 191.2 208.3 0.002 9 14.0 1.3 12.7 399.6 191.2 208.5 0.002 10 5.0 2.0 3.0 367.2 252.8 114.3 0.223 11 13.5 2.0 11.5 399.5 252.8 146.7 0.003 12 14.0 2.0 12.0 399.6 252.8 146.8 0.002 13 13.5 5.0 8.5 399.5 367.2 32.4 0.014 14 14.0 5.0 9.0 399.6 367.2 32.5 0.011 15 14.0 13.5 0.5 399.6 399.5 0.1 0.779

0.8

1 15 6

0 1

1 15 62 10 73

0.6

log('LHS Ratio')

'LHS Ratio'

0.4

13 14

10 73 13 14 11 12 84 95

0.2

0.0

11 12 84 95

10 12 14

6 0

10 12 14

Timeatlarge

Timeatlarge

Figure 5. Plots of the ratio (LEFT) and log ratio (RIGHT) on the LHS of (9) versus time-at-large (t) for data from a hypothetical von Bertalany growth model. The numbers correspond to the scenario shown in Table 1.

20

Reproducibility Information
Version Information
Compiled Date: Sat Mar 02 2013 Compiled Time: 6:54:44 PM Code Execution Time: 3.52 s

R Information

R Version: R version 2.15.2 (2012-10-26) System: Windows, i386-w64-mingw32/i386 (32-bit) Base Packages: base, datasets, graphics, grDevices, methods, stats, tcltk, utils Other Packages: FSA 0.3.4, FSAdata 0.1.3, gdata 2.12.0, knitr 0.9, nlstools 0.0-14, plyr 1.8, reshape 0.8.4, xtable 1.7-0 Loaded-Only Packages: car 2.0-16, cluster 1.14.3, digest 0.6.3, evaluate 0.4.3, formatR 0.7, gplots 2.11.0, grid 2.15.2, gtools 2.7.0, Hmisc 3.10-1, lattice 0.20-13, multcomp 1.2-16, nlme 3.1-108, plotrix 3.4-6, quantreg 4.94, relax 1.3.12, sciplot 1.1-0, SparseM 0.96, stringr 0.6.2, TeachingDemos 2.9, tools 2.15.2 Required Packages: FSA, FSAdata, nlstools and their dependencies (car, gdata, gplots, Hmisc, knitr, multcomp, nlme, plotrix, quantreg, relax, reshape, sciplot, stats, tcltk, TeachingDemos)

21