7

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

关于更简单、更可靠的命令的任何想法?

谢谢,

4

2 回答 2

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"
于 2013-03-14T15:25:42.917 回答
1

要可视化相关矩阵中的关系,您可以考虑进行聚类分析。使用一减去相关矩阵作为距离矩阵(或者可能是一减去相关矩阵的绝对值),然后将其传递给类似函数agnes或其他聚类函数。排序和情节可能会提供信息。

于 2013-03-14T16:33:06.520 回答