我目前正在使用大型矩阵(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)
}
}
然后我的问题是,如果有任何办法,我可以更快地做到这一点。我读到了并行进行这些计算,但我不知道如何使这项工作。我希望自己足够清楚,先谢谢你!
答案 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 = everything
和method = "pearson"
用于关联。没有必要指定它们。