大矩阵上每行的Pearson系数

时间:2018-05-07 10:27:25

标签: r

我目前正在使用大型矩阵(4列和大约8000行)。 我想使用构成该矩阵的不同行之间的Pearson相关系数进行相关分析。

我想按以下方式进行:

查找第1行和第2行之间的Pearson相关系数。然后在第1行和第3行之间...依此类推,其余行也是如此。

  • 然后在第2行和第3行之间找到Pearson的相关系数。然后在第2行和第4行之间找到...依此类推,其余行也是如此。注意我再也找不到第1行的系数......

  • 对于那些分别高于或低于0.7或-0.7的系数,我想在单独的文件中列出与这些系数对应的行名加上系数。例如。: 第230行 - 第5812行 - 0.76

我为此目的编写了以下代码。不幸的是,它需要太长的运行时间(我估计差不多一个星期:()。

for (i in 1:7999) {
print("Analyzing row:")
print(i)    
for (j in (i+1):8000) {
    value<- cor(alpha1k[i,],alpha1k[j,],use = "everything",method = "pearson")
    if(value>0.7 | value<(-0.7)){
        aristi <- c(row.names(alpha1k)[i],row.names(alpha1k)[j],value)
        arist1p<-rbind(arist1p,aristi)

    }
}

然后我的问题是,如果有任何办法,我可以更快地做到这一点。我读到了并行进行这些计算,但我不知道如何使这项工作。我希望自己足够清楚,先谢谢你!

1 个答案:

答案 0 :(得分:0)

正如Roland所指出的,您可以使用cor的矩阵版本来简化您的任务。只需转置矩阵即可进行“行”比较。

mydf <- data.frame(a = c(1,2,3,1,2,3,1,2,3,4), b = rep(5,2,10), c = c(1:10))
cor_mat <- cor(t(mydf)) # correlation of your transposed matrix
idx <- which((abs(cor_mat) > 0.7), arr.ind = T) # get relevant indexes in a matrix form
cbind(idx, cor_mat[idx]) # combine coordinates and the correlation

请注意,默认情况下,参数use = everythingmethod = "pearson"用于关联。没有必要指定它们。