tetsunosukeのnotebook

tetsunosukeのメモです

Rで主成分分析

おそらく今年最後のR入門記録記事です。

今回は下記のような五教科の点数を個人ごとに記録したデータを使います。
(実際のデータ量はもっと多いです)

> csv
   kokugo syakai suugaku rika eigo
1      35     24       4   10   43
2      39     74      30   43   61
3      70     94      33   33   85
4      49     42      33   22   88
5       7      8      13    5   33
6      24     56      24   10   62
7      57     74      36   43   87


それぞれのデータについて平均を引いて標準偏差で割った値を用いて、princomp を用いて分析を行います(引数cor=FALSEの場合)

> pc = princomp(~kokugo+syakai+rika+suugaku+eigo, data=csv)
> pc
Call:
princomp(formula = ~kokugo + syakai + rika + suugaku + eigo, 
    data = csv)

Standard deviations:
   Comp.1    Comp.2    Comp.3    Comp.4    Comp.5 
1.8781853 0.7837910 0.6922202 0.5242323 0.3226508 

 5  variables and  28 observations.

ここでのstandard deviationsは固有値を表す。(二乗すると固有値になる)

固有ベクトルは

>  unclass(loadings(pc))
            Comp.1      Comp.2     Comp.3     Comp.4     Comp.5
kokugo  -0.4198966  0.70995590  0.1388390  0.4041950 -0.3701346
syakai  -0.4718859  0.26678238  0.3007108 -0.6091145  0.4946750
rika    -0.4164392 -0.54803399  0.5499553  0.4560857  0.1255873
suugaku -0.4797564 -0.34643834 -0.2123652 -0.4176329 -0.6559710
eigo    -0.4443227 -0.06655078 -0.7367136  0.2883999  0.4150022

固有値は

> pc$sd^2
   Comp.1    Comp.2    Comp.3    Comp.4    Comp.5 
3.5275799 0.6143283 0.4791688 0.2748195 0.1041036 

で表されるため、固有値の総和のうちの割合である寄与率を計算すると

> pc$sd^2/sum(pc$sd^2)
    Comp.1     Comp.2     Comp.3     Comp.4     Comp.5 
0.70551599 0.12286565 0.09583376 0.05496389 0.02082071 

したがって、Comp.1, Comp.2 を持つデータを主成分であると判断できる。
この時の固有ベクトルは、Comp.1 に対してはすべてマイナスの0.4程度。これらは総合的な点数を表していると解釈できます。また、Comp.2 に対しては、国語と社会、理科と数学、で明らかにプラスとマイナスが分かれているのでこれは理系科目・文系科目の指標と言えます。

主成分スコアはデータと、固有ベクトルの積なので、

> a = data.matrix(csv)
> b = data.matrix(unclass(loadings(pc))[,1:2])

> a %*% b

          Comp.1      Comp.2
 [1,]  2.8477916  0.87904740
 [2,] -1.0166761 -0.68571105
 [3,] -2.4577717  0.86931935
 [4,] -0.4767560 -0.32676212

これらに基づいてプロットすると

> plot(a %*% b)
> grid(10,10)

下記のような散布図になります。
f:id:kidd-number5:20111221081729p:image

最も右下に位置したデータは5番目のデータで、性質上理系科目が強く現れていることを示します。

なお、この分析結果をbiplotを使って描画すると下記のように示されますが、データの軸がすべて出てしまっていて、どの成分が・・・というのはちょっとよくわからないです。(不勉強だから)...これは実際は5次元のデータなんだよね・・・

f:id:kidd-number5:20111221082253p:image