我有一个大约1000行X 500变量的矩阵,我试图用名称而不是数字为这些变量建立一个相关矩阵,所以结果应该是这样的
variable1 variable2 variable3 variable4 ...
mrv1 mrv2 mrv3 mrv4 ...
smrv1 smrv2 smrv3 smrv4 ...
. . . .
. . . .
. . . .
其中mrv1 =变量1的最相关变量,smrv1 =第二个最相关的变量,依此类推。
我实际上已经建立了相关矩阵,但是使用了for循环和一个非常复杂的命令(可能是有史以来最糟糕的命令,但它确实有效!)。我期待通过适当的命令建立这个,这是我现在使用的命令。
mydata <- read.csv("location", header=TRUE, sep=",")
lgn <- length(mydata)
crm <- cor(mydata)
k <- crm[,1]
K <- data.frame(rev(sort(k)))
A <- data.frame(rownames(K))
for (x in 2:lgn){
k <- crm[,x]
K <- data.frame(rev(sort(k)))
B <- data.frame(rownames(K))
A <- cbind(A,B)
}
任何更简单,更可靠的命令的想法?
谢谢,
答案 0 :(得分:6)
此示例是否适用于您想要的内容?
W <- rnorm( 10 )
X <- rnorm( 10 )
Y <- rnorm( 10 )
Z <- rnorm( 10 )
df <- round( cor( cbind( W , X , Y , Z ) ) , 2 )
df
# W X Y Z
# W 1.00 -0.50 -0.36 -0.27
# X -0.50 1.00 -0.42 -0.02
# Y -0.36 -0.42 1.00 0.17
# Z -0.27 -0.02 0.17 1.00
apply( df , 2 , FUN = function(x){ j <- rev(order(x)); y <- names(x)[j] } )
# W X Y Z
# [1,] "W" "X" "Y" "Z"
# [2,] "Z" "Z" "Z" "Y"
# [3,] "Y" "Y" "W" "X"
# [4,] "X" "W" "X" "W"
#And use abs() if you don't care about the direction of the correlation (negative or postive) just the magnitude
apply( df , 2 , FUN = function(x){ j <- rev(order( abs(x) )); y <- names(x)[j] } )
# W X Y Z
# [1,] "W" "X" "Y" "Z"
# [2,] "X" "W" "X" "W"
# [3,] "Y" "Y" "W" "Y"
# [4,] "Z" "Z" "Z" "X"
答案 1 :(得分:1)
要想象相关矩阵中的关系,您可以考虑进行聚类分析。使用一个减去相关矩阵作为距离矩阵(或者可能一个减去相关矩阵的绝对值),然后将其传递给类似agnes
的函数或其他聚类函数。订购和情节可能会提供信息。