2016-07-28 26 views
2

でrcorr()を使用している2つの行列の間でうまくいけば、この記事は重複していませんが、検索にかなり時間を費やして答えを見つけることができませんでした。ペアワイズ比較のみ比較R

私は、このように見える2つの行列を対の相関関係にしようとしています。

Matrix 1 
     gene1  gene2  gene3 
ID1 12  32  43 
ID2 94  34  95 
ID3 90  54  23 
ID4 43  76  65 

Matrix2 
     TE1  TE2  TE3  
ID1 94  90  82 
ID2 23  46  94 
ID3 23  49  39 
ID4 39  34  46 

私は唯一のペアごとの方法で、行列間の比較を行い、ベース関数COR()を使用して、R^2つの値のテーブルを取得することができますよ。結果は次のようになります。

 gene1  gene2  gene3 
TE1 0.98   0.48   0.45 
TE2 0.77   0.46   0.76 
TE3 0.45   0.56   0.76 

どれが素晴らしいですか?しかし、問題は私もp値が必要なので、私は実際の行列が[30,800]と[30,1000]であるため、特定のカットオフより小さいp値しか持たない行列にカットすることができます。データを分かりやすくする)。

rcorr()パッケージは、相関の行列r、p値の行列P、および観測数のベクトルを生成するので、これは素晴らしいです。しかし、私はBETWEEN行列だけを比較する方法を見つけ出すことができませんでした。それはまたWITHIN行列を比較します。

 gene1 gene2 gene3 TE1 TE2 TE3 
gene1 1.0  0.5  0.5  0.5 0.3 0.9 
gene2   1.0  0.4  0.7 0.7 0.5 
gene3     1.0  0.8 0.8 0.5 
TE1       1.0 0.8 0.2 
TE2         1.0 0.7 
TE3          1.0 

これはデータを構成していますが、その点を示しています。これにより、実際に必要なデータが2倍になり、計算が遅くなるだけでなく、視覚的にナンセンスな相関グラフが生成されます。

私の質問は次のとおりです。Hciscパッケージ関数rcorr()を使用する行列内ではなく、その間だけを比較する方法はありますか?

私はまた、行列のリストにcor.testを試してみた:

cor.test(c(matrix1),c(matrix2), method="pearson") 

を私は'x' and 'y' must have the same lengthというエラーが発生します。

次に、高い相関性と低いp値のリストに基づいてマトリックスを実際にサブセット化する方法を理解する必要がありますが、ここで役立つ回答がいくつかあります。

答えて

0

おそらくあり、それを行うための簡単な方法ですが、一つの選択肢は、すべての列のペアのためのcor.test

tmp <- with(expand.grid(seq(ncol(matrix1)), seq(ncol(matrix2))), 
      mapply(function(i, j) cor.test(matrix1[, i], matrix2[, j]), 
        Var1, Var2)) 

を行い、その後、テスト

matrix(unlist(tmp['estimate', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2   TE3 
#gene1 -0.8757869 -0.4755768 -0.008312574 
#gene2 -0.3567850 -0.7585136 -0.834883959 
#gene3 -0.2723512 -0.3764091 0.546779587 

matrix(unlist(tmp['p.value', ]), nrow=ncol(matrix1), 
     dimnames=list(colnames(matrix1), colnames(matrix2))) 
#    TE1  TE2  TE3 
#gene1 0.05156122 0.4181472 0.98941622 
#gene2 0.55555798 0.1371765 0.07851595 
#gene3 0.65756758 0.5323119 0.34025894 

あなたがオブジェクトから要素を抽出することですcor(matrix1, matrix2)の出力を見積もりの​​行列と比較することで正しいことをチェックできます。行列は等しくなければなりません。

+0

私はこの答えを受け入れるでしょう。それは機能しているので、今後使用するかもしれません。ありがとうございました!しかし、私はrcorr()を使って最後に同じことをやっていました。このブログの投稿からの機能[リンク](http://www.sthda.com/english/wiki/correlation-matrix-a-quick-start - ガイド・ツー・アナリシス・フォーマット・アンド・ビジュアライゼーション・アソシエーション・マトリックス・リサーチ・ソフトウェア(analytic-a-correlation-matrix-r-software))。 私は、ペアワイズ比較のpvaluesと相関値を抽出し、名前からの文字列特性を使用して、私が望むペアワイズ比較以外のすべてを除外し、次に 'dcast() 'を使って行列を作成しました。 – lmrta