2016-05-29 6 views
0

以下の問題の助けがあれば幸いです。pearons行間の係数R

Rを使用して、特定の行のデータとデータセット内の他のすべての行との間のピアソン係数を(個別に)調べて、どの行が重要な行と重要な相関関係にあるかを判断しようとしています。 データフレームは20列と50,000行で構成され、データ自体は数値で構成されます。 これを達成するために、cor.testなどの適切な関数を適用できますか?

答えて

2

まず、入力オブジェクトをdata.frameではなく行列として再フォーマットすることをお勧めします。

apply()を使用すると、現在の行と対象行の間でcor()を実行できます。これは、相関のベクトルを生成します。

以下のコードでは、ランダムな行列mを20列と50,000行で生成し、対象行をriに格納します。次に行のマージンがapply()(つまりMARGIN=1L)で、m[ri,]の行に対してcor()を各行に呼び出すことができます。

繰り返しの対象行を含めるか除外するかを選択できます。私のコードサンプルでは、​​結果ベクトルresのインデックスriに値1を持つことが保証されている要素が含まれています。この選択の良い副作用は、結果ベクトルの長さが入力行列の行数と同じ50,000になるため、インデックスが整列することです。除外する場合は、mの代わりにm[-ri,]apply()コールに渡すと、結果ベクトルの長さは49,999になり、その要素は入力マトリックスの行と整列しなくなります。

NR <- 50e3L; NC <- 20L; m <- matrix(runif(NR*NC),NR); 
ri <- 2L; res <- apply(m,1L,cor,m[ri,]); 
str(res); 
## num [1:50000] -0.074 1 0.201 -0.0467 0.2097 ... 
summary(res); 
##  Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
## -0.806700 -0.158500 0.001143 0.001114 0.160800 1.000000 

あなたは後者によって提供される追加情報を取得するために cor.test()cor()を置き換えますが、やや長い実行時間を犠牲にし、より複雑な結果オブジェクト(リストの代わりに、原子ベクトル)することができます。

+0

この作品どうもありがとうございました。結果をExcelシートに出力する方法を提案することは可能でしょうか?私はpvalues < - res $ p.value、res $ "p.value"などのようなものを使用しようとし、NULLメッセージを取得し続けます。 – user5688971

+0

'cor.test()'の結果リストからP値を抽出する方法を尋ねるなら、 'pvalues < - sapply(res、 '[['、 'p.value')']を使うことができます。 RからExcelにデータをエクスポートする方法を尋ねる場合は、[Google検索](https://www.google.ca/search?q=export+r+to+excel)をお勧めします。 Googleの結果があなたのユースケースでうまくいかない場合は、Stack Overflowに関する新しい質問をすることをお勧めします。 – bgoldst

+0

ありがとう、それは完璧に動作します – user5688971

1

代わりに、最初にdata.frameを転記してから、相関ログを使用して相関を視覚化することができます。

# transpose data 
    df2 <- data.frame(t(df)) 


# Example of a correlogram using the `mtcars` dataset: 
    library(corrgram) 

    corrgram(mtcars, order=NULL, lower.panel=panel.shade, 
      upper.panel=NULL, text.panel=panel.txt, 
      main="your correlogram") 

enter image description here