Jorge Molinos
2012-Jan-26 19:24 UTC
[R] Calculate a function repeatedly over sections of a ts object
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. Michael Weylandt
2012-Jan-26 21:00 UTC
[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.
R. Michael Weylandt
2012-Jan-30 04:29 UTC
[R] Calculate a function repeatedly over sections of a ts object
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.
Maybe Matching Threads
- Calculating length of consecutive sequences within a vector
- Problem with sapa package and spectral density function (SDF)
- Implementation for selecting lag of a lag window spectral estimator using generalized cross validation (using deviance)
- .Call() function
- parzen-window, tukey window