寻找我的问题的解决方案我找到了一个旧帖子(device log),它完全问我需要什么,但不幸的是它没有得到任何答案所以我会再次要求提供一些指导。
我已经从大量具有相同大小的时间序列中创建了一个大矩阵,每列都是不同的时间序列(类似于以下内容但更大且更多的值不同于零):
[,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?
中计算和执行不同时间序列之间的互相关答案 0 :(得分:1)
一种可能性是使用ccf
在所有列的组合中运行combn
。以下代码在链接中的问题上进行了测试:
myResults <- combn(seq_len(nrow(meter_daywise)), 2,
FUN=function(x) ccf(meter_daywise[x[1],], meter_daywise[x[2],]),
simplify=FALSE)
并生成一个像这样的嵌套列表
str(myResults)
List of 10
$ :List of 6
..$ acf : num [1:17, 1, 1] 0.0241 0.0895 0.1463 0.0583 -0.0613 ...
..$ type : chr "correlation"
..$ n.used: int 15
..$ lag : num [1:17, 1, 1] -8 -7 -6 -5 -4 -3 -2 -1 0 1 ...
..$ series: chr "X"
..$ snames: chr "meter_daywise[x[1], ] & meter_daywise[x[2], ]"
..- attr(*, "class")= chr "acf"
$ :List of 6
..$ acf : num [1:17, 1, 1] -0.445 -0.493 -0.239 0.465 0.49 ...
..$ type : chr "correlation"
..$ n.used: int 15
..$ lag : num [1:17, 1, 1] -8 -7 -6 -5 -4 -3 -2 -1 0 1 ...
..$ series: chr "X"
..$ snames: chr "meter_daywise[x[1], ] & meter_daywise[x[2], ]"
..- attr(*, "class")= chr "acf"
...
列表中的每个外部元素都是两对ccf
的输出。对于您的应用程序,由于时间序列存储在列中,您可以将其切换为
myResults <- combn(seq_len(ncol(myMat)), 2,
FUN=function(x) ccf(myMat[, x[1]], myMat[, x[2]]), simplify=FALSE)
其中myMat是矩阵的名称。您可以通过更简单的combn
调用
myPairs <- combn(seq_len(ncol(myMat)), 2)
答案 1 :(得分:1)
ccf
返回每个偏移处的成对相关性(即滞后),但我认为你想要的是最大值(abs(相关))。因为你有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那样),则从完整的情况计算协方差。这意味着计算的估计值可能不是有效的自相关序列,并且可能包含缺失值。