ほくそ笑む

R言語と統計解析について

因子分析メモ

(※自分用メモです)
因子分析は、観測された変数(顕在変数)から、その因子である観測されていない変数(潜在変数)との関連を明らかにする解析手法である。

因子分析モデル

因子分析では、次の回帰モデルを仮定する。
x = \Lambda f + u
ここで、x は顕在変数、\Lambda は因子負荷量、f は潜在変数(因子)、u は独自変量である。
上記回帰モデルから、次が成り立つ。
 \Sigma = \Lambda \Lambda ' + \Psi
ここで、\Sigmax の共分散行列、\Psiu の分散を対角成分に持つ行列(独自分散行列)である。
因子分析では、この式を満たす \Lambda および \Psi を推定する。

推定方法

推定の方法は大きく2つある。

  1. 主因子分析
  2. 最尤因子分析

1.主因子分析は、固有値固有ベクトルを用いた手法であり、あまり使われない。
2.最尤因子分析は、因子分析モデルにおける行列の推定量の差 F を次のように定義し、
 F = \ln|\Lambda\Lambda' + \Psi| + {\rm trace}(\Sigma|\Lambda\Lambda' + \Psi|^{-1})-\ln|\Sigma|-q
これを最小にすることにより推定する(q は顕在変数の数、つまり \Sigma の次数)。
F を最小にすることは、尤度関数 L = -\frac{1}{2}nF を最大にすることと同じ。
これらの手法の注意点として、独自分散をマイナス値に推定してしまう場合(ヘイウッドケース)がある。

因子の数

因子の数 k は、k < q であれば何でもよいが、あらかじめ決めておく必要がある。
あらかじめ決めておけない場合は、k の値を変えていって、うまくあてはめが出来ているかどうかを調べる方法がある。
あてはめがうまくいっているかどうかは、F の値を使った仮説検定によりできる。
仮説検定は、検定統計量  U = n'\min(F)カイ二乗分布に従うことによるものである。
k=1 から調べていき、p値が小さいと、うまくあてはめができてないので、因子の数 k を増やしてもう一度因子分析を行い、検定する。
最後まで p値が小さいままなら、因子分析モデル自体がうまくあてはまらないのだと考えられる。

因子の回転

因子分析により推定された \Lambda には無数の別解が存在する。
因子の解釈を容易にするため、因子を回転させることができる。
Thurstone の定めた「単純構造」を目標にして、因子を回転させる手法がいくつかある。
因子を回転させる手法は、次の2つに分かれる。

  1. 直交回転(回転後も因子どうしは無相関)
  2. 斜交回転(因子同士の相関を許容する回転)
    • オブミリン法
    • プロマックス法

因子得点

主成分分析のように、因子得点を求めたい場合もある。
因子得点を求めることはできるが、注意すべきことは、因子得点は確率変数として推定されるということである。

Rによる因子分析

統計言語 R で因子分析を行うことができる。
関数 factanal() は、最尤因子分析を行う関数である。*1

result <- factanal(data, factors = 1, rotation = "varimax", scores = "regression")

rotation は因子回転の手法を指定するパラメータ(varimax, promax, none, デフォルトは varimax)。
scores は因子得点の推定手法を指定するパラメータ(regression, Bartlett, デフォルトは none)。
result$PVAL により、モデルへのあてはめがうまくいっているかどうかがわかる。
p値が小さい場合(p <= 0.05)は、うまくいってない。
factors = 1 からだんだん増やしていって、p > 0.05 になったらやめる。
result$loadings を見て、因子に意味づけ(解釈)を行う。

R関連パッケージ

stats パッケージ(標準でインストールされる)の factanal 関数
Perform maximum-likelihood factor analysis on a covariance matrix or data matrix.
psych パッケージの fa 関数 主因子法サポート
Combined function for principal axis, minimum residual, weighted least squares, and maximum likelihood factor analysis
StatDA パッケージの pfa 関数
Computes the principal factor analysis of the input data.
rela パッケージの paf 関数
This function performs a prinxipal axis factor analysis providing the user with a set of preliminary informa- tive estimates regarding the dimensionality and scale functioning of the submitted items. The function does not allow for rotations and is by no means considered a full factor analysis tool, but rather a supplemental module.
MCMCpack パッケージの MCMCfactanal 関数
Markov Chain Monte Carlo for Normal Theory Factor Analysis Model

http://www.okada.jp.org/RWiki/?R%A4%C7%B0%F8%BB%D2%CA%AC%C0%CF

最後に

因子分析を使用する上での難しさは、因子の数を決めるところにあるのではないかと思います。
因子の数を変えると結果ががらりと変わることもあるので、注意深く決めてやる必要があります。
しかし、因子の数を決める決定的な手法は無く、どんな手法を用いようとも最終的には恣意性が(多少は)入ってきます。
今のところ現実的なのは、nFactors パッケージを使うことだと思います。
使い方は このサイト の真ん中らへんに書いてあります。
以上です。

*1:主因子分析は psych パッケージで行うことができる