因子分析に関するメモ

落穂拾い的なエントリ。
以前のエントリー(http://ides.hatenablog.com/entry/2019/04/08/171145)で取り上げた清水和秋「因子分析的研究におけるmisuseとartifact」の続き部分である。

kansai-u.repo.nii.ac.jp

平行分析もMAPも主成分を使用

Horn(1965)の平行分析(Parallel Analysis)は、乱数により作成した相関行列の固有値と実際のデータから得られた相関行列からの固有値とを比較する方法であり、Screeグラフに乱数データから計算した固有値を加え、対応する実際の固有値を比較して、ランダムではないところを意味ある因子と判断しようとする。この方法でも、相関行列の対角項は 1 のままである。Velicer(1976)によるMAP(Minimum Average Partial)も主成分を操作する方法という点では同じである。堀(2005)は、これらの方法について、詳細な紹介と比較検討を行っている。その中で、相関行列の対角項に 1 ではなく、SMC(重相関係数の平方)を用いる方法にも言及している。ここでは、多くの因子分析的研究では、推定値の下限を与えるSMCよりも、主因子法の繰り返し法による共通性の推定がより使われていることを指摘しておきたい。

因子分析法によるスクリー

Rのパッケージであるpsych(Revelle, 2017)では、SMCによる共通性の推定をデフォルトとして、Horn(1965)の主成分分析法による固有値の表示に加えて、因子分析法による値の表示も行い、因子の数の決定には、因子分析法を採用している。

因子分析法によるScreeは下記のものだろう。

f:id:iDES:20190731031607p:plain

PCが主成分分析で、FAが因子分析である。ガットマン基準がややこしいが無視してみても、どこが崖(Scree)がわかりにくい。

コマンドは下記のように書く。

library("psych")
library("GPArotation")
data(bfi)
d1 <- bfi[1:25]
scree(d1, factors=TRUE, pc=TRUE, main="Scree plot", hline=NULL, add=FALSE)
VSS.scree(d1, main = "scree plot")  

VSS.scree (R Documentation) https://www.rdocumentation.org/packages/psych/versions/1.8.12/topics/VSS.scree

平行分析における相関係数の指定

なお、テトラコリックや多分相関係数に対応した平行分析もpsychでは使用することができる。

テトラコリックは2値データの相関分析。多分相関係数はポリコリック相関係数とも言って、3件以上の順序尺度の相関のことである。

平行分析のコマンドは"fa.parallel" である。

fa.parallel (R Documentation) https://www.rdocumentation.org/packages/psych/versions/1.8.12/topics/fa.parallel

相関係数については下記ように設定すると書かれてある。

相関の設定方法:"cor"はピアソン、"cov"は共分散、"tet"はテトラコリック、"poly"はポリコリック、"mixed" はテトラコリック、ポリコリック、ピアソン、バイセリアル(二系列相関係数)、ポリセリアル(多系列相関係数)を混合したものを使用し、"Yuleb"はYulebonett、"Yuleq"と"YuleY"は必要に応じてYule相関となる。これらのコマンドは"fa"への呼び出しコマンドと同じである。
How to find the correlations: "cor" is Pearson", "cov" is covariance, "tet" is tetrachoric, "poly" is polychoric, "mixed" uses mixed cor for a mixture of tetrachorics, polychorics, Pearsons, biserials, and polyserials, Yuleb is Yulebonett, Yuleq and YuleY are the obvious Yule coefficients as appropriate. This matches the call to fa.

記法は下記のようにすると良いのだと思う。適切なデータがないので実際に走らせたわけではない。

fa.parallel(data, cor="tet", correct=.5)

correctは「テトラコリックについては、連続性の補正が適用されるなければならない。0に設定すると修正は適用されず、デフォルトは".5"でそれ以外の場合は指定する」とされている。correctはコードに含めなくても、"correct=.5"が入るので、書く必要がない。