4

多くの列を持つデータフレームを指定して、Rでエレガントな方法でランク相関行列を生成するにはどうすればよいですか? 組み込み関数が見つからなかったので、試してみました

> test=data.frame(x=c(1,2,3,4,5), y=c(5,4,3,2,1))
> cor(rank(test))

(簡単にするために2列のみ、実際のデータには5列あります)

> Error in cor(rank(test)) : supply both 'x' and 'y' or a matrix-like 'x'

これはrank、単一のベクトルを取るためだと考えました。それで、私は試しました

> cor(lapply(test,rank))

データフレームの各列に適用されるランクを取得し、データフレームをリストとして扱い、エラーが発生しました

> supply both 'x' and 'y' or a matrix-like 'x'

そして、私は最終的に何かを操作することになりました

> cor(data.frame(lapply(test,rank)))
   x  y
x  1 -1
y -1  1

ただし、これはかなり冗長で醜いようです。もっと良い方法があるに違いないと思っています。

4

1 に答える 1

6

あなたは間違っています -代わりにkendallメソッド引数を使用してください:cor()

R> testdf <- data.frame(x=c(1,2,3,4,5), y=c(5,4,3,2,1))  
R> cor(testdf, method="kendall") 
   x  y 
x  1 -1    
y -1  1   
R> 

からhelp(cor):

の場合cor()、 method が"kendall"またはの場合"spearman"、Kendall の tau または Spearman の rho 統計を使用して、ランクベースの関連尺度が推定されます。これらはより堅牢であり、データが二変量正規分布から必ずしも得られない場合に推奨されています。の場合 cov()、ピアソン以外の方法は珍しいですが、完全を期すために利用できます。"spearman"基本的に計算することに注意してくださいcor(R(x), R(y)) (またはcov(.,.)) where R(u) := rank(u, na.last="keep"). 値が欠落している場合、ランクは使用の値に応じて計算されます。これは、完全な観察に基づくか、ペアごとに再ランク付けされたペアごとの完全性に基づいて計算されます。

于 2013-05-21T16:29:02.640 に答える