我有多个时间序列,我想研究在不同的序列中,某些事件是否在相对相同的时间发生。例如,我有x1和x2,它们都是时间序列,但来自不同的来源,我想知道x1是否与x2相对地同时增加/减少。你会怎么做。我知道我可以用相关性来衡量一般的关系。
但是,是否有办法将他们一起移动的时期与他们偏离的时期分开呢?
发布于 2014-02-13 15:26:03
下面是一个例子,我们在一个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
)
发布于 2014-02-13 15:20:26
您试过查看整个时间序列的子间隔内的相关性吗?然后,您必须决定做子区间的大小,或者为“充分相关”设置一个条件,等等。
编辑--另一个想法--可以定义一个函数F(tau)
,它是[0,tau]
子区间中两个时间序列之间的关联,并查看它的导数?但这可能假设它与T=0有很好的相关性。
也许人们可以找到两者密切相关的“种子”时间,然后通过将G(width)
定义为[seed, seed + width]
中的相关性,并类似地检查与宽度有关的导数,来增加其周围的间隔?
https://stackoverflow.com/questions/21767374
复制