No.08549 主成分分析  【きみか】 2008/12/08(Mon) 15:29

先生の作られたpca(http://aoki2.si.gunma-u.ac.jp/R/pca.html)という主成分分析を行なう関数についての質問です。

データを標準化したのちに,pcaを使用して主成分分析を行ないました。
データを標準化したにも関わらず,データの標準偏差が1以上になってしまいました。

使用したデータでは,分母がnの標準偏差を用いて,標準化を行ないました。分母がn-1として標準化を行なった方が良いのでしょうか。

また,prcompを用いて計算した主成分の係数とpcaを用いて計算した主成分の係数が異なります。計算方法が違うのでしょうか。

お手数をおかけ致しますが,教えて頂けないでしょうか。
お返事をお待ちしております。
よろしくお願い致します。

No.08555 Re: 主成分分析  【青木繁伸】 2008/12/08(Mon) 16:52

標準化したのに標準偏差が1にならないのは,標準化の時と標準偏差を求めるときの分母(nかn-1か)が不一致のためです。単位を揃えるという観点からは,標準化の際にnで割るか,n-1で割るかはどちらでも良いです。

> prcompを用いて計算した主成分の係数とpcaを用いて計算した主成分の係数が異なります。計算方法が違うのでしょうか。

そのページに,「しかし,これらが返す「loadings」は固有ベクトルそのものであって,いわゆる負荷量ではない。」と書いてありますね。

prcomp は重み(固有ベクトル)を表示しますね。pca は主成分負荷量を表示します。
> set.seed(123)
> x <- scale(matrix(rnorm(30), 10)) # 列ごとに標準化します
> colMeans(x) # 列の平均値
[1] -6.505213e-17 -3.469447e-17 3.330669e-17 # 実質0です
> sd(x) # 標準偏差
[1] 1 1 1 # 1です
> r <- cor(x) # 相関係数行列
> eigen(r) # 相関係数行列の固有値・固有ベクトル
$values # 固有値
[1] 2.0376621 0.5941719 0.3681659

$vectors # 固有ベクトル
[,1] [,2] [,3]
[1,] 0.5596713 0.69413342 0.4527105
[2,] 0.6151534 0.01806984 -0.7882003
[3,] -0.5552966 0.71961954 -0.4168854

> prcomp(x) # xは標準化済み
Standard deviations: # 固有値の平方根
[1] 1.4274670 0.7708255 0.6067668

Rotation: # 重み
PC1 PC2 PC3
[1,] 0.5596713 -0.69413342 -0.4527105
[2,] 0.6151534 -0.01806984 0.7882003
[3,] -0.5552966 -0.71961954 0.4168854
> pca(x)$factor.loadings # pcaによる主成分負荷量
PC 1 PC 2 PC 3
Var-1 0.7989123 0.53505572 0.2746897
Var-2 0.8781112 0.01392869 -0.4782538
Var-3 -0.7926676 0.55470107 -0.2529522
> prcomp2(x, pcs=3) # prcompから,主成分負荷量を求める
PC1 PC2 PC3 Contribution
Var.1 0.799 -0.535 -0.275 1.000
Var.2 0.878 -0.014 0.478 1.000
Var.3 -0.793 -0.555 0.253 1.000
Eigen.values 2.038 0.594 0.368
Proportion 67.922 19.806 12.272
Cumulative.prop. 67.922 87.728 100.000

No.08560 Re: 主成分分析  【きみか】 2008/12/08(Mon) 18:39

早速のお返事ありがとうございます。
よくわかりました。
解説して頂き,ありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 042 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る