-1

R からの 3D PCA ビジュアライゼーションをよりポータブルにする方法を見つけようとしています。を使用して 2D マトリックスで PCA を実行しましたprcomp()

  1. データ ポイントの 3D 座標を、それぞれに関連付けられたラベルと色 (RGB) と共にエクスポートするにはどうすればよいですか?
  2. princomp()との実質的な違いはprcomp()何ですか?
  3. HTML5 とキャンバスを使用して 3D PCA プロットを最適に表示する方法に関するアイデアはありますか?

ありがとう!

4

3 に答える 3

6

作業する例を次に示します。

pc <- prcomp(~ . - Species, data = iris, scale = TRUE)
  1. 軸スコアは component から抽出されますx。そのため、次を使用してCSVとして書き出すことができます(エクスポートする方法は言いません):

    write.csv(pc$x[, 1:3], "my_pc_scores.csv")
    

    これらのスコア (PCA に関連付けられたものではなく、自分で割り当てたものである色とラベル) に情報を割り当てたい場合は、それらをスコアのマトリックスに追加してからエクスポートします。上記の例では、それぞれ 50 の観測値を持つ 3 つの種があります。その情報をスコアと一緒にエクスポートしたい場合は、次のようなものが機能します

    scrs <- data.frame(pc$x[, 1:3], Species = iris$Species,
                       Colour = rep(c("red","green","black"), each = 50))
    write.csv(scrs, "my_pc_scores2.csv")
    

    scrs次のようになります。

    > head(scrs)
            PC1        PC2         PC3 Species Colour
    1 -2.257141 -0.4784238  0.12727962  setosa    red
    2 -2.074013  0.6718827  0.23382552  setosa    red
    3 -2.356335  0.3407664 -0.04405390  setosa    red
    4 -2.291707  0.5953999 -0.09098530  setosa    red
    5 -2.381863 -0.6446757 -0.01568565  setosa    red
    6 -2.068701 -1.4842053 -0.02687825  setosa    red
    

    アップデートは RGB に関するポイントを見逃していました。Rでこれを指定する方法については参照?rgbしてください。ただし、RGB文字列だけが必要な場合は、上記を次のように変更してください

                       Colour = rep(c("#FF0000","#00FF00","#000000"), each = 50)
    

    代わりに、必要な RGB 文字列を指定します。

  2. princomp()との本質的な違いprcomp()は、PCA の計算に使用されるアルゴリズムです。生データ行列の特異値分解 (SVD) を使用しprincomp()ながら、共分散または相関行列の固有分解を使用します。は、データ内に少なくとも同数のサンプル (行) と変数 (列) があるデータ セットのみを処理します。行よりも列の方が多いタイプのデータおよびデータセットを処理できます。さらに、考えている用途によっては、おそらくより重要なことですが、数値精度が高いため、SVD は固有分解よりも優先されます。prcomp()princomp()prcomp()

  3. Q にのタグを付けました。これらの専門家が助けてくれることを願っています。応答が得られない場合は、Q からポイント 3 を削除し、特にキャンバスを使用して PC を表示するトピックについて新しい Q を開始します。詳細については、この Q を参照してください。

于 2012-06-02T07:51:38.920 に答える
1

を実行することで、任意の R オブジェクトについて調べることができますstr(object_name)。この場合:

m <- matrix(rnorm(50), nrow = 10)
res <- prcomp(m)
str(m)

prcompを実行してヘルプ ページを見る?prcompと、スコアが にres$xあり、負荷が にあることがわかりますres$rotation。これらはすでに PC によってラベル付けされています。プロットの過程でいくつかの色を割り当てることにしない限り、色はありません。2 つの関数の比較については、それぞれのヘルプ ページを参照して比較princompしてくださいprcomp。基本的に、それらの違いは、舞台裏で使用される方法に関係しています。最後の質問についてはお答えできません。

于 2012-06-02T00:41:21.080 に答える
0

You state that your perform PCA on a 2D matrix. If this is your data matrix there is no way to get 3D PCA's. Ofcourse it might be that your 2D matrix is a covariance matrix of the data, in that case you need to use princomp (not prcomp!) and explictely pass the covariance matrix m like this:

princomp(covmat = m)

Passing the covariance matrix like:

princomp(m)

does not yield the correct result.

于 2012-06-03T16:08:01.943 に答える