7

約1000行X500変数の行列があり、数値ではなく名前を使用してこれらの変数の相関行列を確立しようとしているため、結果は次のようになります。

variable1    variable2    variable3    variable4 ...
  mrv1         mrv2         mrv3          mrv4   ...
 smrv1        smrv2        smrv3          smrv4   ...
   .             .           .             .
   .             .           .             .
   .             .           .             .

ここで、mrv1 = variable1に最も関連する変数、smrv1=2番目に関連する変数などです。

私は実際に相関行列を作成しましたが、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

相関行列の関係を視覚化するには、クラスター分析の実行を検討してください。1から相関行列を引いたものを距離行列(または1から相関行列の絶対値を引いたもの)として使用し、それを関数likeagnesまたは他のクラスター関数に渡します。順序付けとそれを使用したプロットは参考になる場合があります。

于 2013-03-14T16:33:06.520 に答える