[R] Age-Length key with kimura algorith
Alberto Murta
amurta at ipimar.pt
Wed Aug 29 12:33:42 CEST 2007
Hi Jorge
In fact I have been working with that method. I made a simple R function to
apply it, and I'm sending you the code below. If you have any questions about
it just send me a message.
Cheers
Alberto
On Tuesday 28 August 2007 8:44 pm, Jorge Cornejo Donoso wrote:
> Hi, I’m looking for information to implement the kimura method (kimura &
> Chikuni. 1987. Mixtures of empirical distributions: an interative
> application of the age length key) for calculation of fisheries age-length
> key.
>
> If someone have a manuals, methodology or examples about it I will be
> really gratefull if you could share it.
>
>
>
> Thanks in advance
>
>
>
> Jorge Cornejo Donoso
>
> Biólogo Marino Mención Oceanografía y Calidad Ambiental
>
> Centro Trapananda, Universidad Austral de Chile
>
> Portales 73, Coyhaique, Chile
>
> Fono: +56(67)244520 fax: +56(67)239377
>
>
>
>
> [[alternative HTML version deleted]]
--
Alberto G. Murta
IPIMAR - National Institute of Fisheries and Marine Research
Avenida de Brasilia s/n; 1449-006 - Lisboa; Portugal
Tel: +351 213027000; Fax: +351 21 3015948; email: amurta at ipimar.pt
-------------- next part --------------
## Function to apply the method by Kimura and Chikuni (1987):
## Kimura, D.K. and Chikuni, S. (1987) Mixtures of empirical distributions:
## an iterative application of the age-length key. Biometrics. 43, 23-35.
## 'freq.mat' is a matrix with the number of fish in each length (row) and age (column) class.
## This matrix can be obtained by simple random sampling or length-stratified random sampling.
## 'length.vec1' and 'length.vec2' are vectors with the number of fish in each length-class in population 1
## and population 2, respectively.
iterativeALK <- function(freq.mat, length.vec1, length.vec2, stop.value=0.001){
if(length(length.vec1) != length(length.vec2) || length(length.vec2) != nrow(freq.mat) ||
c(length.vec1, length.vec2, apply(freq.mat, 1, sum)) <= 0){
stop("The number of length-classes must be the same in all data sets and all length-classes
must have been sampled.")
}
nij1.temp <- length.vec1 * freq.mat/apply(freq.mat, 1, sum)
denom <- apply(nij1.temp, 2, sum)
denom[denom==0] <- 1
ialk.temp <- sweep(nij1.temp, 2, denom,"/")
pj2.temp <- rep(1/length(age.class), length(age.class))
criterion <- 10
iterations <- 0
while(criterion > stop.value){
iterations <- iterations + 1
pj2.temp.old <- pj2.temp
denom <- apply(sweep(ialk.temp, 2, pj2.temp, "*"),1, sum)
denom[denom==0] <- 1
alk.temp <- sweep(ialk.temp, 2, pj2.temp, "*")/denom
nij2.temp <- length.vec2 * alk.temp
pj2.temp <- apply(nij2.temp, 2, sum)/sum(nij2.temp)
criterion <- sum(abs(pj2.temp - pj2.temp.old))
}
output <- list("Number of fish in each length and age-class in population 2" = nij2.temp,
"Number of iterations to convergence" = iterations)
return(output)
}
More information about the R-help
mailing list