我在R中有一个大的相关矩阵结果 - 现在大约有30个项目彼此相关 - 所以这个数组有大约10,000个单元格.我想找到最大的5个和最小的5个结果.我怎样才能做到这一点?
这是一个非常小的部分 - 左上角 - 看起来像:
PL1 V3 V4 V5
PL1 1.00000000 0.19905701 -0.02994034 -0.1533846
V3 0.19905701 1.00000000 0.09036472 0.1306054
V4 -0.02994034 0.09036472 1.00000000 0.1848030
V5 -0.15338465 0.13060539 0.18480296 1.0000000
Run Code Online (Sandbox Code Playgroud)
表中的值总是在1和-1之间,如果有帮助,作为相关矩阵,对角线上方的上半部分是对角线下方的下半部分的副本.
我需要最小的5小于1和最负5包括-1,如果它存在.
提前致谢.
这是另一种粗略的方式来做到这一点(毫无疑问有一种更容易的方法),但是将它包装在一个函数中并不是很难:
编辑:缩短代码.
# Simulate correlation matrix (taken from Patrick's answer)
set.seed(1)
n<-100
x<-matrix(runif(n^2),n,n)
cor<-cor(x)
# Set diagonal and one triangle to to 0:
diag(cor) <- 0
cor[upper.tri(cor)] <- 0
# Get sorted values:
sort <- sort(cor)
# Create a dummy matrix and get lowest 5:
min <- matrix(cor %in% sort[1:5] ,n,n)
which(min,arr.ind=T)
# Same for highest 5:
max <- matrix(cor %in% sort[(n^2-5):(n^2)] ,n,n)
which(max,arr.ind=T)
Run Code Online (Sandbox Code Playgroud)
正如ulidtko所说,另一种选择是制作图表.您可以尝试我的包,称为qgraph,可用于将相关矩阵可视化为网络:
library(qgraph)
qgraph(cor(x),vsize=2,minimum=0.2,filetype="png")
Run Code Online (Sandbox Code Playgroud)
