lambda.constraintな問題

探索的因子分析の推定にMCMCを使う話です。
MCMCpackのMCMCfactanal関数というのがあって、まぁ簡単にできるようにはなっているんだけど、どうにも因子負荷量の推定値が小さいようで、これはなんだろうと疑問に思っていた。
expolaratory factor analysisとかbayes factor analysisといったキーワードで検索してみたんだけど、これといった答えが見つからない。MCMCfactanalで検索すると、このブログしかヒットしないんだもの!

が、ふと気づいたらこのブログの記事(昨年の記事)にコメントが着いていて(通りすがりさん、ありがとうございました!)、どうも因子負荷行列にある程度制限をかけないとうまくいかないみたいなのだ。

例えば、MCMCfactanalのサンプルで示されているswissデータに於ける例だと、コードは次の通り。

このlambda.constraintによると、Examinationという変数の第一因子の負荷量は正、第二因子は負、という制限をかけている。Educationの第二因子の負荷量はゼロ、Infant.Moralityの題意一因子の負荷量もゼロということなので、結果を見るとゼロに指定されているところの負荷量は推定されていない。
ちなみに、やってみた結果は次のような感じになる。

で、このlambda.constraintを無くしてみるとどうなるか。コードは次のようにするだけ。

結果は大違いで、

こんな感じ。
一般的な最尤法による因子分析モデルでやってみると、次のようになった。

ってなことで、ちゃんと制限をかけている方が数値的にも納得できるし、最尤法の答えなんかとも近いわけです。
利用上のちょっとしたコツが要るってことねー。

備忘録まで。

コメントは受け付けていません。