[FLR-list] FLCohort

Laurie lauriekell at googlemail.com
Tue Oct 18 13:03:31 CEST 2011


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



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


More information about the flr-list mailing list