Bill, Josh, and Bert, Thanks for your responses. I still can't quite get this when I use actual dates. Here's an example of what is going wrong: X=as.data.frame(1:6000) X[2]=seq.POSIXt(ISOdate(2015,11,1),by='hour',length.out=6000) X[3]=sample(100,size=6000,replace=T) Y=xts(X[,3],order.by=X[,2]) decompose(Y) Z=ts(X[,2],frequency=24*365) plot(decompose(Z)) When I specify an actual date/time (rather than just a number as Bill posited), it does not like anything short of a year. This seems like I'm overlooking something obvious, but I can't get this for the life of me... Thanks for your time, r On Wed, Mar 30, 2016 at 1:03 PM, William Dunlap <wdunlap at tibco.com> wrote:> You said you specified frequency=96 when you constructed the time > series, but when I do that the decomposition looks reasonable: > > > time <- seq(0,9,by=1/96) # 15-minute intervals, assuming time unit is day > > measurement <- sqrt(time) + 1/(1.2+sin(time*2*pi)) + > rnorm(length(time),0,.3) > > plot(decompose(ts(measurement, frequency=96))) > > How is your code different from the above? > > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > On Wed, Mar 30, 2016 at 8:03 AM, Ryan Utz <utz.ryan at gmail.com> wrote: > >> Hello, >> >> I have a time series that represents data sampled every 15-minutes. The >> data currently run from November through February, 8623 total readings. >> There are definitely daily periodic trends and non-stationary long-term >> trends. I would love to decompose this using basic time series analysis. >> >> However, every time I attempt decomposition, I get the >> >> Error in decompose( ) : time series has no or less than 2 periods >> >> Is it only possible to do basic time-series analysis if you have a year or >> more worth of data? That seems absurd to me, since there is definite >> periodicity and the data are a time series. I have tried every manner of >> specifying frequency= with no luck (96 does not work). All manner of >> searching for help has turned up fruitless. >> >> Can I only do this after I wait another year or two? >> >> Thanks, >> Ryan >> >> -- >> >> Ryan Utz, Ph.D. >> Assistant professor of water resources >> *chatham**UNIVERSITY* >> Home/Cell: (724) 272-7769 >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. >> > >-- Ryan Utz, Ph.D. Assistant professor of water resources *chatham**UNIVERSITY* Home/Cell: (724) 272-7769 [[alternative HTML version deleted]]
decompose wants frequency(Y) to be more than 1 - it really wants an integer frequency so it can return a vector of that length containing the repeating pattern (the "figure"). frequency(Y) is 1/3600 so you get the error (which might be better worded): > plot(decompose(Y)) Error in decompose(Y) : time series has no or less than 2 periods > frequency(Y) [1] 0.0002777778 Use a ts object and make the frequency relative to the period of interest (e.g., 24 for hourly data if you are interested in the daily pattern). Bill Dunlap TIBCO Software wdunlap tibco.com On Wed, Mar 30, 2016 at 5:37 PM, Ryan Utz <utz.ryan at gmail.com> wrote:> Bill, Josh, and Bert, > > Thanks for your responses. I still can't quite get this when I use actual > dates. Here's an example of what is going wrong: > > X=as.data.frame(1:6000) > X[2]=seq.POSIXt(ISOdate(2015,11,1),by='hour',length.out=6000) > X[3]=sample(100,size=6000,replace=T) > > Y=xts(X[,3],order.by=X[,2]) > decompose(Y) > > Z=ts(X[,2],frequency=24*365) > plot(decompose(Z)) > > When I specify an actual date/time (rather than just a number as Bill > posited), it does not like anything short of a year. This seems like I'm > overlooking something obvious, but I can't get this for the life of me... > > Thanks for your time, > r > > > On Wed, Mar 30, 2016 at 1:03 PM, William Dunlap <wdunlap at tibco.com> wrote: > >> You said you specified frequency=96 when you constructed the time >> series, but when I do that the decomposition looks reasonable: >> >> > time <- seq(0,9,by=1/96) # 15-minute intervals, assuming time unit is >> day >> > measurement <- sqrt(time) + 1/(1.2+sin(time*2*pi)) + >> rnorm(length(time),0,.3) >> > plot(decompose(ts(measurement, frequency=96))) >> >> How is your code different from the above? >> >> >> >> Bill Dunlap >> TIBCO Software >> wdunlap tibco.com >> >> On Wed, Mar 30, 2016 at 8:03 AM, Ryan Utz <utz.ryan at gmail.com> wrote: >> >>> Hello, >>> >>> I have a time series that represents data sampled every 15-minutes. The >>> data currently run from November through February, 8623 total readings. >>> There are definitely daily periodic trends and non-stationary long-term >>> trends. I would love to decompose this using basic time series analysis. >>> >>> However, every time I attempt decomposition, I get the >>> >>> Error in decompose( ) : time series has no or less than 2 periods >>> >>> Is it only possible to do basic time-series analysis if you have a year >>> or >>> more worth of data? That seems absurd to me, since there is definite >>> periodicity and the data are a time series. I have tried every manner of >>> specifying frequency= with no luck (96 does not work). All manner of >>> searching for help has turned up fruitless. >>> >>> Can I only do this after I wait another year or two? >>> >>> Thanks, >>> Ryan >>> >>> -- >>> >>> Ryan Utz, Ph.D. >>> Assistant professor of water resources >>> *chatham**UNIVERSITY* >>> Home/Cell: (724) 272-7769 >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> 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. >>> >> >> > > > -- > > Ryan Utz, Ph.D. > Assistant professor of water resources > *chatham**UNIVERSITY* > Home/Cell: (724) 272-7769 > >[[alternative HTML version deleted]]
Inline. Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Wed, Mar 30, 2016 at 5:37 PM, Ryan Utz <utz.ryan at gmail.com> wrote:> Bill, Josh, and Bert, > > Thanks for your responses. I still can't quite get this when I use actual > dates. Here's an example of what is going wrong: > > X=as.data.frame(1:6000) > X[2]=seq.POSIXt(ISOdate(2015,11,1),by='hour',length.out=6000) > X[3]=sample(100,size=6000,replace=T) > > Y=xts(X[,3],order.by=X[,2]) > decompose(Y) > > Z=ts(X[,2],frequency=24*365) > plot(decompose(Z))## TYPO! It should be X[,2]. ***WARNING*** I am not a time series expert. The remarks below are therefore subject to confirmation or correction by those who are. Caveat emptor! Also, you seem to be somewhat confused about how the seasonal decomposition in decompose() works. My understanding from what you said is that your unit of time is days and that you have samples every 15 minutes, but that you wish to estimate hourly effects. If this is correct, you first need to first combine (e.g. via by() ) your 4 observations into a single summary (e.g. average or median, maybe) so that you have an hourly time series. Run this through ts() with frequency = 24: your period is daily = 24 hours and you have 24 observations/period. (Note that you could use the original data to get 96 15 minute estimates instead of hourly estimates). When you run this through decompose(), it will give you 24 "seasonal" effects/period, the hourly effects. The "trend" component will try to remove longer term effects and trends over time. Note, however, this is probably **not** what you want. I suspect you want both hourly effects and daily or monthly effects to reflect annual seasonalities as well as daily. decompose() cannot do this, apparently, so you should look for an alternative solution. Better yet, consult with a local time series expert to help you figure out what you might want and how to get it in R. Cheers, Bert> > When I specify an actual date/time (rather than just a number as Bill > posited), it does not like anything short of a year. This seems like I'm > overlooking something obvious, but I can't get this for the life of me... > > Thanks for your time, > r > > > On Wed, Mar 30, 2016 at 1:03 PM, William Dunlap <wdunlap at tibco.com> wrote: >> >> You said you specified frequency=96 when you constructed the time >> series, but when I do that the decomposition looks reasonable: >> >> > time <- seq(0,9,by=1/96) # 15-minute intervals, assuming time unit is >> > day >> > measurement <- sqrt(time) + 1/(1.2+sin(time*2*pi)) + >> > rnorm(length(time),0,.3) >> > plot(decompose(ts(measurement, frequency=96))) >> >> How is your code different from the above? >> >> >> >> Bill Dunlap >> TIBCO Software >> wdunlap tibco.com >> >> On Wed, Mar 30, 2016 at 8:03 AM, Ryan Utz <utz.ryan at gmail.com> wrote: >>> >>> Hello, >>> >>> I have a time series that represents data sampled every 15-minutes. The >>> data currently run from November through February, 8623 total readings. >>> There are definitely daily periodic trends and non-stationary long-term >>> trends. I would love to decompose this using basic time series analysis. >>> >>> However, every time I attempt decomposition, I get the >>> >>> Error in decompose( ) : time series has no or less than 2 periods >>> >>> Is it only possible to do basic time-series analysis if you have a year >>> or >>> more worth of data? That seems absurd to me, since there is definite >>> periodicity and the data are a time series. I have tried every manner of >>> specifying frequency= with no luck (96 does not work). All manner of >>> searching for help has turned up fruitless. >>> >>> Can I only do this after I wait another year or two? >>> >>> Thanks, >>> Ryan >>> >>> -- >>> >>> Ryan Utz, Ph.D. >>> Assistant professor of water resources >>> *chatham**UNIVERSITY* >>> Home/Cell: (724) 272-7769 >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> 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. >> >> > > > > -- > > Ryan Utz, Ph.D. > Assistant professor of water resources > chathamUNIVERSITY > Home/Cell: (724) 272-7769 >
TYPO on TYPO! It should be X[,3] Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Thu, Mar 31, 2016 at 9:47 AM, Bert Gunter <bgunter.4567 at gmail.com> wrote:> Inline. > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along > and sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > > On Wed, Mar 30, 2016 at 5:37 PM, Ryan Utz <utz.ryan at gmail.com> wrote: >> Bill, Josh, and Bert, >> >> Thanks for your responses. I still can't quite get this when I use actual >> dates. Here's an example of what is going wrong: >> >> X=as.data.frame(1:6000) >> X[2]=seq.POSIXt(ISOdate(2015,11,1),by='hour',length.out=6000) >> X[3]=sample(100,size=6000,replace=T) >> >> Y=xts(X[,3],order.by=X[,2]) >> decompose(Y) >> >> Z=ts(X[,2],frequency=24*365) >> plot(decompose(Z)) > > ## TYPO! It should be X[,2]. > > ***WARNING*** > I am not a time series expert. The remarks below are therefore subject > to confirmation or correction by those who are. Caveat emptor! > > Also, you seem to be somewhat confused about how the seasonal > decomposition in decompose() works. > > My understanding from what you said is that your unit of time is days > and that you have samples every 15 minutes, but that you wish to > estimate hourly effects. If this is correct, you first need to first > combine (e.g. via by() ) your 4 observations into a single summary > (e.g. average or median, maybe) so that you have an hourly time > series. Run this through ts() with frequency = 24: your period is > daily = 24 hours and you have 24 observations/period. > > (Note that you could use the original data to get 96 15 minute > estimates instead of hourly estimates). > > When you run this through decompose(), it will give you 24 "seasonal" > effects/period, the hourly effects. The "trend" component will try to > remove longer term effects and trends over time. > > Note, however, this is probably **not** what you want. I suspect you > want both hourly effects and daily or monthly effects to reflect > annual seasonalities as well as daily. decompose() cannot do this, > apparently, so you should look for an alternative solution. Better > yet, consult with a local time series expert to help you figure out > what you might want and how to get it in R. > > Cheers, > Bert > > >> >> When I specify an actual date/time (rather than just a number as Bill >> posited), it does not like anything short of a year. This seems like I'm >> overlooking something obvious, but I can't get this for the life of me... >> >> Thanks for your time, >> r >> >> >> On Wed, Mar 30, 2016 at 1:03 PM, William Dunlap <wdunlap at tibco.com> wrote: >>> >>> You said you specified frequency=96 when you constructed the time >>> series, but when I do that the decomposition looks reasonable: >>> >>> > time <- seq(0,9,by=1/96) # 15-minute intervals, assuming time unit is >>> > day >>> > measurement <- sqrt(time) + 1/(1.2+sin(time*2*pi)) + >>> > rnorm(length(time),0,.3) >>> > plot(decompose(ts(measurement, frequency=96))) >>> >>> How is your code different from the above? >>> >>> >>> >>> Bill Dunlap >>> TIBCO Software >>> wdunlap tibco.com >>> >>> On Wed, Mar 30, 2016 at 8:03 AM, Ryan Utz <utz.ryan at gmail.com> wrote: >>>> >>>> Hello, >>>> >>>> I have a time series that represents data sampled every 15-minutes. The >>>> data currently run from November through February, 8623 total readings. >>>> There are definitely daily periodic trends and non-stationary long-term >>>> trends. I would love to decompose this using basic time series analysis. >>>> >>>> However, every time I attempt decomposition, I get the >>>> >>>> Error in decompose( ) : time series has no or less than 2 periods >>>> >>>> Is it only possible to do basic time-series analysis if you have a year >>>> or >>>> more worth of data? That seems absurd to me, since there is definite >>>> periodicity and the data are a time series. I have tried every manner of >>>> specifying frequency= with no luck (96 does not work). All manner of >>>> searching for help has turned up fruitless. >>>> >>>> Can I only do this after I wait another year or two? >>>> >>>> Thanks, >>>> Ryan >>>> >>>> -- >>>> >>>> Ryan Utz, Ph.D. >>>> Assistant professor of water resources >>>> *chatham**UNIVERSITY* >>>> Home/Cell: (724) 272-7769 >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> ______________________________________________ >>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>>> 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. >>> >>> >> >> >> >> -- >> >> Ryan Utz, Ph.D. >> Assistant professor of water resources >> chathamUNIVERSITY >> Home/Cell: (724) 272-7769 >>