静粛に、只今統計勉強中

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

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

『マンガでわかる統計学 因子分析編』で解説される手順をエクセルExcelで確かめながら行う、因子分析の学習の続きです。前回は、Step9まで進めました。 

 

Step10 Step9における共通性1-di2の初期値=目的変数がuiで説明変数がui以外の全uの重回帰式の寄与率Ri2とおく。

上の見出し、本の記述を短くまとめてみたのですが、わかりづらくなってしまいました。
要は、以下のデータに対して

f:id:cyclo-commuter:20180718100551p:plain

重回帰分析をしたとき、

f:id:cyclo-commuter:20180718095410p:plain

u1を目的変数、u2からu6を説明変数とした場合の、

f:id:cyclo-commuter:20180718095516p:plain

f:id:cyclo-commuter:20180718095910p:plain

を、u1からu6全てを目的変数とした場合について求めます。そして、求めた寄与率Ri2

f:id:cyclo-commuter:20180718100251p:plain

に当てはめてやる、ということです。

この作業、分析ツールを使うにしてもLINEST関数を使うにしても、目的変数をu2からu5とするときに、その都度元データの表の組み換えが必要になって面倒なので、以下の関数を自作してみました。

'重回帰式の決定係数を変数総当たりで返す
Function SMC(参照)

    Dim buf
    Dim Rcnt, Ccnt
    Dim Mat1, Mat2
    Dim Rng
    Dim Tmp
    Dim i, j, k
    
    Rcnt = 参照.Rows.Count - 1
    Ccnt = 参照.Columns.Count - 1
    ReDim buf(Ccnt)
    ReDim Mat3(Rcnt, Ccnt - 1)
    For i = 0 To Ccnt
        Mat1 = 参照.Offset(, i).Resize(, 1).Value
        Select Case i
        Case 0
            Mat2 = 参照.Offset(, 1).Resize(, Ccnt).Value
        Case Ccnt
            Mat2 = 参照.Resize(, Ccnt).Value
        Case Else
            ReDim Mat2(Rcnt, Ccnt - 1)
            Set Rng = 参照.Resize(1, 1)
            For j = 0 To Rcnt
                For k = 0 To i - 1
                    Mat2(j, k) = Rng.Offset(j, k).Value
                Next
            Next
            Set Rng = 参照.Offset(, i).Resize(1, 1)
            For j = 0 To Rcnt
                For k = 1 To Ccnt - i
                    Mat2(j, i + k - 1) = Rng.Offset(j, k).Value
                Next
            Next
        End Select
        buf(i) = Application.WorksheetFunction.LinEst(Mat1, Mat2, , True)(3, 1)
    Next
    
    SMC = buf

End Function

 使い方は、上記のソースコードを標準モジュールにコピペしたら、任意のセルに

f:id:cyclo-commuter:20180718132617p:plain

と入力して、一度Enterキーを押下します。

その後、変数の数と同じだけ選択セル範囲を横に広げて、数式バーをクリック、Ctrl+Shiftを押しながらEnterを押下すると、

f:id:cyclo-commuter:20180718132710p:plain

u1からu6全てについて、自分を目的変数、自分以外を説明変数とした重回帰式の寄与率R2が表示されます。

f:id:cyclo-commuter:20180718102314p:plain

この値を相関行列(の右肩下がりの対角線上)に当てはめた結果がこちらです。

f:id:cyclo-commuter:20180718102530p:plain