解释两个时间序列之间的相关性

机器算法验证 r 时间序列 相关性 统计学意义 互相关
2022-04-16 05:54:40

我在三周内模拟了两个变量的行为:

var_1 <- ts(c(25.1,21.8,15.6,28.0,25.8,26.2,29.9,30.6,28.3,22.1,20.2,20.5,18.4,12.0,8.1,8.6,8.2,9.17,8.8,9.7,10.4))

var_2<-ts(c(-13.1,-7.5,0.1,-3.4,-6.0,-4.6,-0.1,4.8,4.3,-1.1,-6.5,-10.0,-9.2,-7.8,-7.6,-7.1,-11.4,-14.2,-19.6,-22.9,-23.5))

var_1 是自变量,我想看看 var_2 是否受其波动的影响。

答:var_1 和 var_2。 B:运行相关

在上图中 (A),var_1 为黑色,var_2 为红色。只看曲线,我会说至少在第 12 天左右之前存在关系,然后会出现一些重大滞后。

我强调任何相似性的第一个想法是应用运行相关性测试(上图 B)。我使用running()了 R library中的函数gtools

running(var_1, var_2, fun=cor, width=5)

重叠窗口的宽度为 5 天。95% 的显着性边界(红色虚线)是通过对具有相同结构的随机生成的数据集进行 999 次模拟来计算的。

第 6 天和第 12 天之间的相关性相当好,但从来没有统计显着性。有没有更合适的方法来指出任何常见的行为?

此外,我尝试应用互相关函数来检查显着滞后(R 函数ccf())。

ccf(var_1,var_2, main="")

互相关

它显示了滞后 -3 到 0 的强相关性,并在两个方向上逐渐变细。如果我解释正确,我想我可以说 var_2 需要 0 到 3 天才能对 var_1 的任何变化做出反应。

虽然这个结果非常有趣,但我觉得它并不能很好地描述两条曲线之间的所有动态,例如仅限于第 6 天和第 12 天的良好相关性。但是,如上所示,可以做到这一点的测试没有显示任何统计学意义。所以我有点困惑,什么是描述这些数据的最合适的方法。

1个回答

您似乎通过查看绝对值的相关性而不是变化的相关性来查看虚假结果。

如果是这样,请查看这两个链接以获得解释(否则请忽略):quant.stackexchange.com/questions/489/correlation-between-prices-or-returns & stats.stackexchange.com/a/133171/114856

我写“似乎”,因为您没有提供您的代码,我无法复制您的数字。

#Attempt to reproduce
var_1 <- ts(c(25.1,21.8,15.6,28.0,25.8,26.2,29.9,30.6,28.3,22.1,20.2,20.5,18.4,12.0,8.1,8.6,8.2,9.17,8.8,9.7,10.4))
var_2 <- ts(c(-13.1,-7.5,0.1,-3.4,-6.0,-4.6,-0.1,4.8,4.3,-1.1,-6.5,-10.0,-9.2,-7.8,-7.6,-7.1,-11.4,-14.2,-19.6,-22.9,-23.5))
running(var_1, var_2, fun=cor, width=5, by=1, allow.fewer=TRUE, align=c("right"), simplify=TRUE)

#Same thing but on changes   (use non-log approach as neg values)
chg_1 <- diff(var_1)/var_1[-length(var_1)] 
chg_2 <- diff(var_2)/var_2[-length(var_2)] 
running(chg_1, chg_2, fun=cor, width=5, by=1, allow.fewer=TRUE, align=c("right"), simplify=TRUE)