R関数prcompとprincompの違いは何ですか?


70

QモードとRモードの主成分分析(PCA)について比較?prcomp?princompてみました。しかし正直なところ、私はそれを理解していません。誰でも違いを説明できますか?


2
Rの関数prcompとprincompの違い、または「Qモード」と「RモードPCA」の違いに関する質問ですか?2つは無関係です。
ブレット

久しぶりです。しかし、時間があればすぐに確認します。IIRC私は実際にいくつかの違いがありました
...-hans0l0

回答:


50

それらの違いは、実行するPCAの種類とは関係なく、使用する方法だけです。ヘルプページについてprcompこう述べています。

計算はeigen、共分散行列を使用するのではなく、(中心化され、おそらくスケーリングされた)データ行列の特異値分解によって行われます。これは一般に、数値精度の推奨される方法です。

一方、princomp ヘルプページには次のように記載されています。

計算はeigen、によって決定される相関行列または共分散行列を使用して行われcorます。これは、S-PLUSの結果との互換性のために行われます。計算の好ましい方法は、で行われるようにsvdon を使用することです。xprcomp

だから、prcomp好ましい実際にあなたが大きな違いを見ることはほとんどありませんが、(あなたはヘルプページ上の例を実行した場合たとえば、あなたは同じ結果を取得する必要があります)。


1
私の答えに使用されるさまざまな基本的な線形代数とLAPACKのルーチンにいくつかの陰惨な技術的な詳細があるPCAの主要コンポーネント(共分散行列の固有ベクトル)が互いに直交しているのはなぜか?
シルバーフィッシュ

1
また、データのSVDによるデータのPCAの理由を参照してくださいで実装されているデータマトリックスのSVD prcompが推奨される方法である理由については、
アメーバは、2015

22

通常、多変量解析(相関の計算、潜在性の抽出など)は、特徴または質問であるデータ列で行われます。一方、サンプル単位、行はrの回答者です。したがって、この方法はRウェイ分析と呼ばれます。一方で時には、しかし、あなたは、responsentsの多変量解析を行うことをお勧めしますQ uestionsをサンプル単位として扱われます。それがQウェイ分析でしょう。

2つの間に正式な違いはないため、同じ機能で両方を管理でき、データを転置するだけです。ただし、標準化と結果の解釈の問題には違いがあります。

これは、一般的な応答である:私は、特にRの機能を触れないでくださいprcompprincomp私はRのユーザーじゃないと、それらの間の違いの可能性を認識していないですので。


5

Gregory B. Andersonによる有用かつ具体的なドキュメントのタイトルPRINCIPAL COMPONENT ANALYSIS IN R AN EXAMINATION OF THE DIFFERENT FUNCTIONS AND METHODS TO PERFORM PCAは、このトピックに関する詳細情報を提供しています。

以下の2つの段落が導入部から抽出されました。

Rには、欠損値なしでPCAを実行する2つの一般的な方法があります。(1)スペクトル分解(Rモード[固有分解]とも呼ばれます)および(2)特異値分解(Qモード; R Development Core Team 2011)。これらのメソッドは両方とも、関数eigen(Rモード)およびsvd(Qモード)をそれぞれ使用して手書きで実行するか、statsパッケージおよびその他の追加の利用可能なパッケージにある多くのPCA関数を使用して実行できます。スペクトル分解法は変数間の共分散と相関を調べますが、特異値分解法はサンプル間の共分散と相関を調べます。どちらの方法もR内で簡単に実行できますが、特異値分解法(つまり、

このドキュメントでは、RでPCAを実行するさまざまな方法の比較に焦点を当て、統計パッケージ内の正常性を調べるための適切な視覚化手法を提供します。より具体的には、このドキュメントでは、PCA用に作成された、またはPCAで使用できる6つの異なる関数、eigen、princomp、svd、pr​​comp、PCA、およびpcaを比較します。ドキュメント全体で、これらの機能を実行するために不可欠なRコードは、フォントCourier Newを使用してテキスト内に埋め込まれ、Tinn-R(https://sourceforge.net/projects/tinn-r)で提供される技術を使用して色分けされています。さらに、シミュレーション手順を使用して関数の結果を比較し、出力から提供される固有値、固有ベクトル、およびスコアが異なる方法で異なるかどうかを確認します。


2
リンクが壊れる傾向があるため(たとえば、ページが移動したり削除されたりした場合)、スタンドアロンの場合の回答の方が優れています。あなたの答えを拡大してみませんか?
パトリッククーロンベ14

@PatrickCoulombe、完了しました。ご提案ありがとうございます。これについては、今後お知らせします。
ペンジー14

1

共分散行列を使用する場合、両者は異なります。(正規化)トレーニングデータをスケーリングするとき、prcomp使用する分母としてではなく使用その分母として。これら2つの分母の違いは、主成分分析に関するこのチュートリアルで説明されていますn1princompn

以下は私のテスト結果です。

> job<-read.table("./job_perf.txt", header=TRUE, sep="")
> pc.cr<-prcomp(job, scale=TRUE, cor=TRUE, scores=TRUE)
> pc.cr1<-princomp(job, scale=TRUE, cor=TRUE, scores=TRUE)
> pc.cr$scale
    commun probl_solv    logical      learn   physical appearance
  5.039841   1.689540   2.000000   4.655398   3.770700   4.526689
> pc.cr1$scale
    commun probl_solv    logical      learn   physical appearance
  4.805300   1.610913   1.906925   4.438747   3.595222   4.316028

テストデータ:

commun probl_solv logical learn physical appearance 12 52 20 44 48 16 12 57 25 45 50 16 12 54 21 45 50 16 13 52 21 46 51 17 14 54 24 46 51 17 22 52 25 54 58 26 22 56 26 55 58 27 17 52 21 45 52 17 15 53 24 45 53 18 23 54 23 53 57 24 25 54 23 55 58 25

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.