在R中有效地计算相关性?

时间:2013-07-17 16:19:26

标签: r optimization correlation

这是一个优化问题,我希望您有创意SO用户可能有答案。

我有一个大矩阵(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的by='type'函数中实现cor功能的方法,我的整个问题可以解决吗?

感谢您的任何见解。

1 个答案:

答案 0 :(得分: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

这种方法假设每种类型的观察数量是平衡的。

现在,我们可以用500万行和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