prcomp関数とprincomp関数の主な違いを誰かが説明できますか?
どちらかを選択する必要がある特別な理由はありますか?これが関連する場合、私が見ているアプリケーションのタイプは、ゲノム(発現)データセットの品質管理分析です。
ありがとうございました!
prcomp関数とprincomp関数の主な違いを誰かが説明できますか?
どちらかを選択する必要がある特別な理由はありますか?これが関連する場合、私が見ているアプリケーションのタイプは、ゲノム(発現)データセットの品質管理分析です。
ありがとうございました!
これらの2つの関数にはw/r/tの違いがあります
特に、特異値分解(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の最も有用な視覚化です)。
prcomp
TRUE
引数scale
とを設定すると、(単位分散に)スケーリングされ、データが中央に配置されますcenter
。関数を使用してデータを1行でスケーリングおよび平均中心化できることを考えると、これは2つの間の些細な違いですscale
。