2016-07-28 28 views
2

两个矩阵之间的两两比较,希望这篇文章不是重复的,但我花了一段时间搜索,并一直没能找到答案。只比较使用rcorr()在R

我有两个矩阵,我试图使两两之间的相关性,看起来像这样。

Matrix 1 
     gene1  gene2  gene3 
ID1 12  32  43 
ID2 94  34  95 
ID3 90  54  23 
ID4 43  76  65 

Matrix2 
     TE1  TE2  TE3  
ID1 94  90  82 
ID2 23  46  94 
ID3 23  49  39 
ID4 39  34  46 

我能够得到使用基函数COR(),它不仅使矩阵之间的比较R^2个值的表,以成对的方式。结果看起来像这样:

 gene1  gene2  gene3 
TE1 0.98   0.48   0.45 
TE2 0.77   0.46   0.76 
TE3 0.45   0.56   0.76 

这太棒了!但问题是我也需要p值,所以我可以将矩阵切割成只有p值小于某个特定值的矩阵(因为我的实际矩阵[30,800]和[30,1000],我需要一种方法将数据减少到可理解的程度)。

rcorr()包在这方面很出色,因为它产生了相关矩阵r,p值的矩阵P以及观察值数的向量。但是,我还没有能够找出一种方法来比较仅两个矩阵 - 它也比较WITHIN矩阵。我得到如下结果:

 gene1 gene2 gene3 TE1 TE2 TE3 
gene1 1.0  0.5  0.5  0.5 0.3 0.9 
gene2   1.0  0.4  0.7 0.7 0.5 
gene3     1.0  0.8 0.8 0.5 
TE1       1.0 0.8 0.2 
TE2         1.0 0.7 
TE3          1.0 

这是由数据组成的,但它说明了一点。这会产生两倍于我实际需要的数据,并且会减慢计算速度,并产生视觉上无意义的关联图。

所以我的问题是这样的:有没有一种方法来比较之间,而不是在矩阵使用Hmisc包函数rcorr()?

我也试过在矩阵列出了cor.test:

cor.test(c(matrix1),c(matrix2), method="pearson") 

但我得到一个错误,'x' and 'y' must have the same length

接下来,我必须弄清楚如何根据那些具有高相关性和低p值的列表实际对子矩阵进行子集划分,但是我看到这里有一些有用的答案,我需要仔细检查。

回答

0

有可能是做一个简单的方法,但其中一个方案是为每列对做cor.test

tmp <- with(expand.grid(seq(ncol(matrix1)), seq(ncol(matrix2))), 
      mapply(function(i, j) cor.test(matrix1[, i], matrix2[, j]), 
        Var1, Var2)) 

,然后从测试对象

matrix(unlist(tmp['estimate', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2   TE3 
#gene1 -0.8757869 -0.4755768 -0.008312574 
#gene2 -0.3567850 -0.7585136 -0.834883959 
#gene3 -0.2723512 -0.3764091 0.546779587 

matrix(unlist(tmp['p.value', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2  TE3 
#gene1 0.05156122 0.4181472 0.98941622 
#gene2 0.55555798 0.1371765 0.07851595 
#gene3 0.65756758 0.5323119 0.34025894 

提取元素您可以通过比较cor(matrix1, matrix2)的输出和估计矩阵来检查它是否正确,矩阵应该是相等的。

+0

所以,我会接受这个答案,因为它的工作原理,我可能会在将来使用它。谢谢!但是我最终还是用rcorr()做了同样的事情,并且使用了这篇博文中的函数[link](http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start -guide到分析格式和 - 可视化-一个相关矩阵使用-R-软件)。 我使用'flatten'函数为每个成对比较提取pvalues和相关值,然后从名称中使用字符串特征来排除除了我想要的成对比较之外的所有内容,然后使用'dcast()'制作矩阵。 – lmrta