繁体   English   中英

R相关时间序列

[英]R Correlated time-series

我有多个时间序列,想研究某些事件是否在不同的序列中同时发生。 例如,假设我有x1和x2都是时间序列,但来自不同的来源,我想知道x1是否在与x2大致相同的时间增加/减少。 你会怎么做。 我知道我可以使用相关性来衡量一般关系。

但是,是否有办法将他们一起移动的时期与他们偏离的时期区分开?

这是一个示例,我们在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
)

您是否尝试查看整个时间序列的子间隔内的相关性? 然后,您必须决定制作子间隔的大小,也许为“足够的相关性”设置条件,等等。


编辑-另一个想法-可以定义一个函数F(tau) ,它是[0,tau]子间隔中两个时间序列之间的相关性,然后看一下它的派生词? 但是,这可能是假设它在T = 0附近是很好的相关性。

也许有人可以找到两者之间具有良好相关性的“种子”时间,然后通过将G(width)定义为[seed, seed + width]相关性并类似地检查宽度的导数来扩大其周围的间隔?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM