2013-06-01 7 views
6

ローディングを使用して主成分分析のスコアを作成したいと考えていますが、データセットのスコアを計算するときにprincomp関数が実際に行っていることを理解できません。おもちゃの例:PRINCOMPローディングからスコアを構築するR

cc <- matrix(1:24,ncol=4) 
PCAcc <- princomp(cc,scores=T,cor=T) 
PCAcc$loadings 

Loadings: 
    Comp.1 Comp.2 Comp.3 Comp.4 
[1,] 0.500 0.866    
[2,] 0.500 -0.289 0.816  
[3,] 0.500 -0.289 -0.408 -0.707 
[4,] 0.500 -0.289 -0.408 0.707 

PCAcc$scores 

     Comp.1  Comp.2  Comp.3 Comp.4 
[1,] -2.92770 -6.661338e-16 -3.330669e-16  0 
[2,] -1.75662 -4.440892e-16 -2.220446e-16  0 
[3,] -0.58554 -1.110223e-16 -6.938894e-17  0 
[4,] 0.58554 1.110223e-16 6.938894e-17  0 
[5,] 1.75662 4.440892e-16 2.220446e-16  0 
[6,] 2.92770 6.661338e-16 3.330669e-16  0 

私の理解では、スコアが負荷と再スケーリング元のデータの線形結合であるということです。 「手」で試してみる:

rescaled <- t(t(cc)-apply(cc,2,mean)) 
rescaled%*%PCAcc$loadings 

    Comp.1  Comp.2  Comp.3 Comp.4 
[1,]  -5 -1.332268e-15 -4.440892e-16  0 
[2,]  -3 -6.661338e-16 -3.330669e-16  0 
[3,]  -1 -2.220446e-16 -1.110223e-16  0 
[4,]  1 2.220446e-16 1.110223e-16  0 
[5,]  3 6.661338e-16 3.330669e-16  0 
[6,]  5 1.332268e-15 4.440892e-16  0 

これらの列は、それぞれ1.707825,2および1.333333の係数でオフになっています。どうしてこれなの?玩具データ行列は各列で同じ分散を有するので、正規化はここでは必要ではない。どんな助けでも大歓迎です。

ありがとうございます!

+1

を必要とするポイントすべて同じ行にあります。したがって、PC1はすべての分散をキャプチャし、他のPCは役に立たなくなります(おそらくノイズから計算されるガベージ)。また、PC1のスコアがゼロ以外であることを明示します。 – flodel

答えて

4

あなたは多分これが( ``スケール(CC))あなたの中心のため、PCAのための最良の選択された例のデータではない、別のノートで

scale(cc,PCAcc$center,PCAcc$scale)%*%PCAcc$loadings 

または容易に

predict(PCAcc,newdata=cc) 
+0

ありがとう、私はスケール関数については知らなかった。なぜ私はprincompが最初に1.707825の倍率で拡大しているのかをよりよく理解することを望んでいました。それはどこから来ていますか?それがカラムの標準偏差であれば意味がありますが、そうではありません。 – Escotch

関連する問題