因子分析は各変数の因子で表現できる共通性を求め、1-共通性 を 独自性 と称する。しかし、最尤法などの計算の都合により「共通性が1を超える」ことがある。これを不適解と呼ぶ。但し実際には factanal, fa などでは共通性が1を超えないように計算処理の内部で制御されている。このため、計算終了後に独自性を確認し、
独自性が 0.005 以下(共通性が0.995以上)になっているならば、不適解
と判断することになる。
これに関連して、3つ実例を紹介する。出典は最初の2つがは下記の論文、
狩野裕(1998)、不適解の原因と処理:探索的因子分析. 大阪大学人間科学部紀要 24, pp.303-327.
もう一つの定期試験のデータは
中村永友(2009) 多次元データ解析法(Rで学ぶデータサイエンス 2) 共立出版
第一のデータは心理学者Maxwellによる10変数810件の調査結果を元にした相関行列である。元データは正常児に対する心理テスト("verbal_a",
“spatial_a”, “reasoning”, “numerical_a”, “verbal_f")と欲求・願望アンケート( "neuroticism_q”, “way_tb_diff”, “warries_anxiety”, “interests”, “annoyances")である。
第二のデータはWISC-R 呼ばれる六歳児の知能検査12変数100件、言語系6変数("知識”, “類似”, “算数”, “単語”, “理解”, “数唱")と動作性6変数("絵画完成”, “絵画配列”, “積木模様”, “組合せ”, “符号”, “迷路")の結果を元にした相関行列である。詳細は上記の狩野氏の論説にある元論文を参照されたい。
定期試験データ sk は、2つの属性データ変数 class, no と、5科目2件づつの成績、kokugo_1,_2, seiseki_1,_2, sugaku_1,_2, butsuri_1,_2, eigo_1,_2 の10変数からなる。この分析は最後に回す。
当然ながら最初に行こなうべきことは平行分析である。図の通りどちらも3因子を適切としている。なお MAP はどちらも2因子とする。
require(psych)
par(mfrow = c(1, 2))
fa.parallel(maxw810, n.obs = 810)
## Parallel analysis suggests that the number of factors = 3 and the number of components = 2
fa.parallel(wisc.r, n.obs = 100)
## Parallel analysis suggests that the number of factors = 3 and the number of components = 2
そこで、各々3因子と4因子にて因子分析を行う。なお不適解の問題なのでここで回転/変換は行わない。詳細に代えて概観のダイアグラムを示す。因子負荷の独自性の結果をみると、maxw810 では4因子のときに warries_anxietyが不適となる。wisc.r では3,4因子ともに算数が不適である。さらに、maxw810の場合は変数への負荷が小さい因子が発生している。
それよりも問題なのは、maxw810では3因子の場合、適合性検定で棄却となっていることである(4因子では非棄却)。この場合件数が多いため、検定が過敏に(検出力が高く)なっているとも思えるが、それにしても気になることである。
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the model is 18 and the objective function was 0.1
The number of observations was 810 with Chi Square = 78.54 with prob < 1.5e-09
mres3 <- fa(maxw810, n.obs = 810, nfactors = 3, fm = "ml", rotate = "none")
wres3 <- fa(wisc.r, n.obs = 100, nfactors = 3, fm = "ml", rotate = "none")
mres4 <- fa(maxw810, n.obs = 810, nfactors = 4, fm = "ml", rotate = "none")
wres4 <- fa(wisc.r, n.obs = 100, nfactors = 4, fm = "ml", rotate = "none")
par(mfrow = c(2, 2))
fa.diagram(mres3)
fa.diagram(mres4)
fa.diagram(wres3)
fa.diagram(wres4)
maxw9 <- maxw810[-8, -8]
wisc11 <- wisc.r[-3, -3]
ここで各種の検討をすべきであるが、とりあえず各々問題となっている変数を削除して実行する。平行分析では Maxwellは3因子、WISC-R は2因子が適切となる。今回はvarimax 回転を施す。
Maxwell は欲求・願望のML2, verbal_a,_b のML1, 他の心理変数のML3 とわかりやすい分解となっている。適合度検定も p=0.27で適合している。BIC=-65.89(10変数3因子は BIC=-42).
WISC-R では、「数唱」が孤立するが、言語性検査のML!, 動作性検査のML2 にわかれている。適合度検定も p=0.8 で適合している。BIC=-129.58(11変数3因子では、BIC=-123.32).
ただし、原論文を参照していただくとわかるが、WISC-R はこの2因子モデルよりも、算数 と 数唱 の2変数のみに負荷する因子を設定するのが適切という判断になっている。その因子は「転動性からの解法因子」という不可思議な名称で呼ばれるようである。ここでは3因子で varimax とした結果を示す。
これでわかるように、因子分析は平行分析で行った結果からさらに考察すべき事項が数多くある。
mres93 <- fa(maxw9, n.obs = 810, nfactors = 3, fm = "ml", rotate = "varimax")
## Loading required package: GPArotation
wres112 <- fa(wisc11, n.obs = 100, nfactors = 2, fm = "ml", rotate = "varimax")
wres122 <- fa(wisc.r, n.obs = 100, nfactors = 2, fm = "ml", rotate = "varimax")
wres123 <- fa(wisc.r, n.obs = 100, nfactors = 3, fm = "ml", rotate = "varimax")
par(mfrow = c(2, 2))
fa.diagram(mres93)
fa.diagram(wres112)
fa.diagram(wres123)
fa.diagram(wres122)
それでは、sk の分析を行う。ダイアグラム faの出力を元にする。回転はvarimax とpromax を行う。また、独自性の下限を設定するために、factanal を用いる。つまり、factanal default と下限を 0.003 としたものを比較する。後者では確かにeigo1の独自性が 0.003 に達していることが解る。つまり、偶然に独自性が 0.005 になったわけではない。eigo1 と eigo2 に付加しているML1があるので、変数を削除しない方針で良いかと思われる。ただし、不適解が生じていることはコメントせねばならない。
sk312 <- sk[, 3:12]
par(mfrow = c(1, 2))
fa.diagram(fa(sk312, nfactors = 3, fm = "ml", rotate = "varimax"))
fa.diagram(fa(sk312, nfactors = 3, fm = "ml", rotate = "promax"))
sft5 <- factanal(sk312, 3)
sft3 <- factanal(sk312, 3, control = list(lower = 0.003))
sft5$uniquenesses
## kokugo1 kokugo2 seikei1 seikei2 sugaku1 sugaku2 butsuri1 butsuri2
## 0.7609 0.5761 0.4243 0.4520 0.5198 0.4140 0.5422 0.4208
## eigo1 eigo2
## 0.0050 0.4773
sft3$uniquenesses
## kokugo1 kokugo2 seikei1 seikei2 sugaku1 sugaku2 butsuri1 butsuri2
## 0.7610 0.5761 0.4243 0.4524 0.5197 0.4141 0.5421 0.4210
## eigo1 eigo2
## 0.0030 0.4780