R言語を使いWeb教材「アイスクリーム屋さんで学ぶ楽しい統計学」1の「因子分析 (1)」について進めていきます(第8回)。
前回(第7回)の相関行列と同じデータを用いたので、前回と同じようにあらかじめcsv形式のファイル(icecream-chosa.csv)を作成しておく。
21種類のアイスクリームから、13種類のアイスクリームのデータだけを考えることにするため、まずはデータを抽出する。
> getwd()
[1] "C:/Users/Katsumasa/Documents"
> list.files()
[1]
"icecream-chosa.csv"
> 多変量データ<-read.csv("icecream-chosa.csv")
> 十三種類の多変量データ<-多変量データ[,c("ミルクティー","マカダミアナッツ","クッキー","チョコレート","アーモンド","ミント","キャラメル","ウォールナッツ","チョコチップ","抹茶","マロン","チョコミント","あずき")]
抽出した13種類の相関行列を求める。
> 十三種類の相関行列<-cor(十三種類の多変量データ)
固有値を求め、それを折れ線グラフとして描く。
> 固有値<-eigen(十三種類の相関行列)$values
> 固有値
[1] 3.7790114 1.9906821 1.7023530 1.2942605 0.9209949 0.8113630 0.6130375 0.5240068 0.4259475 0.3433724 0.2513264 0.2245949 0.1190497
> plot(固有値,type="b")

4番目から5番目までの固有値の傾きは急だが、それ以降はなだらかになっている。
そこで、4つの共通因子を仮定する。残りは仮定しても大勢に影響はないと判断する
次に、R関数の
factanal ()を用いて、因子分析を実行し、因子負荷(あるいは因子負荷量)等を求める。
- 初期解
> 十三種類因子分析回転なし<-factanal(十三種類の多変量データ,factors=4,rotation="none")
> print(十三種類因子分析回転なし,cutoff=0)
Call:
factanal(x = 十三種類の多変量データ, factors = 4, rotation = "none")
Uniquenesses:
ミルクティー マカダミアナッツ クッキー チョコレート アーモンド ミント キャラメル ウォールナッツ チョコチップ
0.829 0.395 0.516 0.541 0.533 0.088 0.651 0.308 0.005
抹茶 マロン チョコミント あずき
0.739 0.218 0.216 0.588
Loadings:
Factor1 Factor2 Factor3 Factor4
ミルクティー 0.390 0.110 0.049 -0.068
マカダミアナッツ 0.649 0.088 0.180 0.379
クッキー 0.420 0.442 -0.307 0.134
チョコレート 0.117 0.664 0.025 0.063
アーモンド 0.380 0.285 0.167 0.462
ミント -0.120 0.174 0.931 -0.004
キャラメル 0.433 0.349 0.111 -0.164
ウォールナッツ 0.646 0.139 0.237 0.447
チョコチップ -0.008 0.997 -0.015 -0.001
抹茶 0.414 -0.014 0.274 -0.121
マロン 0.695 0.105 0.151 -0.516
チョコミント -0.030 0.278 0.840 -0.031
あずき 0.607 0.123 -0.031 -0.165
Factor1 Factor2 Factor3 Factor4
SS loadings 2.550 2.007 1.898 0.919
Proportion Var 0.196 0.154 0.146 0.071
Cumulative Var 0.196 0.351 0.497 0.567
Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 49.15 on 32 degrees of freedom.
The p-value is 0.0269
> 共通性<-1-十三種類因子分析回転なし$uniquenesses
> 共通性
ミルクティー マカダミアナッツ クッキー チョコレート アーモンド ミント キャラメル ウォールナッツ チョコチップ
0.1711601 0.6049774 0.4844033 0.4590707 0.4673100 0.9124093 0.3487521 0.6922128 0.9950000
抹茶 マロン チョコミント あずき
0.2611703 0.7823473 0.7839050 0.4115726
- バリマックス回転(直交回転)
> 十三種類因子分析直交<-factanal(十三種類の多変量データ,factors=4)
> print(十三種類因子分析直交,cutoff=0)
Call:
factanal(x = 十三種類の多変量データ, factors = 4)
Uniquenesses:
ミルクティー マカダミアナッツ クッキー チョコレート アーモンド ミント キャラメル ウォールナッツ チョコチップ
0.829 0.395 0.516 0.541 0.533 0.088 0.651 0.308 0.005
抹茶 マロン チョコミント あずき
0.739 0.218 0.216 0.588
Loadings:
Factor1 Factor2 Factor3 Factor4
ミルクティー 0.361 -0.009 0.086 0.182
マカダミアナッツ 0.317 0.035 0.037 0.709
クッキー 0.243 -0.327 0.468 0.316
チョコレート 0.093 0.090 0.648 0.149
アーモンド 0.062 0.097 0.245 0.628
ミント 0.023 0.950 0.036 0.088
キャラメル 0.473 0.082 0.310 0.149
ウォールナッツ 0.282 0.093 0.080 0.773
チョコチップ 0.045 0.127 0.988 0.033
抹茶 0.431 0.190 -0.072 0.184
マロン 0.881 0.058 0.051 0.013
チョコミント 0.105 0.860 0.149 0.107
あずき 0.583 -0.121 0.102 0.215
Factor1 Factor2 Factor3 Factor4
SS loadings 1.921 1.853 1.827 1.772
Proportion Var 0.148 0.143 0.141 0.136
Cumulative Var 0.148 0.290 0.431 0.567
Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 49.15 on 32 degrees of freedom.
The p-value is 0.0269
> 共通性<-1-十三種類因子分析直交$uniquenesses
> 共通性
ミルクティー マカダミアナッツ クッキー チョコレート アーモンド ミント キャラメル ウォールナッツ チョコチップ
0.1711601 0.6049774 0.4844033 0.4590707 0.4673100 0.9124093 0.3487521 0.6922128 0.9950000
抹茶 マロン チョコミント あずき
0.2611703 0.7823473 0.7839050 0.4115726
改めて、バリマックス回転後の因子負荷を見てみる。
> print(十三種類因子分析直交$loadings,cutoff=0,sort=TRUE)
Loadings:
Factor1 Factor2 Factor3 Factor4
マロン 0.881 0.058 0.051 0.013
あずき 0.583 -0.121 0.102 0.215
ミント 0.023 0.950 0.036 0.088
チョコミント 0.105 0.860 0.149 0.107
チョコレート 0.093 0.090 0.648 0.149
チョコチップ 0.045 0.127 0.988 0.033
マカダミアナッツ 0.317 0.035 0.037 0.709
アーモンド 0.062 0.097 0.245 0.628
ウォールナッツ 0.282 0.093 0.080 0.773
ミルクティー 0.361 -0.009 0.086 0.182
クッキー 0.243 -0.327 0.468 0.316
キャラメル 0.473 0.082 0.310 0.149
抹茶 0.431 0.190 -0.072 0.184
Factor1 Factor2 Factor3 Factor4
SS loadings 1.921 1.853 1.827 1.772
Proportion Var 0.148 0.143 0.141 0.136
Cumulative Var 0.148 0.290 0.431 0.567
- 因子1(Factor1)
> barplot(十三種類因子分析直交$loadings[,1],ps=0.1)

因子負荷が高いのは、マロン、あずき、(ミルクティー、キャラメル、抹茶):まったりとした柔らかい味「和風系の因子」
- 因子2(Factor2)
> barplot(十三種類因子分析直交$loadings[,2],ps=0.1)

- 因子3(Factor3)
> barplot(十三種類因子分析直交$loadings[,3],ps=0.1)

- 因子4(Factor4)
> barplot(十三種類因子分析直交$loadings[,4],ps=0.1)

また、回転結果を図示すると以下のようになる。
> par(mfrow=c(1,2))
> plot(十三種類因子分析回転なし$loadings,xlim=c(-1.0,1.0),ylim=c(-1.0,1.0))
> abline(h=0,v=0)
> text(十三種類因子分析回転なし$loadings,colnames(十三種類の多変量データ[,1:13]))
> plot(十三種類因子分析直交$loadings,xlim=c(-1.0,1.0),ylim=c(-1.0,1.0))
> abline(h=0,v=0)
> text(十三種類因子分析直交$loadings,colnames(十三種類の多変量データ[,1:13]))

左が、回転前の初期解を示し、右がバリマックス回転(直交回転)後の図になる。
- web教材「アイスクリーム屋さんで学ぶ楽しい統計学」第8章 因子分析 (1) http://kogolab.chillout.jp/elearn/icecream/chap8/sec0.html