[R] Calculate a function repeatedly over sections of a ts object

Jorge Molinos JGARCIAM at tcd.ie
Mon Jan 30 18:18:58 CET 2012


Thank you very much Mike. The script is working now.

Jorge




________________________________________
From: R. Michael Weylandt [michael.weylandt at gmail.com]
Sent: 30 January 2012 04:29
To: Jorge Molinos; r-help
Subject: Re: [R] Calculate a function repeatedly over sections of a ts object

Sorry, that last line should read:

FUN=function(z){
  lz <- length(z)
  SDF(z,method="lag window",
window=taper(type="parzen",n.sample=lz,cutoff= 2*sqrt(lz)), npad=2*lz)
}

On Sun, Jan 29, 2012 at 11:29 PM, R. Michael Weylandt
<michael.weylandt at gmail.com> wrote:
> It's customary to keep the list cc'd.
>
> I can't run your code without the data, but it does seem to me that
> your problem is in the FUN argument, as you guess.
>
> You have:
>
> FUN=function(z) SDF(adezoo,method="lag window",
> window=taper(type="parzen",n.sample=n.d,cutoff=(2*sqrt(n.d))),
> npad=2*n.d)
>
> But this function doesn't actually act on it's argument: you tell it
> to accept something called "z" but then it never gets told to do
> anything to "z". Perhaps you meant
>
> FUN=function(z) SDF(z,method="lag window",
> window=taper(type="parzen",n.sample=n.d,cutoff=(2*sqrt(n.d))),
> npad=2*n.d)
>
> I also worry about your use of "n.d"; are you sure you don't want to
> use the length of the rolling window? Something more like:
>
> FUN=function(z){
>   lz <- length(z)
>   SDF(z,method="lag window",
> window=taper(type="parzen",n.sample=lz,cutoff= 2*sqrt(lz)),
> npad=2*nlz)
> }
>
> Does that fix it?
>
> Michael
>
> On Fri, Jan 27, 2012 at 1:06 PM, Jorge Molinos <JGARCIAM at tcd.ie> wrote:
>> Hi Michael,
>>
>> Sorry, I've been trying to use rollapply with my function but it seems I can't get it to work properly. The function seems to be dividing the time series accordingly (every 1) and using the correct length for the time window (10 years) but when I look at the results all of them are the same for all the subseries which doesn't make sense. The problem has to be within the FUN argument though I cannot figure out what it is. Would you mind checking on the code to see if you can spot where is the problem?
>>
>> adets<-ts(adeery$DA,c(adeery$Year[1],adeery$Day[1]),frequency=365)
>>
>> adezoo<-as.zoo(adets)
>>
>> n.d<-length(adets)
>>
>> especlist<-rollapply(adezoo, width=3650, FUN=function(z) SDF(adezoo,method="lag window",
>>    window=taper(type="parzen",n.sample=n.d,cutoff=(2*sqrt(n.d))),
>>    npad=2*n.d), by = 365, align="left")
>>
>>
>> And these are, for example, the SDF values at the last day for each 10-y subseries (all the same though they should be different as I have it verify by doing the SDF step by step using the same values for the arguments within the function):
>>
>>         especlist1.7048
>> 1978(20)    1.998068e-06
>> 1979(20)    1.998068e-06
>> 1980(20)    1.998068e-06
>> 1981(20)    1.998068e-06
>> 1982(20)    1.998068e-06
>> 1983(20)    1.998068e-06
>> 1984(20)    1.998068e-06
>> 1985(20)    1.998068e-06
>> 1986(20)    1.998068e-06
>> 1987(20)    1.998068e-06
>>
>> Thanks a lot.
>>
>> Jorge
>>
>>
>> ________________________________________
>> From: R. Michael Weylandt [michael.weylandt at gmail.com]
>> Sent: 26 January 2012 21:00
>> To: Jorge Molinos
>> Cc: r-help at R-project.org
>> Subject: Re: [R] Calculate a function repeatedly over sections of a ts object
>>
>> I'm not sure if it's easily doable with a ts class, but the rollapply
>> function in the zoo package will do this easily. (Also, I find zoo to
>> be a much more natural time-series workflow than ts so it might make
>> the rest of your life easier as well)
>>
>> Michael
>>
>> On Thu, Jan 26, 2012 at 2:24 PM, Jorge Molinos <JGARCIAM at tcd.ie> wrote:
>>>
>>> Hi,
>>>
>>> I want to apply a function (in my case SDF; package “sapa”) repeatedly over discrete sections of a daily time series object by sliding a time window of constant length (e.g. 10 consecutive years or 1825 days) over the entire ts at increments of 1 time unit (e.g. 1 year or 365 days). So for example, the first SDF would be calculated for the daily values of my variable recorded between years 1 to 5, SDF2 to those for years 2 to 6 and so on until the total length of the series is covered. How can I implement this into a R script? Any help is much appreciated.
>>>
>>> Jorge
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.


More information about the R-help mailing list