2

17 列 (1 つの遺伝子の各列) と 34 行 (1 人の患者の各行) のデータフレームがあります。

Patient EXO1 MLH1 MSH2 MSH3 MSH6 PCNA PMS1 PMS2 POLE POLE2 POLE3 POLH RFC2 
1651109    0    0    1    1    1    1    1    1    1     0     1    0    0      
1651648    0    1    1    1    1    0    1    0    1     0     0    1    1  
........

データフレームの名前は、たとえばtestdb. それから私は走ります

res=princomp(testdb);  
summary(res);

そしてそれは示しています

Importance of components:  
                          Comp.1    Comp.2    Comp.3     Comp.4     Comp.5  
Standard deviation     0.6577676 0.4757815 0.4138278 0.39002636 0.37679135  
Proportion of Variance 0.2822533 0.1476757 0.1117206 0.09923892 0.09261812  
Cumulative Proportion  0.2822533 0.4299290 0.5416497 0.64088859 0.73350672  
....

名前がcomp.1 comp.2 comp.3…というのはばかげています. 名前を遺伝子名に戻すにはどうすればよいですか? 出力グラフにいくつかの遺伝子が出力されることはわかってbiplot(res)いますが、それは明らかに遺伝子名を取得する正しい方法ではありません。

4

1 に答える 1

4

これのほとんどはすでにコメントで述べられていますが、私はこれを答えにしています。

主成分分析の成分は、元の変数の線形結合です。そのため、コンポーネントと遺伝子の間に 1 対 1 のマッピングはありません。特別な場合を除いて、すべてのコンポーネントは複数の遺伝子を記述します。ポジティブな貢献をしたものもあれば、ネガティブな貢献をしたものもあります。絶対値が大きいものと小さいものがあります。ローディング マトリックスからこれらの寄与を確認できます。入力するloadings(res)と、各コンポーネントの組成が表示されます。

ローディングマトリックスの特定のコンポーネントの列で、絶対値が最大の遺伝子を見つけることができます。そうすれば、各コンポーネントの「主な貢献者」のようなものを特定できます。しかし、その寄与が1 に非常に近い場合を除き、その成分を遺伝子の同義語として扱うことは、せいぜい誤解を招くだけです。個々の遺伝子に関する分析が必要な場合、PCA は適切なツールではありません。

上記の警告にもかかわらず、「主な貢献者」が必要な場合は、次のコードでそれを行います。

l <- loadings(res)
rownames(l)[apply(l, 2, function(x) which.max(abs(x)))]
于 2013-02-05T22:56:52.567 に答える