gascuel(x, fi1, fi2, initial_values, threshold = 1e-04, maxiter = 2000, age_classes = colnames(x), length_classes = rownames(x), name = "", description = "")
hoenig_heisey(x, fi1, fi2, threshold = 1e-04, maxiter = 2000, age_classes = colnames(x), length_classes = rownames(x), name = "", description = "")
inverse_ALK(x, fi1, fi2, age_classes = colnames(x), length_classes = rownames(x), name = "", description = "")
kimura_chikuni(x, fi1, fi2, threshold = 1e-04, maxiter = 2000, age_classes = colnames(x), length_classes = rownames(x), name = "", description = "")
i
lines
and j
columns, where x[i, j]
is the count
of individuals of length i
and age j
.i
where fi[i]
is the number of fish in the length-class i
on the
population from which x
was sampled.i
where fi[i]
is the number of fish in the length-class i
on a
population with unknown age information.ALKr
object, containing a $i \times j$ matrix
with the probability of an individual of length i
having age j
, i.e. $P(j|i)$, a $i \times j$
matrix with the estimated number of individuals of length
i
and age j
, and information about the method
used to generate the key.
inverseALK
calculates an ALK from a sample of
aged-fish, the length distribution of the sampled
population and the length distribution of a population with
unknown age-length data, as described by Clark (1981),
Bartoo and Parker (1983) and Hilborn and Walters (1992).kimura_chikuni
, hoenig_heisey
and
gascuel
use the same inputs as inverseALK
to
calculate an ALK as described respectively by Kimura and
Chikuni (1987), Hoenig and Heisey (1987) and Gascuel
(1994).
hoenig
employs the generalized method proposed by
Hoenig et al. (1993, 1994), which takes an undefined
number of data sets with known and unknown age information
and combines them to calculate the ALK.
The returned ALKr
object contains information on the
convergence threshold that was used, the number of
iterations ran, and if convergence was reached.
Initial values
The method proposed by Gascuel (1994) is based on the assumption that the length distribution within each age class follows a Normal distribution, where the standard deviation of length at age $\sigma(j)$ is given by a linear model as a function of three parameters $\alpha$, $\beta$ and $\gamma$:
$$\sigma_j = \alpha + \beta\cdot l_j + \gamma\cdot\Delta l_j$$
where $\Deltal(j)$ is the difference
between the mean lengths at age-class j
and
age-class j-1
.
Convergence
The methods proposed by Kimura and Chikuni (1987), Hoenig and Heisey (1987) and Gascuel (1994) are all based on the EM algorithm as defined by Dempster et al. (1997), and build the ALK by a series of iterations which are repeated until convergence is acheived.
The convergence is tested by evaluating the sum of the
absolute differences between the ages distributions
calculated on the previous and current iterations:
sum(abs(pj_prev - pj_curr))
. The algorithm exits
when either this value is smaller than the specified
threshold
or when the number of iterations reaches
maxiter
.
Clark, W.G. (1981). Restricted Least-Squares Estimates of
Age Composition from Length Composition. Canadian
Journal of Fisheries and Aquatic Sciences, 38/3,
297-307. DOI: 10.1139/f81-041
Dempster, A.P., Laird, N.M., Rubin, D.B. (1977). Maximum
Likelihood from Incomplete Data via the EM Algorithm.
Journal of the Royal Statistical Society. Series B
(Methodological), 39/1, 1-38. DOI:
10.2307/2984875
Gascuel, D. (1994). Une methode simple d'ajustement des
cles taille/age: application aux captures d'albacores
(Thunnus albacares) de l'Atlantique Est. Canadian
Journal of Fisheries and Aquatic Sciences, 51/3,
723-733. DOI: 10.1139/f94-072
Hilborn, R., Walters, C.J. (1992). Quantitative fisheries
stock assessment: Choice, dynamics and uncertainty.
Reviews in Fish Biology and Fisheries, 2/2,
177-178. DOI: 10.1007/BF00042883
Hoenig, J.M., Heisey, D.M. (1987), Use of a Log-Linear
Model with the EM Algorithm to Correct Estimates of Stock
Composition and to Convert Length to Age.
Transactions of the American Fisheries Society,
116/2, 232-243. DOI:
10.1577/1548-8659(1987)116<232:uoalmw>2.0.CO;2232:uoalmw>
data(hom)
inverse_ALK(hom$otoliths[[1]], fi1 = hom$F1992, fi2 = hom$F1993)
kimura_chikuni(hom$otoliths[[1]], fi1 = hom$F1992, fi2 = hom$F1993) # converges
kimura_chikuni(hom$otoliths[[1]], fi1 = hom$F1992, fi2 = hom$F1993, maxiter = 10) # won't converge
hoenig_heisey(hom$otoliths[[1]], fi1 = hom$F1992, fi2 = hom$F1993)
gascuel(hom$otoliths[[1]], fi1 = hom$F1992, fi2 = hom$F1993,
initial_values = c(0.1, 0.07, 0.06))
Run the code above in your browser using DataLab