2017-05-18 37 views
2

尋找我的問題的解決方案我找到了一箇舊帖子(Cross correlation of different time series data values in 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」 和 「迪斯()」:

  1. (CCF)#IN基礎包
  2. 迪斯(meter_daywise,方法= 「CORT」,deltamethod = 「DTW」)#在TSclust包

但像老帖子,我也有同樣的問題:

  1. CCF沒有充分矩陣輸入
  2. 迪斯()接受輸入矩陣和產生一些矩陣,但同時觀察值I發現這不是一個互相關矩陣,因爲這些值不-1和1之間

所以,問題我們如何計算和執行R中不同時間序列之間的互相關?

+1

你期望的輸出看升什麼IKE? – emilliman5

+0

我希望能創建一個維度爲AxA的矩陣,其中A =時間序列的數量,並且這個矩陣中每一個座標爲[x,y]的值都是時間序列(x)和時間序列Y)。這是可能的,確實有道理嗎? –

+0

這聽起來像你可能只想要一個普通的舊相關矩陣。對於你的結構,這將是'cor(myMat)'。 – lmo

回答

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幫助:

By default, no missing values are allowed. If the na.action function passes through missing values (as na.pass does), the covariances are computed from the complete cases. This means that the estimate computed may well not be a valid autocorrelation sequence, and may contain missing values.

+0

謝謝,但我不能讓它工作,我應該使用代碼,除了前2行,並使用我的矩陣(matri123),而不是此示例的矩陣墊?我嘗試過這樣做,但沒有成功,你能幫我一把嗎?一個附加問題將是爲什麼應用絕對最大關聯更好? –

+0

1)是的,用你的矩陣代替'mat'。您需要詳細說明爲什麼/如何不工作。錯誤信息錯誤的結果? 2)使用絕對最大相關不一定更好,這是我的一個有教養的猜測。 ccf返回每對時間序列的相關向量,因爲您想要AxA矩陣,我們必須將每個成對相關性減少爲一個值,在這種情況下,這似乎是最大相關性(不考慮符號)。如果你詳細說明你的用例,我們可以想出其他的東西。 – emilliman5

+0

我得到了一個AxA矩陣作爲結果與似乎是每對的相關性,這幾乎是我正在尋找的。我有2個最終的問題,我很抱歉,我對這個主題不太瞭解。1.產生的矩陣中的許多元素是:數字,0你知道爲什麼發生這種情況,我該如何避免它? 2.有沒有辦法獲得一個相關值不是爲一對時間序列,而是爲一組時間序列(如:時間序列A與時間序列組「A,B,C,D, E「)?我非常感謝任何指導# –

1

一種可能性是使用combn跨所有列的組合運行ccf。下面的代碼鏈接中的問題進行了測試:

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) 
+0

感謝您的答案,不幸的是我無法讓它工作。我的矩陣(matts)的尺寸爲25列x 13514行,我試着用你的命令:myResults < - combn(seq_len(ncol(matts)),2,FUN = function(x)ccf(matts [,x [1]] ,matts [,x [2]]),簡化= FALSE),我得到的錯誤:na.fail.default(as.ts(x))中的錯誤:對象中缺少值所以我認爲它可能是由於NA值,所以ireplace他們爲其他值只測試它是否工作,然後我得到的錯誤:plot.window(...)中的錯誤:必要的最終'ylim'值我真的失去了這裏。我能做什麼? –