使用R

时间:2016-07-28 08:41:10

标签: r matrix correlation

希望这篇文章不重复,但我花了很长时间搜索并找不到答案。

我有两个矩阵,我试图在它们之间进行成对相关,看起来像这样。

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和观察数量的向量。但是,我还没有找到比较BETWEEN矩阵的方法 - 它也比较了矩阵。我得到的结果如下:

       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值的列表实际对矩阵进行子集化,但我发现这里有一些有用的答案我需要仔细检查。

1 个答案:

答案 0 :(得分: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)的输出与估算矩阵进行比较来检查它是否正确,矩阵应该相等。