主因子法
主因子法は因子分析のパラータ推定を行う手法の一つである。
因子分析は以下のモデルである。
$$X = \Lambda f + e \tag{1}$$
ここで$X$は、$n \times p$の行列で、$n$個の$p$次元のデータからなる。$X$のデータは分散1平均0に標準化されているものとする。$\Lambda$は、因子負荷行列である。$f$は因子得点である。$e$は独自因子である。
このとき分散を計算すると、
$$ \Sigma = \Lambda \Lambda' + V(e) \tag{2}$$
である。
ここで$\Sigma$は、$X$より計算される共分散行列である。主因子法では、はじめに$V(e)$を0として$\Lambda$を求める。$\Lambda$の計算には、固有値分解や特異値分解を用いる。
すなわち、
$$ \Sigma - V(e) = QSQ' \tag{3} $$
さらに
$$ \Lambda = Q \sqrt{S} \tag{4} $$
と計算できる。ここで固有ベクトルからなる行列$\Lambda$は固有値の大きい順に必要な数だけの固有ベクトルを用いる。ここで得られた$\Lambda$と$\Sigma$から$V(e)$を計算し(3)に代入して(4)の計算を行う。これを繰り返す。
以上を行うmatlabスクリプトを以下に示す。ここで因子の数を2、繰返し回数は100とし、因子負荷行列を変数factorloadingに求める。
C = corrcoef( X );
C2 = C;
for k = 1:100
[u,s,v] = svd( C2 );
tmp = v(:,1:2) * s(1:2,1:2)*v(:,1:2)';
for i = 1:size( C2,1)
C2(i,i) = tmp(i,i);
end
end
factorloading = v(:,1:2)
以上の計算の検算を以下のサイトのデータを用いて行い計算結果は回転前のものにほぼ一致することを確認した。
http://www.f.waseda.jp/oshio.at/edu/data_b/08_folder/da08_02.html
実際の分析に用いるにはこのあとvarimax回転またはpromax回転をかける必要である。