2013-07-17 78 views
1

這是一個優化問題,我希望你的創意SO用戶可能有一個答案。在R中有效計算相關性?

我有一個大矩陣(500萬x 2)有兩個值:時間和類型。實質上,每個「類型」是它自己的時間序列 - 下面的數據表示三個不同的時間序列(一個用於A,一個用於B,另一個用於C)。有2000個不同的「類型」。

mat 
    time type 
[1,] 50 A 
[2,] 50 A 
[3,] 12 B 
[4,] 24 B 
[5,] 80 B 
[6,] 92 B 
[7,] 43 C 
[8,] 69 C 

什麼是最有效的方式來找到這2000個時間序列之間的相關性?我目前正在生成一個矩陣,其中每次發生事件時都會有不同的分箱,並且我將該時隙中每個「類型」發生的事件數量填充到矩陣中。在填充矩陣之後,我遍歷每一對「類型」並找出相關性。這是非常低效的(~5小時)。

如果在R的cor函數中存在一種實現by='type'功能的方法,那麼可以解決我的整個問題?

感謝您的任何見解。

回答

5

你可以嘗試這樣的事情

set.seed(1) 
df <- 
data.frame(time = rnorm(15), type = rep(c("a", "b", "c"), each = 5)) 

cor(do.call(cbind, split(df$time, df$type))) 
     a  b  c 
a 1.00000 0.27890 -0.61497 
b 0.27890 1.00000 -0.78641 
c -0.61497 -0.78641 1.00000 

這種方法假定每種類型的觀測次數是平衡的。現在

,我們可以做一個真正的考驗,5個百萬行和2000型動物類型

set.seed(1) 
df <- data.frame(time = rnorm(5e6), type = sample(rep(1:2000, each = 2500))) 
system.time(cor(do.call(cbind, split(df$time, df$type)))) 
## user system elapsed 
## 6.387 0.000 6.391 
+0

這是一個很好的解決方案,但不幸的是我的數據集不包含觀測均衡數量。你知道是否有辦法調整它? – user2588829