Rで因子分析
因子分析は心理学の分野で最も多く用いられる多変量解析の手法の1つであり、質問紙法による調査などで力を発揮することが多い。とりあえず、ここではデータ解析ソフトRを用いて因子分析を行うための手順を紹介する。詳しくは「心理学でよく使う多変量解析」のページを参考にしていただきたい。
Rに限らず、因子分析を行う際に 観測数(行数)>変数(列数) ということに注意しなければならず、実際には観測数は変数の10倍程度あることが望ましい。例えば、以下の例で左は良い例で右は悪い例である。これを守らないと、ソフトによってはエラーが出てしまう。
| 良い例 | 悪い例 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
実際に、以下のデータを用いて因子分析を行ってみよう。
| 項目1 | 項目2 | 項目3 | 項目4 | 項目5 | |
| 被験者1 | 5 | 4 | 5 | 3 | 5 |
| 被験者2 | 2 | 4 | 1 | 1 | 3 |
| 被験者3 | 1 | 4 | 5 | 2 | 4 |
| 被験者4 | 2 | 2 | 4 | 1 | 2 |
| 被験者5 | 5 | 3 | 3 | 2 | 5 |
| 被験者6 | 4 | 2 | 1 | 4 | 4 |
| 被験者7 | 4 | 1 | 3 | 2 | 2 |
| 被験者8 | 5 | 1 | 1 | 1 | 4 |
| 被験者9 | 1 | 1 | 1 | 1 | 2 |
| 被験者10 | 5 | 4 | 5 | 1 | 5 |
| 被験者11 | 2 | 1 | 3 | 2 | 2 |
| 被験者12 | 4 | 3 | 5 | 1 | 2 |
| 被験者13 | 2 | 5 | 3 | 2 | 4 |
| 被験者14 | 5 | 1 | 2 | 1 | 5 |
| 被験者15 | 1 | 5 | 1 | 5 | 1 |
| 被験者16 | 4 | 5 | 2 | 3 | 2 |
| 被験者17 | 3 | 2 | 5 | 1 | 5 |
| 被験者18 | 5 | 4 | 4 | 2 | 1 |
| 被験者19 | 3 | 4 | 1 | 2 | 4 |
| 被験者20 | 4 | 1 | 1 | 3 | 4 |
| 被験者21 | 3 | 2 | 4 | 1 | 3 |
-プログラム例 最初から実装されているfactanal()を用いる
factanal()を使用する場合,引数には因子数を指定するfactors=と回転方法を指定するrotation=""の2つを指定しなければなりません。回転方法ではvarimax, promaxなどが指定できるが,何も指定しない場合は回転前の結果を出力します。
> dat
[,1] [,2] [,3] [,4] [,5]
[1,] 5 4 5 3 5
[2,] 2 4 1 1 3
[3,] 1 4 5 2 4
[4,] 2 2 4 1 2
[5,] 5 3 3 2 5
[6,] 4 2 1 4 4
[7,] 4 1 3 2 2
[8,] 5 1 1 1 4
[9,] 1 1 1 1 2
[10,] 5 4 5 1 5
[11,] 2 1 3 2 2
[12,] 4 3 5 1 2
[13,] 2 5 3 2 4
[14,] 5 1 2 1 5
[15,] 1 5 1 5 1
[16,] 4 5 2 3 2
[17,] 3 2 5 1 5
[18,] 5 4 4 2 1
[19,] 3 4 1 2 4
[20,] 4 1 1 3 4
[21,] 3 2 4 1 3
> factanal(dat,factors=2,rotation="varimax")
-出力例
Call:
factanal(x = dat, factors = 2, rotation = "varimax")
Uniquenesses: #独自性 1-(独自性)=(共通性)
[1] 0.916 0.005 0.493 0.585 0.894
Loadings: #因子負荷量
Factor1 Factor2
[1,] -0.106 0.270
[2,] 0.994
[3,] 0.234 0.672
[4,] 0.303 -0.569
[5,] 0.322
Factor1 Factor2
SS loadings 1.146 0.960 #因子負荷量の2乗和
Proportion Var 0.229 0.192 #寄与率
Cumulative Var 0.229 0.421 #累積寄与率
Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 2.44 on 1 degree of freedom.
The p-value is 0.118
-プログラム例 factanal2()を用いる場合
factanal2()を使用する場合,因子数と回転数をfactanal()と同じように指定できますが,こちらの関数は因子数も回転数もしてしなくてもエラーがでません(つまり因子数を自動的に決めてくれるということ)。
> factanal2(dat,rotation="varimax")
-出力例
[1] H0: 2 factors are sufficient.
Chi sq. d.f. P value
2.4381291 1.0000000 0.1184174
[1] Factor loadings(rotation:varimax) #因子負荷量
Factor1 Factor2 Communality #共通性
-0.10560814 0.26976547 0.08392649
0.99356319 -0.08850228 0.99500046
0.23380898 0.67246908 0.50688131
0.30300128 -0.56867509 0.41520114
-0.04065882 0.32241797 0.10560649
SS.loadings 1.14645044 0.96016544 2.10661588 #因子負荷量の2乗和
Proportion 22.92900883 19.20330879 42.13231762 #寄与率
Cum.Prop. 22.92900883 42.13231762 NA #累積寄与率