私はPCAを使用して多変量データを診断するために頻繁に使用しました(数十万の変数と数十または数百のサンプルを含むオミックスデータ)。データは、いくつかのグループを定義するいくつかのカテゴリ独立変数を使用した実験から得られることが多く、対象のグループ間の分離を示すものを見つける前に、いくつかのコンポーネントをよく調べなければなりません。私はそのような差別的なコンポーネントを見つけるかなり原始的な方法を思いつきました、そして私は疑問に思います
- これが合理的/正当化できる範囲
- 同じことを達成するより良い方法があるかどうか。
これは探索的であることに注意してください。他の人を説得する前に、私は自分自身を説得したいと思います。関心のあるグループを明確に区別するコンポーネント(コントロールと治療など)があることがわかった場合、たとえそれらが応答の分散のわずかな部分を担っていたとしても、たとえば監視されたマシンからの結果よりもそれを信頼します学習。
これが私のアプローチです。Rのpca3dの「メタボ」サンプルデータセットを使用します。
アイデアは、各コンポーネントの分散が独立変数によってどの程度説明できるかを評価することです。このために、各コンポーネントの単純なモデルを計算し、をメトリックとして使用して、コンポーネントを「最も興味深い」から「最も興味深い」の順に並べます。
require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T )
# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )
結果は次のとおりです。プロットは、の独立変数によって説明される各コンポーネントの分散のパーセンテージを示しますmetabo[,1]
。
コンポーネントをソートして、表示するコンポーネントを見つけますorder( lm.r2, decreasing= TRUE )
。最初の3つのコンポーネントは2、1、および7です。
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
プロットは次のとおりです。
(赤と緑のカテゴリーは、患者ではない被験者の2つのグループであり、区別できないことが予想されます。)
私の質問を再定式化するために、
- このアプローチはあなたにとって理にかなっていますか?私の問題は、データdrのように見えることです。また、直感的には、テーブルを回して、独立変数の分散のどの部分が各変数によって説明されるのかを尋ねる必要があると思いますか?最後に、私は(ほとんど)車輪を再発明していると確信しています。
- もっと良いものはありますか?
この段階では、部分最小二乗などに切り替えたくないことに注意してください。分類のコンテキストでPCAを診断したいだけです。
to find out what share of the overall variance in the data matrix is explained by a given classification
これだけを知りたい場合は、PCAは必要ありません。グループ間総和に対するグループ間総和の割合を計算するだけです(SStotal-SSwithin)/SStotal
。SSwithinはグループ化されたグループ内総和です。
Is there anything better?
。