代码之家  ›  专栏  ›  技术社区  ›  goyiki

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

  •  2
  • goyiki  · 技术社区  · 10 年前

    我使用的是R 3.1.3,我有两个时间序列,我想用它来比较 ccf 以查看在哪个滞后处存在最大相关性。时间序列间隔15分钟。

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

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

    之后,我使用 中央控制室 命令ACF图形在两种情况下都是相同的,但当我使用 时间 对象,但当我使用 文本 对象我检查了帮助,默认情况下最大延迟为 10*log10(N/m) 在这种情况下,其将是: 10*log10(2688/2) = 31.28 .

    因此,第一个选项似乎显示了正确的滞后。但是我更喜欢使用 文本 因为我还有8个系列要比较,它们都在同一个数据帧中。此外,我很想知道为什么会发生这种情况!

    在这里您可以看到代码:

    # 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
    

    如您所见,两个图形中的x轴不同。我读过很多关于 中央控制室 , 文本 ,等等,但我找不到为什么会发生这种情况。

    1 回复  |  直到 10 年前
        1
  •  4
  •   Joshua Ulrich    10 年前

    这个 acf ccf 函数将其第一个参数转换为 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))