在寻找问题的解决方案时,我发现了一篇旧文章(R中不同时间序列数据值的互相关),确切地询问了我所需要的内容,但是不幸的是,它没有任何答案,所以我会再次询问以希望获得一些指导。
我从大量具有相同大小的时间序列中创建了一个大矩阵,每列都是不同的时间序列(类似于以下内容,但更大,并且有更多的值大于零):
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19]
[1,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 NA NA NA 0.0 NA 0.0 0.0 0.0 0.0
[2,] 0 6.0 0.0 9.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 0.0 NA 0.0 0.0 0.0 0.0
[3,] 0 0.0 0.0 5.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 0.0 NA 0.0 0.0 0.0 0.0
[4,] 0 0.0 0.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 0.0 NA 0.0 0.0 0.0 0.0
[5,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 0.0 NA 0.0 0.0 0.0 0.0
[6,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 0.0 NA 0.0 0.0 0.0 0.0
[7,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 0.0 NA 0.0 0.0 0.0 0.0
[8,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 0.0 NA 0.0 0.0 0.0 0.0
[9,] 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 NA 0 NA 10.0 NA 0.0 0.0 0.0 0.0
.
.
.
我想确定所有时间序列之间的相关性,因此将它们放在一个矩阵中,因为我认为这可能是执行互相关过程的最佳方法,我可能错了。
因此,我也了解函数“ ccf”和“ diss()”:
但就像在旧帖子中一样,我有相同的问题:
所以问题是我们如何计算和执行R中不同时间序列之间的互相关?
ccf
返回每个偏移量(即滞后)的成对相关性,但是我想您想要的是该值的max(abs(correlation)。因为您有NA,所以需要设置na.action
参数。
mat <- matrix(rnorm(100000), ncol=100)
mat[sample(1:length(mat), 100)] <- NA
res <- sapply(1:ncol(mat), function(x) {
sapply(1:ncol(mat), function(z){
resTmp <- ccf(x = mat[, x], y = mat[, z], plot=F, na.action = na.pass)
resTmp$acf[which.max(abs(resTmp$acf))]
})
})
从ccf
帮助中:
默认情况下,不允许缺少任何值。如果na.action函数传递缺失值(如na.pass一样),则从完整的情况中计算出协方差。这意味着计算得出的估计值很可能不是有效的自相关序列,并且可能包含缺失值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句