グループを分離するPCAコンポーネントの選択


13

私はPCAを使用して多変量データを診断するために頻繁に使用しました(数十万の変数と数十または数百のサンプルを含むオミックスデータ)。データは、いくつかのグループを定義するいくつかのカテゴリ独立変数を使用した実験から得られることが多く、対象のグループ間の分離を示すものを見つける前に、いくつかのコンポーネントをよく調べなければなりません。私はそのような差別的なコンポーネントを見つけるかなり原始的な方法を思いつきました、そして私は疑問に思います

  1. これが合理的/正当化できる範囲
  2. 同じことを達成するより良い方法があるかどうか。

これは探索的であることに注意してください。他の人を説得する前に、私は自分自身を説得したいと思います。関心のあるグループを明確に区別するコンポーネント(コントロールと治療など)があることがわかった場合、たとえそれらが応答の分散のわずかな部分を担っていたとしても、たとえば監視されたマシンからの結果よりもそれを信頼します学習。

これが私のアプローチです。Rのpca3dの「メタボ」サンプルデータセットを使用します。

アイデアは、各コンポーネントの分散が独立変数によってどの程度説明できるかを評価することです。このために、各コンポーネントの単純なモデルを計算し、R2をメトリックとして使用して、コンポーネントを「最も興味深い」から「最も興味深い」の順に並べます。

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]

ここに画像の説明を入力してください

コンポーネントをソートして、表示するコンポーネントr2を見つけますorder( lm.r2, decreasing= TRUE )。最初の3つのコンポーネントは2、1、および7です。

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

プロットは次のとおりです。

ここに画像の説明を入力してください

(赤と緑のカテゴリーは、患者ではない被験者の2つのグループであり、区別できないことが予想されます。)

私の質問を再定式化するために、

  1. このアプローチはあなたにとって理にかなっていますか?私の問題は、データdrのように見えることです。また、直感的には、テーブルを回して、独立変数の分散のどの部分が各変数によって説明されるのかを尋ねる必要があると思いますか?最後に、私は(ほとんど)車輪を再発明していると確信しています。
  2. もっと良いものはありますか?

この段階では、部分最小二乗などに切り替えたくないことに注意してください。分類のコンテキストでPCAを診断したいだけです。


2
あなたの興味深い質問について、2つだけコメントしたいと思います。1)コードを示す以外に、あなたのアプローチを言葉で説明してください(ここでの人々は、必ずしもRではなく、さまざまなソフトウェアを使用していることに注意してください)。2)散布図は、床にスパイクがなければあまり説得力がありません。また、アプローチに具体的な疑問がある場合は、質問をより集中的にするためにそれらを声に出してください。
ttnphns

1
編集:明確にするために、最初にPCAを実施してから、特定の変数によって最もよく説明される主成分を分離しようとしていますか?スクリープロットでこれらを交差検証していますか?データセットから選択したxが主成分の分散の多くを説明する場合がありますが、その主成分に沿って分散が非常に低い場合、それが何を意味するのかわかりません。
シャドウトーカー

1
@ssdecontrolさて、計算されたがバックグラウンドノイズを十分に上回っているかどうかを確認するために、貧弱なランダム化を行っています。それが何かを意味するかどうかについて-ポイントは、実際には、通常はそうすることです。とにかく古典的な分析のすべてのセットおよび/または教師付き機械学習を行っているので、PCXが重要な部分で分類器によって説明されるのを見るたびに、(i)この分類器のグループ間で異なるいくつかの変数を見つけ、 ii)SMLを正常にトレーニングできること。R2
1月

2
to find out what share of the overall variance in the data matrix is explained by a given classificationこれだけを知りたい場合は、PCAは必要ありません。グループ間総和に対するグループ間総和の割合を計算するだけです(SStotal-SSwithin)/SStotal。SSwithinはグループ化されたグループ内総和です。
ttnphns

1
PCAを悪用する方法に問題はありませんが、なぜそれが本当に必要なの理解できません。(おそらくあなたがそれを好きだから?)私はあなたの正確な目的を見ることができないので、私はあなたのために何も言うことができませんIs there anything better?
ttnphns

回答:


8

あなたの質問#1への答えはイエスです。あなたの解決策はデータdrです。あなたの質問#2への答えはイエスです。文献には優れた方法があります。

あなたのアプローチでの中心的な問題は、あなたが生じ、すなわち問題高次元データの問題に対処していないということである。あなたの解決策は非常にarbitrary意的であり、いかなる理論的正当性にも欠けています。以下で適切な方法を見つけるのに役立つ文献をいくつか紹介します。n<<p

あなたが大規模で、その結果、あなたの独立変数と従属変数を入れ替えてきたことを除いてあなたは、主成分回帰に似た分析を実行している多変量とは対照的に、(複数の)回帰分析が行われます。多変量回帰では、サンプルサイズが従属変数の数よりも大きいことが必要です。これは、この例では完全に違反している要件です。

データに対してPCAを実行し、多変量回帰を使用することに真剣に取り組んでいる場合は、適切な方法を使用する必要があります。たとえば、MRCEと関連するメソッドを調べてください[1]。

ただし、いくつかの不可解なコメントがありますが、現在提示されている分析のすべては、最終的な目標は、連続変数の大規模なセット(metabo [、-1])と単一のカテゴリ変数(metabo [ 、1])。PCAはこれを達成するための貧弱な方法です。高次元の場合、この問題の解決策には2つの一般的なクラスがあります。1つ目は、スパース性を前提とする解決策、および因子構造を前提とする解決策です。

スパース性ベースのソリューションは、通常、ごくわずかな変数のみが実際に対象のカテゴリ変数に関連していると想定し、この小さなサブセットを見つけようとします。たとえば、DALASS [2]を参照してください。因子構造ベースの方法は、識別変数がカテゴリ変数との真の関係を持つ潜在的な潜在変数の現れであると想定しています。このクラスのメソッドの例は、DLDA [3]です。

あなたのデータについて述べた方法を必ずしも推奨しているわけでないことに注意してください。適切な方法を選択する際には、目標と問題の事前知識を慎重に検討する必要があります。

[1]ロスマン、レヴィナ、朱(2010)。共分散推定によるスパース多変量回帰。Journal of Computational and Graphical Statistics、Volume 19、Number 4、Pages 947-962。

[2] Nickolay T. Trendafilov、Ian T. Jolliffe、DALASS:LASSOによる判別分析の変数選択、計算統計とデータ分析、第51巻、第8号、2007年5月1日、ページ3718-3736。

[3] Yu、Yang(2001)。高次元データ用の直接LDAアルゴリズムと顔認識への応用。パターン認識34、2067-2070。


2
私はこの答えを授与するために新しい賞金を始めました。
1

1
@January:これはいい答えですが、「直接LDA」はせいぜい非常に奇妙なアルゴリズムであると指摘したいと思います。Gaoand Davis、2005を参照してください。 .. D-LDAは、一般的なアプリケーションで大幅なパフォーマンス制限を課す可能性があるため、注意してください。
アメーバは、モニカを復活させる14

@amoebaその引用をありがとう。その特定の方法でコンポーネントを選択する正当な理由がないため、DLDAについてはしばらくの間懸念がありました。私はそれが非常に問題固有の解決策であり、必ずしも顔識別問題を超えて一般化されるわけではありませんが、どのコンポーネントが識別に最も役立つかを知っている問題に簡単に適合させることができます。想定される因子構造で高次元の差別化を実装するすべてのソリューションには問題があります...より良いアプローチを見つけましたか?ここであなたの意見に興味があります。
ahfoss

nk

4

@ahfossはすでにLDAをPCAの分類の類推として指摘しています。実際、これらの2つの方法は相互に関連しており、PLSにも関連しています。

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

PLSはLASSOのような正則化と見なすことができ、まばらなPLSも使用できます(使用していませんが、データはスパース性を想定していない通常のPLSに適しています)。さまざまな正則化方法の良い議論については、例えば、統計学習の要素を参照してください。

np

T=X×W
L=X×B


L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB

実務上の注意:Rで作業する場合、PLS-LDAおよびPCA-LDAモデルを提供する開発中のパッケージがあります。試してみたいかどうか教えてください。


データのedを避けるために、最終的なモデルを独立したデータで検証する(=パフォーマンスを測定する)必要があります。

ここで独立とは、このケース(患者?)が何らかの方法でモデルの適合に寄与しなかったことを意味します。特に、

  • センタリングや標準化など、複数のケースを含む前処理の種類を入力しませんでした
  • PCA / PLS / ...計算を入力しませんでした。
  • ハイパーパラメーターの推定には使用されませんでした。

少数のケースしかないため、リサンプリング戦略が適切です。この状況では、ハイパーパラメーターの最適化のためのトレーニングデータの2番目の内部分割を回避するために、外部知識によってハイパーパラメーター(PCまたはPLSの潜在変数の数、またはLASSOバインドなど)を修正することがおそらく最善です。


交差検証モデルの場合は+1。とっても大事。ただし、OP @Januaryからは、差別に興味がないと述べていますが、彼/彼女の問題は差別/分類分析に非常に適しているようです。
ahfoss

k-means / PCA / etcが同じファミリーに属しているというあなたの主張に同意しません。これは、それらが同じモデルまたはアルゴリズムの特殊なケースであることを意味しますが、これは正しくありません。PCAアルゴリズムは単純な行列計算であるのに対し、k-meansはEMアルゴリズムと比較された反復アルゴリズムです(尤度関数がないため、技術的には正しくありませんが、IMHOの点で依然として有用な比較です)。
ahfoss

1
plsgenomics :: pls.lda関数を参照していますか?そうでない場合、パッケージはどのように異なる/改善されますか?また、興味のある読者には、PLS-LDAは一般に、ダミーコードの結果変数を使用してPLSを実行するだけの一般的な手法よりも優れていることを指摘します。この後者のアプローチは必ずしも間違っているわけではありませんが、0未満または1を超える予測確率を得ることができるので、間違いなく厄介です!
ahfoss 14年

@ahfoss:同じ基盤となるモデルは異なるアルゴリズムで計算できるため、アルゴリズムを意味するものではありません。例えば、PCAの場合、反復(NIPALS、POWER)または非反復(EVD、SVD)アルゴリズムを使用できます。k-meansの代わりに、より良い用語は「クラスター内の平方和を最小化するクラスター分析です。たとえば、k-meansはヒューリスティック近似です」。今は時間がないので、後で答えを確認するか、チャットルームで会ってより良い説明を見つけることができます。
cbeleitesはモニカをサポートします14

1
...技術的な違いはpls::plsr、pls に使用することです(異なるアルゴリズムから選択できます)。そして、モデルの反転や回転など、解釈に役立つことがある後処理関数がたくさんあります。
-cbeleitesはモニカをサポートします14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.