解释 R 中互相关函数的输出

机器算法验证 r 时间序列 相关性 互相关
2022-03-19 20:56:24

我正在处理两个时间序列,我有兴趣了解它们之间的关系。作为第一步,我检查了互相关函数(ccf()在 R 中使用)。

我的代码输出如下所示,我正在运行ccf(x,y). 据我了解,这里的结论是,x时间与时间t+k相关,其中滞后时间ytk = 2,3,4,5,6

CCF函数的输出

我对此感到非常惊讶,因为我的假设是这x会导致 的负变化y,因此我预计会在滞后的负值时看到负相关,k事实上,尽管我在这里看到了什么,但我想不出在未来某个时间点y的变化会如何引起变化。x

我对输出的解释是否正确?在运行了一些表单测试后,我假设是这样的:

x <- rnorm(10)
y <- -lead(x)
ccf(x, y, na.action=na.omit)

但是考虑到我对结果的感觉有多惊讶,我想仔细检查一下。

假设我的解释是正确的,对于我在结果中看到的这种几乎正弦的形状,还有其他解释吗?(我在想我的数据中可能有一些特征可以人为地导致这些形状——我对此没有直觉!)。

我有多个以这些时间序列为特征的独立实验,并且我在其中的大多数中看到了正弦模式(尽管“正弦波”的幅度和频率因图而异)。

我也很想听听量化两个时间序列之间关系的替代方法。

2个回答

为了回答你的问题,这里有一个例子:

set.seed(123)
x = arima.sim(model=list(0.2, 0, 0.5), n = 100)
y = arima.sim(model=list(0.4, 0, 0.4), n = 100)
ccf(x, y, type="correlation")

有两个时间序列,x 和 y。两者之间的相关性发生在ytxt±k在哪里±k是一个滞后。在这个例子中,在k= -2, -7, -10,xt+k显着negatively与....有关yt.

解释可能是 x 在滞后 2、7 和 10 处领先 y。这是随机数据,因此领先是没有意义的。

这里有一些有用的解释参考(我的TS知识有点生疏): http ://homepage.univie.ac.at/robert.kunst/prognos4.pdf

https://onlinecourses.science.psu.edu/stat510/node/74

互相关图

要添加有关您的情况的更多详细信息,您的 y_t 似乎落后于 x_{t+k}。您在 CCF/ACF 中看到的正弦模式是某些时间序列结构的典型特征。您对 AR 和 MA 模型的熟悉程度如何?

关于您的假设,尚不清楚您拥有哪些数据,以及该数据的性质可能是什么,但如果您的时间序列具有非平稳模式,则会产生奇怪的 ACF/PACF/CCF 图。

我用 Box and Jenkins (1976, p 374-375) 中的一个小例子检查了 ccf 函数。

x <- as.ts(c(11,7,8,12,14))
y <-as.ts(c(7,10,6,7,10))
zz <- ccf(x,y, lag.max=3)
zz

这使:

Autocorrelations of series ‘X’, by lag

  -3     -2     -1      0      1      2      3 

-0.343 -0.121  0.631  0.139 -0.380 -0.074  0.260 

因此,我们可以看到 ccf 将 Box-Jenkins 书中的负滞后计算作为正滞后给出,反之亦然。

从书中,我们有-0.38at lag-10.63at lag 1

但是,从它所说的 ccf 函数是正确的:

ccf(x, y) 返回的滞后 k 值估计 x[t+k] 和 y[t] 之间的相关性。

这只是一个定义问题,但它可能是……误导。