2017-12-01 16 views
-2
のフィルタ相関行列

私はRでプログラミングしており、膨大な相関行列を持っています。私はこの行列をフィルタリングして、値が0.7以上の行と列しか持たないようにしたいと思います。 私はすでにサブセットとフィルターを試しましたが、私が望むものは実際には得られません。追加の問題は、あまりにも多くの行/列名があり、私がそれらで作業したくないということです。誰でも助けてくれますか? R:>と<

例えば

1 2 3 4 
1 1 0 0.7 0.6 
2 0 1 0.6 0.6 
3 0.1 0 1 0.8 
4 -0.2 0 0.7 0.9 

対角線外

1 3 4 
1 1 0.7 0.6 
3 0.1 1 0.8 
4 -0.2 0.7 0.9 
+3

を使用して> =しきい値エントリの座標を取得し、あなたが提供できます小さな例? –

+2

提供される例は、対称ではないため、相関行列にすることはできません。 –

答えて

1

ゼロを返すと行(そのためにも対称性に起因した列)の値> =しきい値を持って見つけることapply(..., 1, any)を使用する必要があります。テストのために

ccが問題の行列である場合、当該ccは相関行列ではないので、我々はcor(cc)、代わりにthreshold = 0.6を使用していました。

cc <- matrix(c(1, 0, 0.1, -0.2, 0, 1, 0, 0, 0.7, 0.6, 1, 0.7, 0.6, 0.6, 0.8, 0.9), 4) 
cc <- cor(cc) 

threshold <- 0.6 
cc0 <- cc 
diag(cc0) <- 0 
ok <- apply(abs(cc0) >= threshold, 1, any) 
cc[ok, ok] 

寄付:

  [,1]  [,2] 
[1,] 1.0000000 -0.6375997 
[2,] -0.6375997 1.0000000 

コードの最後の2行が交互にこれを置き換えることができwhich(..., arr = TRUE)

ix <- sort(unique(c(which(abs(cc0) >= threshold, arr = TRUE)))) 
cc[ix, ix] 
+1

これを修正しました。 –

関連する問題