[FLR-list] FLCohort
ernesto.jardim at jrc.ec.europa.eu
ernesto.jardim at jrc.ec.europa.eu
Tue Oct 18 13:34:09 CEST 2011
On 10/18/2011 01:22 PM, Laurie wrote:
> On 10/18/2011 01:10 PM, Ernesto Jardim wrote:
>>
>>
>> On Tue, Oct 18, 2011 at 1:03 PM, Laurie <lauriekell at googlemail.com
>> <mailto:lauriekell at googlemail.com>> wrote:
>>
>> On 10/18/2011 12:50 PM, ernesto.jardim at jrc.ec.europa.eu
>> <mailto: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
>>>> <mailto: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 <http://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 <tel:1948%200.1%20%200.1> NA NA NA NA NA NA NA NA
>>>> 1949 0.1 0.1 <tel:1949%200.1%20%200.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
>>>> 19510.1 0.1 0.1 0.1 0.1 <tel:0.1%20%200.1%20%200.1%20%200.1%20%200.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 NA0.1 0.1 0.1 0.1 0.1 <tel:0.1%20%200.1%20%200.1%20%200.1%20%200.1>
>>>> 6 NA NA NA NA 0.10.1 0.1 0.1 0.1 0.1 <tel:0.1%20%200.1%20%200.1%20%200.1%20%200.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
>>
> I would have called in FLCohort but some body got there 1st!
>
> Having 2 versions of FLCohorts with different properties does raise an
> issue though.
>
> Laurie
Yes, sure ! But you get what you need computing year=cohort+age, so I
don't see the need for a new one.
Best
EJ
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/flr-list/attachments/20111018/61ebd2ef/attachment.htm>
More information about the flr-list
mailing list