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)
将对角线归零并用于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)