猫も杓子も構造化

発達障害、特別支援などについて書いています。最近は心理学関係の内容が多めです。

いきなり因子分析(その7):WISCで試してみよう編

因子分析シリーズ記事。

その1(とりあえず試した編)
その2(因子数の決定編)
その3(様々な推定法編)
その4(因子軸の回転編)
その5(高次因子モデルと双因子モデル編)
その6(確証的因子分析編)

ずっと、同じデータセットというのも飽きてきたので違ったデータを用いて試してみる。

『日本版WISC-Ⅳ理論・解釈マニュアル』(以下、『マニュアル』と書く)には下位検査の相関係数行列が記載されている(p.49)。それを使って、『マニュアル』と同様の結果が得られるか試してみる。

データの入力

まずは『マニュアル』のp.49を見ながら地道に相関係数行列を入力してcormatrixという名前のオブジェクトにする。基本10検査だけのものはcor_baseという名前のオブジェクトに入れた。何か相関係数行列をそのまま載せると問題がありそうなので、興味がある人は『マニュアル』のp.49を見ていただきたい。

因子数の推定

まずは因子数の推定を行う。『マニュアル』では、(1)WISC-Ⅲが4つの認知領域を測定していたこと、(2)WISC-Ⅳそこから下位検査を10引き継いでおり、同じ構成概念を測定する新たな5つ下位検査が含まれる、という理論的な見地から、因子数を4と予測して分析を進めている。

ちなみに、MAPやBICや平行分析だとどういう結果を出すか試してみる。標準化サンプルのサンプルサイズは1285である。

library(psych)
library(GPArotation)

vss(cor_base, n=8, n.obs=1285)

結果から必要なところを抜き出すと次の通りで、MAPだと1因子、BICだと4という結果を出す。MAPはマイナー因子を拾わないという前評判通りである。

The Velicer MAP achieves a minimum of 0.03  with  1  factors
BIC achieves a minimum of  NA  with  4  factors

続いて平行分析の実施。

fa.parallel(cor_base,
           n.obs=1285,
           n.iter=50
)

f:id:nekomosyakushimo:20180721104335p:plain

4だか5だか微妙な感じだけれど、これらの分析を総合して考えると因子数は1~4の間で考えると良いということだろう。ここから先の因子数の決定は、理論的な仮説に基づいて決定するしかないのでとりあえず4ということで進めてみよう。

探索的因子分析

『マニュアル』のp.51を見ると、因子抽出は主因子法、回転はプロマックスであるらしい。反復推定を行うとヘイウッドケースが生じることがあるため、反復回数を2回に制限したとの記述がある。とりあえず、それと同じようにやってみる。

result <- fa(r=cor_base , nfactors=4, n.obs=1285, rotate="promax", max.iter=2, fm="pa")

print(result$loadings, cut=0, sort=T, digits=2)

因子負荷行列は次の通り。(下位検査の順番は入れ替えたり、因子に名前は入力したりした)

言語理解 処理速度 知覚推理 ワーキングメモリー
類似 0.57 0.02 0.14 0.01
単語 0.77 -0.04 -0.01 0.06
理解 0.78 0.03 -0.1 -0.03
符号 0.03 0.71 -0.03 -0.02
記号探し -0.02 0.70 0.04 0.03
積木模様 -0.05 0.06 0.59 0.01
絵の概念 0.17 0.00 0.32 0.00
行列推理 -0.01 -0.05 0.67 0.03
数唱 -0.03 0.02 0.05 0.66
語音整列 0.06 -0.01 -0.01 0.67

概ね単純構造が得られている。(絵の概念がどっちつかずな感があるけれど)『マニュアル』のp.51に因子負荷行列の表が掲載されているが、それとも概ね一致しており、小数点の第2位で0.01のずれがある程度である(ただ、絵の概念だけ結構ずれる)。手法の指定とかでピッタリ合うようになるのかはちょっとよく分からない。

反復回数の制限

ところで、反復回数の2回に制限をしないで、例えば上限を100とかにするとどうなるかというと、次のようにエラーメッセージを吐く。

result_nolimititer <- fa(r=cor_base , nfactors=4, n.obs=1285, max.iter=100,rotate="promax", fm="pa")

maximum iteration exceeded

 警告メッセージ:
 fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate,:
   A loading greater than abs(1) was detected.  Examine the loadings carefully.

絶対値が1を超える因子負荷量があるということで、因子不可行列を確認すると行列推理の因子負荷量が1.02であった。反復回数を制限するとこれが起きなくなる仕組みとかは、それによって分析にどういう違いをもたらすのかは、当然のことながら『マニュアル』には書いていないので、引用されている参考文献を読むしかないのだろう。Gorsuchの1983年の次の本。

Factor Analysis

Factor Analysis

続く。