R中两个矩阵的相关性

时间:2015-01-08 18:10:40

标签: r file

我有两个矩阵(不同的行和相同的列)。我想计算两个矩阵的行之间的核心。 (元素式核心化)。第一个是这样的:

A 2 5
B 6 9
c 7 8

,第二个是这样的:

D 8 6
E 1 7
F 7 9

在这种情况下,结果将是3乘3矩阵(逐个元素核心化,如果可能的话,显着性水平)。我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

这就是你要找的东西:

# Create some fake data
set.seed(5) # for reproducibility
mat1 = matrix(rnorm(20), nrow=4)
mat2 = matrix(rnorm(25), nrow=5)

cor(t(mat1),t(mat2)) # With compliments to @user20650  

输出是相关系数矩阵,其中输出矩阵的行是mat1的行索引,列是mat2的行索引。

           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] -0.8160882  0.6347404  0.4746797 -0.1497491 -0.4571110
[2,] -0.3021956  0.5039831  0.3204012 -0.2516131  0.6280471
[3,] -0.1188116  0.1798996  0.4537378  0.6036471  0.3732481
[4,]  0.6682962 -0.4815078 -0.5085583 -0.1232551 -0.1088882

您可以使用rcorr包中的Hmisc获得显着性级别。 rcorr连接两个矩阵并返回所有列对之间的相关性和显着性级别。这里有一种方法可以获得每个矩阵之间的相关性的显着性水平,而不是每个矩阵内的相关性(尽管可能有一种更简单的方法)。

转置函数只是让上面的相关矩阵和下面返回的有效矩阵之间的行和列对应。另请注意,只需将[[3]]更改为[[1]]即可从以下代码中获取相关矩阵。 rcorr返回一个列表,其中第一个元素中的相关矩阵和第三个元素中的重要矩阵。

library(Hmisc)
t(sapply(1:nrow(mat1), function(x) {
    sapply(1:nrow(mat2), function(y) {
      rcorr(mat1[x,],mat2[y,])[[3]][1,2]
    })
  }))

           [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.09202147 0.2499648 0.4191522 0.8100486 0.4389450
[2,] 0.62117186 0.3866162 0.5991440 0.6830495 0.2565734
[3,] 0.84908109 0.7721863 0.4427686 0.2810484 0.5360431
[4,] 0.21755702 0.4115164 0.3815924 0.8434650 0.8616337