在R中加速相关矩阵计算

6
我有一个包含49个变量和400万行的数据框。我想要计算一个49 x 49的相关矩阵。所有的列都是数值型。
以下是一个样例:
df <- data.frame(replicate(49,sample(0:50,4000000,rep=TRUE)))

我使用了标准的cor函数。
cor_matrix <- cor(df, use = "pairwise.complete.obs")

这个计算太慢了。我有16GB内存和一颗i5单核2.60GHz的处理器。

有没有办法让我的台式机运算更快?


1
你可以在这里查看:http://www.r-bloggers.com/bigcor-large-correlation-matrices-in-r/ - akrun
1
你的主要问题是 use = "pairwise.complete.obs"。在我的系统上(测试了12列),这需要的时间是use = "everything"的五倍。 - Roland
1个回答

7

WGCNA包中有一个更快的cor函数版本(用于基于相关性推断基因网络)。在我的频率为3.1 GHz的i7处理器和16 GB内存的计算机上,它能够比原版本快约20倍,在解决49 x 49矩阵问题时效果相同:

mat <- replicate(49, as.numeric(sample(0:50,4000000,rep=TRUE)))

system.time(
    cor_matrix <- cor(mat, use = "pairwise.complete.obs")
)
user  system elapsed 
40.391   0.017  40.396 

system.time(
    cor_matrix_w <- WGCNA::cor(mat, use = "pairwise.complete.obs")
)
user  system elapsed 
1.822   0.468   2.290 

all.equal(cor_matrix, cor_matrix_w)
[1] TRUE

如果您的数据包含更多缺失观测值,请查阅函数的帮助文件以了解版本间差异的详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接