我有多个时间序列,想要研究某些事件是否在不同系列中的相对同一时间发生。例如,我说x1和x2都是时间序列,但来自不同的来源,我想知道x1是否在与x2相同的时间增加/减少。你会怎么做呢?我知道我可以用相关来衡量一般关系。
但是,有没有办法隔离他们一起移动的时期,从他们偏离的时期开始?
答案 0 :(得分:4)
这是一个例子,我们在30天的窗口中计算滚动相关性,然后绘制结果:
library(zoo)
roll.corrs <- rollapplyr(dates, 30, function(index) cor(df1[index, "x1"], df1[index, "x2"]), fill=NA)
library(ggplot2)
qplot(as.Date(dates), roll.corrs)
或者更短:
z <- zoo(df1, as.Date(rownames(df1)))
r <- rollapplyr(z, 30, function(x) cor(x[,1], x[,2]), by.column = FALSE)
autoplot(r)
qplot
输出显示:
您可以清楚地看到特别是两个部分的时间序列之间具有特别高的相关性。数据被有目的地设计为具有高和低相关的周期。这是数据:
base <- c(rep(1, 100), 1:50, rep(50, 100), 50:1, rep(1, 65))
dates <- as.character(seq(as.Date("2013-01-01"), len=365, by="1 day"))
set.seed(1)
df1 <- data.frame(
x1=base+rnorm(365, 0, 5),
x2=base+rnorm(365, 0, 5),
row.names=dates
)
答案 1 :(得分:1)
您是否尝试过查看整个时间序列的子间隔内的相关性?然后你必须决定制作子间隔的大小,或许为“足够的相关性”设置条件等。
编辑 - 另一个想法 - 可以定义一个函数F(tau)
,它是[0,tau]
子区间中两个时间序列之间的相关性,并查看它的衍生物?但这可能假设它在T = 0附近有很好的相关性。
也许人们可以找到两个相关性很好的“种子”时间,然后通过在G(width)
中定义[seed, seed + width]
作为相关性来增加周围的间隔,并类似地检查相关的导数。宽度β