ccf使用ts对象或xts对象提供不同的滞后

时间:2016-01-15 09:50:06

标签: r time-series xts cross-correlation

我正在使用R 3.1.3并且我有2个时间序列,我想使用ccf来比较哪个滞后有最大相关性。时间序列间隔为15分钟。

我尝试过两种不同的方式:

  • 将时间序列定义为ts对象
  • 将时间序列定义为xts对象

之后,我使用ccf命令计算互相关。 ACF图形在两种情况下都是相同的,但是当我使用ts对象时,我在(-31,31)之间滞后,但当我使用{{1}时,滞后在(-27900,27900)之间。对象。我检查了帮助,默认情况下,最大延迟为xts,在这种情况下为10*log10(N/m)

因此,似乎第一个选项显示正确的滞后。但是我更喜欢使用10*log10(2688/2) = 31.28,因为我有8个系列要比较,它们都在同一个data.frame中。此外,我很想知道为什么会这样!

在这里你可以看到代码:

xts

如您所见,两个图形的x轴不同。我看过很多关于# Generate data - Example: set.seed(123) x <- rnorm(2880,0,3) y <- rnorm(2880,0,3) # 1 month of data dt <- seq(as.POSIXct('2014-01-01 00:00:00'), by='15 min', length.out=(60*24*30/15)) x <- data.frame (dt,x) y <- data.frame(dt,y) summary(x) summary(y) str(x) str(y) xy <- merge (x, y, by="dt", all=TRUE) summary(xy) # Time series objects (univariate): x_ts <- ts(x) y_ts <- ts(y) # Using xts (multivariate): library(xts) xy_ts <- xts(xy[,-1], order.by = xy$dt) summary(xy_ts) str(xy_ts) class(xy_ts) xy_ts_x <- xy_ts[,1] xy_ts_y <- xy_ts[,2] summary(xy_ts_y) # Cross-correlation fucntion from the univariate series: ccf1 <- ccf(x_ts[,2], y_ts[,2]) # Cross-correlation fucntion from the multivariate series: ccf2 <- ccf(drop(xy_ts_x), drop(xy_ts_y)) # drop extra dimensions in xts ccf等的帖子,但我找不到为什么会这样。

1 个答案:

答案 0 :(得分:3)

acfccf函数在内部将其第一个参数转换为ts对象。正如我在其他地方所说的那样,xts目前还没有很好地处理ts的转换。

解决此特定问题的方法是在创建xts对象后手动将frequency属性设置为1:

xy_ts <- xts(xy[,-1], order.by = xy$dt)
attr(xy_ts, "frequency") <- 1

xy_ts_x <- xy_ts[,1]
xy_ts_y <- xy_ts[,2]

ccf2 <- ccf(drop(xy_ts_x), drop(xy_ts_y))