POSIXct to ts
Hi Mary Ann, I'm afraid I'm not really qualified to answer, though someone else on this list might be: I might suggest you ask on CrossValidated (stats.stackexchange.com) where a bunch of nice folks who know far more than me about these matters answer statistical questions. In particular, I know Prof Hyndman is seen there on occasion and he could certainly give you an answer. Cheers, Michael
On Thu, Aug 9, 2012 at 11:02 PM, Mary Ann Middleton <maberg at sfu.ca> wrote:
Hi Michael, Thank you so much for your email. That really helped, and with a frequency of 24, I finally have some figures I can work with!! I have a follow up question. Do you have any resources you would recommend that would explain the difference between stl() and decompose()? I have been reading the help files, and googling, but I am not finding the right resources. There are some notable difference between the "random" and the "remainder" in each and I am unsure which is correct for my purposes. At this time, I can use the "random" calculation from decompose() to generate an acf of the data after the seasonal patterns and trends are stripped (acf(na.omit(x.ts.decomp$random)), which is ultimately what I need, however, that isn't solid justification for choosing that calculation. Any pointers appreciated. Cheers, Mary Ann
________________________________
From: "R. Michael Weylandt" <michael.weylandt at gmail.com>
To: "Mary Ann Middleton" <maberg at sfu.ca>
Cc: r-help at r-project.org
Sent: Thursday, August 9, 2012 2:51:16 PM
Subject: Re: [R] POSIXct to ts
On Thu, Aug 9, 2012 at 3:30 PM, Mary Ann Middleton <maberg at sfu.ca> wrote:
Hi,
I have a dataframe (try.1) with date/time and temperature columns, and
the date/time is in POSIXct fomat. Sample included below.
I would like to to try decompose () or stl() to look at the trends and
seasonality in my data, eventually so that I can look at autocorrelation.
The series is 3 years of water temperature with clearly visible seasonal
periods.
Right now, if I try decompose, I get the following error, w hich I beleive
is because I haven't correctly defined a time series.
"Error in decompose(try.1) : time series has no or less than 2 periods"
I am stuck trying to go from POSIXct to as.ts
Any suggestions on how to tackle this would be greatly appreciated.
Sincerely,
Mary Ann
A sample of the data looks like this:
'data.frame': 26925 obs. of 2 variables:
$ date : POSIXct, format: "2008-07-11 21:00:00" "2008-07-11
22:00:00" ...
$ DL_1297699: num 15.3 15.1 14.9 14.6 14.1 ... date DL_1297699 1
2008-07-11 21:00:00 15.318
2 2008-07-11 22:00:00 15.127
3 2008-07-11 23:00:00 14.888
4 2008-07-12 00:00:00 14.553
5 2008-07-12 01:00:00 14.146
6 2008-07-12 02:00:00 13.738
7 2008-07-12 03:00:00 13.401
8 2008-07-12 04:00:00 13.088
9 2008-07-12 05:00:00 12.823
10 2008-07-12 06:00:00 12.630 and the dput(head(x,50) gives this
output: structure(list(date = structure(c(1215810000, 1215813600,
1215817200,
1215820800, 1215824400, 1215828000, 1215831600, 1215835200, 1215838800,
1215842400, 1215846000, 1215849600, 1215853200, 1215856800, 1215860400,
1215864000, 1215867600, 1215871200, 1215874800, 1215878400, 1215882000,
1215885600, 1215889200, 1215892800, 1215896400, 1215900000, 1215903600,
1215907200, 1215910800, 1215914400, 1215918000, 1215921600, 1215925200,
1215928800, 1215932400, 1215936000, 1215939600, 1215943200, 1215946800,
1215950400, 1215954000, 1215957600, 1215961200, 1215964800, 1215968400,
1215972000, 1215975600, 1215979200, 1215982800, 1215986400), class =
c("POSIXt",
"POSIXct"), tzone = "UTC"), DL_1297699 = c(15.318, 15.127, 14.888,
14.553, 14.146, 13.738, 13.401, 13.088, 12.823, 12.63, 12.461,
12.413, 12.461, 12.703, 13.04, 13.497, 14.026, 14.553, 15.031,
15.366, 15.7, 15.819, 15.819, 15.7, 15.605, 15.461, 15.247, 14.984,
14.673, 14.337, 14.002, 13.666, 13.377, 13.137, 12.944, 12.823,
12.847, 13.016, 13.329, 13.762, 14.242, 14.697, 15.175, 15.581,
15.891, 16.034, 16.034, 15.939, 15.772, 15.581)), .Names = c("date",
"DL_1297699"), row.names = c(NA, 50L), class = "data.frame")
Thank you for the dput()-ed data!
The "time series" object that stl() and decompose() expect doesn't
have time stamps -- rather it has a "start" and "end" marker as well
as a frequency. [For more details, see ?tsp]
With your described data, I'd imagine you'd have start = 2008 and
frequency = 365*24 (if you have hourly data and an underlying yearly
periodicity) but to work with the data you gave, lets suppose 12 hours
is a cycle. Note you don't have to give end because that's figured out
automatically from frequency and start.
x.ts <- ts(x[,2], start = 1, frequency = 12)
then I can
stl(x, "per")
decompose(x)
as desired.
Hope that helps,
Michael