[FLR-list] FLCohort

Ernesto Jardim ernesto.jardim at gmail.com
Tue Oct 18 13:10:39 CEST 2011


On Tue, Oct 18, 2011 at 1:03 PM, Laurie <lauriekell at googlemail.com> wrote:

> **
> On 10/18/2011 12:50 PM, ernesto.jardim at jrc.ec.europa.eu wrote:
>
> On 10/18/2011 12:02 PM, Laurie wrote:
>
> On 10/18/2011 11:41 AM, ernesto.jardim at jrc.ec.europa.eu wrote:
>
> On 10/18/2011 11:26 AM, Laurie wrote:
>
> I am working on tagging models, where tags are released for a number of
> years and then recaptured in subsequent years. This allows M & Z to be
> estimated along a cohort.
>
> The data are in the form of number of fish tagged and recovered each year
> of a cohort. This means that you can´t use FLCohort which has age & cohort
> as dims 1&2.
>
> However, if you use the 1st dim for cohort then you can model this with an
> FLQuant, i.e.
>
> library(plyr)
>
> setGeneric("I",              function(object,...)
>     standardGeneric("I"))
> setGeneric('O',              function(object, ...)
>     standardGeneric("O"))
>
> setMethod('I', signature(object='FLQuant'),
>   function(object,...){
>     dmns <-dimnames(object)
>     dmns[[1]]
> <-ac((dims(object)$minyear-dims(object)$max):(dims(object)$maxyear-
> dims(object)$min))
>     names(dmns)[1]<-"quant"
>     flc <-FLQuant(NA,dimnames=dmns)
>
>     t. <-as.data.frame(object)
>     t.$cohort <-t.$year-t.$age
>     flc[]
> <-daply(t.,c("cohort","year","unit","season","area","iter"),function(x)
> sum(x$data))
>
>     return(flc)})
>
> setMethod('O', signature(object='FLQuant'),
>   function(object,...){
>     dmns <-dimnames(object)
>     dmns[[1]]
> <-ac((dims(object)$maxyear-dims(object)$max):(dims(object)$minyear-dims(object)$min))
>     names(dmns)[1]<-"age"
>     flc <-FLQuant(NA,dimnames=dmns)
>
>     t. <-as.data.frame(object)
>     t.$age <-t.$year-t.$quant
>     t. <-t.[!is.na(t.$data),]
>     flc[]
> <-daply(t.,c("age","year","unit","season","area","iter"),function(x)
> sum(x$data))
>
>     return(flc)})
>
> data(ple4)
>
> m1=I(m(ple4))
> m2=O(m1)
>
> It is probably best to derive a new class for this object just to break
> VPAs etc. But what to call it? Also how does it relate to FLCohort.
> Laurie
>
>
> You may change the age in FLCohort
>
> library(FLCore)
> data(ple4)
> flc <- FLCohort(catch.n(ple4))
> quant(flc) <- "year"
>
> why not using year in the first dimension ? it should work out of the box.
>
> EJ
>
>
>  But you don´t get what you want.
>
>
>
> I(m(ple4))[1:10,1:10]An object of class "FLQuant"
> , , unit = unique, season = all, area = unique
>
>       year
> quant  1957 1958 1959 1960 1961 1962 1963 1964 1965 1966
>   1947 0.1   NA   NA   NA   NA   NA   NA   NA   NA   NA
>   1948 0.1  0.1   NA   NA   NA   NA   NA   NA   NA   NA
>   1949 0.1  0.1  0.1   NA   NA   NA   NA   NA   NA   NA
>   1950 0.1  0.1  0.1  0.1   NA   NA   NA   NA   NA   NA
>   1951 0.1  0.1  0.1  0.1  0.1   NA   NA   NA   NA   NA
>   1952 0.1  0.1  0.1  0.1  0.1  0.1   NA   NA   NA   NA
>   1953 0.1  0.1  0.1  0.1  0.1  0.1  0.1   NA   NA   NA
>   1954 0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1   NA   NA
>   1955 0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1   NA
>   1956 0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
>
> units:  NA > FLCohort(m(ple4))[1:10,1:10]An object of class "FLCohort"
> , , unit = unique, season = all, area = unique
>
>     cohort
> age  1947 1948 1949 1950 1951 1952 1953 1954 1955 1956
>   1   NA   NA   NA   NA   NA   NA   NA   NA   NA  0.1
>   2   NA   NA   NA   NA   NA   NA   NA   NA  0.1  0.1
>   3   NA   NA   NA   NA   NA   NA   NA  0.1  0.1  0.1
>   4   NA   NA   NA   NA   NA   NA  0.1  0.1  0.1  0.1
>   5   NA   NA   NA   NA   NA  0.1  0.1  0.1  0.1  0.1
>   6   NA   NA   NA   NA  0.1  0.1  0.1  0.1  0.1  0.1
>   7   NA   NA   NA  0.1  0.1  0.1  0.1  0.1  0.1  0.1
>   8   NA   NA  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
>   9   NA  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1  0.1
>
> laurie
>
>
>
> Lost me. What do you want ?
>
> EJ
>
>
>
>  There are three ways to represent the 1st two dims in an FLQuant.
>
> i) age & year
> ii) age & cohort
> iii) cohort & year
>
> (i) is FLQuant and (ii) is FLCohort; However we do not have (iii) which is
> what I need for my tagging model.
>
> I have created an "FLCohortYear" from an FLQuant by adding I() & O() as
> coercion methods and validity that only allows 1st dim to be called cohort.
> But then we have two FLCohort objects which might conflict.
>
> Laurie
>
>
>
But you can use FLQuant and change the first dimension. You may need a
method to convert i) or ii) into it but shouldn't create any conflicts. If
you really need a new data structure and the problem only affects tag data,
call it FLTag and extend FLQuant.

Best

EJ
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/flr-list/attachments/20111018/97a47e8c/attachment.htm>


More information about the flr-list mailing list