6

prcomp関数とprincomp関数の主な違いを誰かが説明できますか?

どちらかを選択する必要がある特別な理由はありますか?これが関連する場合、私が見ているアプリケーションのタイプは、ゲノム(発現)データセットの品質管理分析です。

ありがとうございました!

4

1 に答える 1

12

これらの2つの関数にはw/r/tの違いがあります

  • 関数パラメーター(関数を呼び出すときに渡すことができる/渡さなければならないもの);
  • それぞれによって返される値。と
  • 主成分を計算するためにそれぞれが使用する数値手法。


PCAの計算に使用される数値手法

特に、特異値分解(SVD)を介して主成分を計算するprcompと比較して、共分散行列の固有ベクトル分解princompを介して主成分を計算することを考えると、はるかに高速である必要があります(データ行列のサイズとともにパフォーマンスの差が大きくなります)。元のデータマトリックス上。

固有値デコンプは正方行列に対してのみ定義されますが(この手法は特性多項式を解くだけであるため)、固有値デコンプには常に元のデータ行列である共分散行列から計算する述語ステップが含まれるため、これは実際的な制限ではありません。

共分散行列は正方形であるだけでなく、通常、元のデータ行列よりもはるかに小さくなります(属性の数が行の数より少ないか、n <mである限り、ほとんどの場合に当てはまります。

前者(固有ベクトルdecomp)は精度が低くなりますが(違いは重要ではないことがよくあります)、計算は元のデータ行列ではなく共分散行列で実行されるため、はるかに高速です。したがって、たとえば、データ行列がn >> mのような通常の形状、つまり1000行10列の場合、共分散行列は10x10になります。対照的に、prcompは元の1000x10行列でSVDを計算します。

ゲノム発現データのデータマトリックスの形状はわかりませんが、行が数千または数百の場合、prcompはprincompよりも著しく遅くなります。たとえば、pcaがより大きなデータフローで単一のステップとして実行されるかどうか、ネットパフォーマンス(実行速度)が問題になるかどうかなど、あなたのコンテキストがわかりません。したがって、このパフォーマンスが実際にあなたの使用に関連しているかどうかはわかりません。場合。同様に、2つの手法の数値精度の違いが重要であるかどうかを判断するのは困難であり、実際にはデータに依存します。

戻り値

princompは、 7つのアイテムで構成されるリストを返します。prcompは、 5つのリストを返します。

> names(pc1)    # prcomp
    [1] "sdev"     "rotation" "center"   "scale"    "x"       

> names(pc2)    # princomp
    [1] "sdev"     "loadings" "center"   "scale"    "n.obs"    "scores"   "call"    

princompの場合、返される最も重要な項目はコンポーネントのスコア負荷です。

2つの関数によって返される値は、次のように調整(比較)できます。prcompは、特に、 princompによって返される負荷行列と同等のrotationと呼ばれる行列を返します。

prcompの 回転行列に元のデータ行列を掛けると、結果はxにキー設定された行列に格納されます。

最後に、prcompには、スクリープロットを提供するプロットメソッドがあります(各変数/列の相対的および累積的な重要性を示します-私の意見ではPCAの最も有用な視覚化です)。

関数の引数

prcompTRUE引数scaleとを設定すると、(単位分散に)スケーリングされ、データが中央に配置されますcenter。関数を使用してデータを1行でスケーリングおよび平均中心化できることを考えると、これは2つの間の些細な違いですscale

于 2013-01-10T01:15:16.780 に答える