相关矩阵与名称

时间:2013-03-14 15:10:44

标签: r

我有一个大约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)
}

任何更简单,更可靠的命令的想法?

谢谢,

2 个答案:

答案 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的函数或其他聚类函数。订购和情节可能会提供信息。