2011-07-21 7 views
13

多くの変数を持つ時系列でcor()を実行すると、各変数の行と列を持つ表が戻ってきて、それらの相関関係が示されます。相関テーブルを降順リストとして表示

どのようにして、この表を相関が最も高いものから最も相関が低いものからリストすることができますか(すべてのNA結果とその結果を元に戻す結果(つまりAとAの相関))。逆の(負の)結果を絶対値としてカウントしたいが、それでもなお負の値として表示する。

だから、所望の出力は次のようなものになるだろう:

A,B,0.98 
A,C,0.9 
C,R,-0.8 
T,Z,0.5 

答えて

13

は、ここで私はこれを行うに考えることが多くの方法の一つです。私は私が覚えているためmelt()構文が簡単だったので、リシェイプパッケージを使用しますが、melt()コマンドは、かなり簡単にベースRコマンドで行うことができる:

require(reshape) 
## set up dummy data 
a <- rnorm(100) 
b <- a + (rnorm(100, 0, 2)) 
c <- a + b + (rnorm(100)/10) 
df <- data.frame(a, b, c) 
c <- cor(df) 
## c is the correlations matrix 

## keep only the lower triangle by 
## filling upper with NA 
c[upper.tri(c, diag=TRUE)] <- NA 

m <- melt(c) 

## sort by descending absolute correlation 
m <- m[order(- abs(m$value)), ] 

## omit the NA values 
dfOut <- na.omit(m) 

## if you really want a list and not a data.frame 
listOut <- split(dfOut, 1:nrow(dfOut)) 
10

corsがある相関行列)ベースRの使用:

up <- upper.tri(cors) 
out <- data.frame(which(up, arr.ind=TRUE), cor=cors[up]) 
out <- out[!is.na(out$cor),] 
out[order(abs(out$cor), decreasing=TRUE),] 
2

...を相関呼び出しに置き換えます。あなたは相関関係にNAの多くを取得している場合は

library(reshape) 
x <- subset(melt(cor(...)), value != 1 | value != NA) 
x <- x[with(x, order(-abs(x$value))),] 

することは、おそらくあなたの相関呼び出しでuse="complete.obs"引数を使用してみてください。

関連する問題