两个矩阵之间的两两比较,希望这篇文章不是重复的,但我花了一段时间搜索,并一直没能找到答案。只比较使用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值的列表实际对子矩阵进行子集划分,但是我看到这里有一些有用的答案,我需要仔细检查。
所以,我会接受这个答案,因为它的工作原理,我可能会在将来使用它。谢谢!但是我最终还是用rcorr()做了同样的事情,并且使用了这篇博文中的函数[link](http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start -guide到分析格式和 - 可视化-一个相关矩阵使用-R-软件)。 我使用'flatten'函数为每个成对比较提取pvalues和相关值,然后从名称中使用字符串特征来排除除了我想要的成对比较之外的所有内容,然后使用'dcast()'制作矩阵。 – lmrta