[FLR-list] FLCohort
ernesto.jardim at jrc.ec.europa.eu
ernesto.jardim at jrc.ec.europa.eu
Tue Oct 18 15:07:31 CEST 2011
On 10/18/2011 02:34 PM, Laurie wrote:
> On 10/18/2011 01:34 PM, ernesto.jardim at jrc.ec.europa.eu wrote:
>> 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
>
> Same argument applies to FLQuant! However, the maths is easier in my
> case using sweep & plyr if dims are year & cohort
>
> Laurie
Fine, but we're not changing FLCohort so that you may use plyr. In that
case you should create a new class like you're suggesting and use it.
Best
EJ
--
Ernesto Jardim<ernesto.jardim at jrc.ec.europa.eu>
European Commission -- Joint Research Center
Institute for the Protection and Security of the Citizen (IPSC)
Maritime Affairs Unit FISHREG -- Scientific Support to Fisheries
TP 051, Via Enrico Fermi 2749
I-21027 Ispra (VA), Italy
Office : +39 0332 785311
Fax: +39 0332 789658
http://fishreg.jrc.ec.europa.eu/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/flr-list/attachments/20111018/560c0f29/attachment.htm>
More information about the flr-list
mailing list