静粛に、只今統計勉強中

仕事でデータ分析をすることになったバリバリ文系アラフィフのおっさんが、独学で統計の勉強を始めました。

因子分析の<沼>に片足だけ突っ込んでみた7

『マンガでわかる統計学 因子分析編』で解説される手順をエクセルExcelで確かめながら行う、因子分析の学習の続きです。
前回は、Step16まで進めましたが、その次のバリマックス回転のやり方がわからなくて、さあ困った。

というところで終わりました。

 

いつもどおり、困ったときのgoogle頼みで探したら、割とあっさり見つかりましたよ。

統計学入門−第17章

基準化バリマックス回転の数理と計算例がかなり詳しく説明されていますので、これならなんとかなりそうです♪ ほんとにありがたいことです。

というわけで、計算を再開してみましょう。

 

(1) 因子負荷量を基準化する

因子負荷量を基準化するためには、共通性の平方根で割る由ですので、以下の式で共通性を計算します。(「Ctrl + Shift + Enter」をお忘れなく。)
f:id:cyclo-commuter:20180720134103p:plain

次に、因子負荷量を共通性の平方根で割りますが、因子負荷量と共通性の対応は、以下のとおり行ごとになります。
f:id:cyclo-commuter:20180720140528p:plain

 

(2) 第k因子と第k'因子を組にして回転角θを求める

数理の説明が理解できていないので、計算だけなぞっています。
f:id:cyclo-commuter:20180720151126p:plain
上図のE列には、G列の数式が入力されています。
見慣れない数式が並んでいるかと思いますが、SUMX2MY2SUMPRODUCTはワークシート関数ですので、知らない方はググってみてください。

その下の3つの関数(SUM_X2MY2_2SUM_XY_2SUM_X2MY2_XY)は自作のユーザー定義関数です。
ソースコードはこちら。

'二つの配列で対応する配列要素の平方差の二乗を合計する
Function SUM_X2MY2_2(参照1, 参照2)

    Dim i, Tmp

    If 参照1.Rows.Count = 参照2.Rows.Count Then
        For i = 1 To 参照1.Rows.Count
            Tmp = Tmp + (参照1(i) ^ 2 - 参照2(i) ^ 2) ^ 2
        Next
        SUM_X2MY2_2 = Tmp
    Else
        SUM_X2MY2_2 = CVErr(xlErrNA)
    End If

End Function

'二つの配列で対応する配列要素の積の二乗を合計する
Function SUM_XY_2(参照1, 参照2)

    Dim i, Tmp

    If 参照1.Rows.Count = 参照2.Rows.Count Then
        For i = 1 To 参照1.Rows.Count
            Tmp = Tmp + (参照1(i) * 参照2(i)) ^ 2
        Next
        SUM_XY_2 = Tmp
    Else
        SUM_XY_2 = CVErr(xlErrNA)
    End If

End Function

'二つの配列で対応する配列要素の平方差と配列要素の積を合計する
Function SUM_X2MY2_XY(参照1, 参照2)

    Dim i, Tmp

    If 参照1.Rows.Count = 参照2.Rows.Count Then
        For i = 1 To 参照1.Rows.Count
            Tmp = Tmp + (参照1(i) ^ 2 - 参照2(i) ^ 2) * 参照1(i) * 参照2(i)
        Next
        SUM_X2MY2_XY = Tmp
    Else
        SUM_X2MY2_XY = CVErr(xlErrNA)
    End If

End Function

 

こんな調子で、tan(4θ) までは順調に計算できたのですが、

分子と分母の符号から表17.2.4に従って-π<4θ<πを選び、θを決定する。

!?
計算例を見ると 4θ の逆正接から π を引いて4で割っていますが、どうやらそれは、分母も分子もだから、のようです。

表17.2.4 4θの象限
  分母
- +
分子 + 第2象限 第1象限
- 第3象限 第4象限

今回は、分子がで分母がの第2象限ですから、計算例そのままというわけには行きません。
いよいよ手詰まりか。

とも思いましたが、『マンガでわかる統計学 因子分析編』には
-36°という答えがあらかじめ示されていますので、答えに合わせて数式を弄ってみることにしました。
何パターンか試していたら、割とすぐ =-(ATAN(E46)+PI())/4 が見つかりました。これでぴったり-36°

このときは、リバース・エンジニアリングだぜ、うぇ~い!
f:id:cyclo-commuter:20180720160513j:plain
とか言って、快哉を叫んだのですが・・・