我有两个矩阵(不同的行和相同的列)。我想计算两个矩阵的行之间的相关性。 (逐元素相关)。第一个是这样的:
A 2 5 B 6 9 c 7 8
第二个是这样的:
D 8 6 E 1 7 F 7 9
在这种情况下,结果将是一个 3 x 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
您可以使用 Hmisc
包中的 rcorr
获取显着性水平。 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
关于r - R中两个矩阵的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27846787/