R:根据值 > 和 < 过滤相关矩阵

Jud*_*ith 1 r filter correlation

我在 R 中编程并且有一个巨大的相关矩阵。我想过滤这个矩阵,以便我只有包含值 >0.7 或 <-0.7 的行和列。我已经尝试过子集和过滤器,但并没有真正得到我想要的。另一个问题是行/列名称太多,我不想处理它们。有人可以帮忙吗?

例如

  1    2  3   4  
1 1    0  0.7 0.6  
2 0    1  0.6 0.6  
3 0.1  0  1   0.8  
4 -0.2 0  0.7 0.9  
Run Code Online (Sandbox Code Playgroud)

应该回来

  1    3    4   
1 1    0.7  0.6  
3 0.1  1    0.8  
4 -0.2 0.7  0.9
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 5

将对角线归零并用于apply(..., 1, any)查找具有值 >= 阈值的行(以及由于对称性而导致的列)。

对于测试,如果cc是问题中的矩阵,那么我们使用了cor(cc)threshold = 0.6而是因为cc在问题中不是相关矩阵。

cc <- matrix(c(1, 0, 0.1, -0.2, 0, 1, 0, 0, 0.7, 0.6, 1, 0.7, 0.6, 0.6, 0.8, 0.9), 4)
cc <- cor(cc)

threshold <- 0.6
cc0 <- cc
diag(cc0) <- 0
ok <- apply(abs(cc0) >= threshold, 1, any)
cc[ok, ok]
Run Code Online (Sandbox Code Playgroud)

给予:

           [,1]       [,2]
[1,]  1.0000000 -0.6375997
[2,] -0.6375997  1.0000000
Run Code Online (Sandbox Code Playgroud)

最后两行代码可以交替替换为这个,它使用获取条目的坐标 >= 阈值 which(..., arr = TRUE)

ix <- sort(unique(c(which(abs(cc0) >= threshold, arr = TRUE))))
cc[ix, ix]
Run Code Online (Sandbox Code Playgroud)