因子分析の<沼>に片足だけ突っ込んでみた9
『マンガでわかる統計学 因子分析編』で解説される手順をエクセルExcelで確かめながら行う、因子分析の学習の最終回です。
「前回ギブアップ宣言してたのに、まだ続くんかい。」
と思われるかもしれませんが、あの後さらにズブっと<沼>の深みにハマってしまったので、そのご報告をもって終わりとさせていただきます。
因子抽出法と回転法のところで参照させていただいたサイトがこちらですが、
なんとサイト管理人の清水先生、エクセルExcelで動くフリーの統計分析用プログラムを開発、公開されています。
基礎的な分析から統計的検定,そして分散分析,回帰分析,一般化線形モデル,因子分析,構造方程式モデル,階層線形モデルなどの多変量解析が実行できます。
という、有償でもおかしくないくらいの高機能っぷり。
入門書片手にちょこちょことマクロや関数を作ってる自分が恥ずかしくなってしまいますが、それはそれとして、同じデータを専門家が作ったソフトで分析したらどうなるか知りたくなったので、試してみたのでした。
HADはEXCELファイルそのものなので、インストールは不要です。ダウンロードしたら、開いてマクロを有効にするだけでOK。
「データ」シートの所定のセル範囲にデータをコピペして、【データ読み込み】をクリック。
【使用変数】をクリック。
【全投入】をクリック。 → 【OK】をクリック。
「因子分析」を選択 → 「因子数」に 2 を入力 → 「反復主因子法」を選択 → 「直交回転」を選択 → 「サイズでソート」のチェックを外して、【分析実行】をクリック。
こちらが、分析結果(の一部)です。
あれっ?
『マンガでわかる統計学 因子分析編』で解説されてる回転後の因子負荷量
と値が違う! ていうか、因子負荷量が1を超えちゃってるよ?
ならば、Rでも確かめてみましょう。*1
あらかじめ、エクセルExcelでデータをコピーしておきます。
「データ」→「データのインポート」→「テキストファイルまたはクリップボード、URLから...」をクリック。
「クリップボード」を選択して、【OK】をクリック。
Rコード*2の行ごとに、
- Datasetのラベル列を除いて、subdatに代入。
- psychパッケージを呼び出し、*3
- fa関数を実行。
- 結果をグラフに描画。
結果がこちら。
また違う値が出てきちゃったよ!? ん? 警告?
調べてみると、不適解の警告だとか。*4
えー、どういうことでしょう?
『マンガでわかる統計学 因子分析編』では、任意の共通性の値が1を超える直前の固有ベクトルを採用するように説明されていましたが、fa関数はそういった計算をしてくれないということ?(共通性の値が1を超えても規定回数、反復し続けるとか?)
Rが間違ってるはずないから、『マンガでわかる統計学 因子分析編』の説明が正しくないのでしょうか? それとも、どちらも「あり」?
もう、わけがわからーん!
いかがです? 因子分析って、<沼>じゃないですか?
*1:私は、RStudioからRコマンダーを呼び出して使っています。
*2:Rコードは、HADの【HAD2R】機能で生成したコードを、http://minato.sip21c.org/factor-in-R-j.pdfを参考にして加工しています。
*3:あらかじめインストールしておく必要があります。
*4:http://www.aichi-gakuin.ac.jp/~chino/multivar/chapter3/sec3-3-3.html