Dear All, I have 2 time-series data sets and would like to check the cross correlation. These data sets were set as a zoo object, called data, and in general look like: V1 V2 2007-01-01 00:00:00 0.0 0.176083 2007-01-01 01:00:00 0.0 0.176417 2007-01-01 02:00:00 0.0 0.175833 2007-01-01 03:00:00 0.0 0.175833 2007-01-01 04:00:00 0.3 0.176000 2007-01-01 05:00:00 1.8 0.176250 2007-01-01 06:00:00 2.0 0.177583 2007-01-01 07:00:00 0.2 0.178333 2007-01-01 08:00:00 0.3 0.178167 2007-01-01 09:00:00 3.2 0.178417 When I applied the ccf method, ccf(data$V1, data$V2), I noticed the lag is every 3600 which is a little surprising to me. I was thinking the lag should be 1, but it seems the lag unit becomes 3600. I guess the number 3600 representing 3600 "seconds" because of the zoo object. I am not sure if I'm right and would like someone here could certify this (or not). Besides, does anyone know any default argument to adjust the 3600 into 1 while plotting? The only idea I have is to divide the lag manually by 3600 and then plot it later. Regards, Keith
Gabor Grothendieck
2009-Jul-24 14:55 UTC
[R] Lag representation in ccf() while zoo object is used?
On Fri, Jul 24, 2009 at 10:31 AM, Keith<kigiokli at gmail.com> wrote:> Dear All, > > I have 2 time-series data sets and would like to check the cross > correlation. These data sets were set as a zoo object, called data, > and in general look like: > > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?V1 ? ? ? ? ? ? V2 > 2007-01-01 00:00:00 ? ? ?0.0 ? 0.176083 > 2007-01-01 01:00:00 ? ? ?0.0 ? 0.176417 > 2007-01-01 02:00:00 ? ? ?0.0 ? 0.175833 > 2007-01-01 03:00:00 ? ? ?0.0 ? 0.175833 > 2007-01-01 04:00:00 ? ? ?0.3 ? 0.176000 > 2007-01-01 05:00:00 ? ? ?1.8 ? 0.176250 > 2007-01-01 06:00:00 ? ? ?2.0 ? 0.177583 > 2007-01-01 07:00:00 ? ? ?0.2 ? 0.178333 > 2007-01-01 08:00:00 ? ? ?0.3 ? 0.178167 > 2007-01-01 09:00:00 ? ? ?3.2 ? 0.178417 > > When I applied the ccf method, ccf(data$V1, data$V2), I noticed the > lag is every 3600 which is a little surprising to me. I was thinking > the lag should be 1, but it seems the lag unit becomes 3600. I guess > the number 3600 representing 3600 "seconds" because of the zoo object.ccf reports in time units (as discussed in ?ccf) and POSIXct, which is the time scale you have chosen works in seconds. This seems unrelated to zoo.> I am not sure if I'm right and would like someone here could certify > this (or not). Besides, does anyone know any default argument to > adjust the 3600 into 1 while plotting? The only idea I have is to > divide the lag manually by 3600 and then plot it later.Try changing your time scale from POSIXct to one measured in hours: Lines <- "2007-01-01 00:00:00,0.0,0.176083 2007-01-01 01:00:00,0.0,0.176417 2007-01-01 02:00:00,0.0,0.175833 2007-01-01 03:00:00,0.0,0.175833 2007-01-01 04:00:00,0.3,0.176000 2007-01-01 05:00:00,1.8,0.176250 2007-01-01 06:00:00,2.0,0.177583 2007-01-01 07:00:00,0.2,0.178333 2007-01-01 08:00:00,0.3,0.178167 2007-01-01 09:00:00,3.2,0.178417" library(zoo) z <- read.zoo(textConnection(Lines), tz = "", sep = ",") # zh is z but with time units in hours zh <- z time(zh) <- as.numeric(time(z)) / 3600 with(zh, ccf(V2, V3)) Equivalently one could have replaced the two lines that define zh with this single line: zh <- aggregate(z, as.numeric(time(z)) / 3600, force)