因子分析の<沼>に片足だけ突っ込んでみた3
『マンガでわかる統計学 因子分析編』で解説される手順をエクセルExcelで確かめながら行う、因子分析の学習の続きです。前回は、Step9まで進めました。
Step10 Step9における共通性1-di2の初期値=目的変数がuiで説明変数がui以外の全uの重回帰式の寄与率Ri2とおく。
上の見出し、本の記述を短くまとめてみたのですが、わかりづらくなってしまいました。
要は、以下のデータに対して
重回帰分析をしたとき、
u1を目的変数、u2からu6を説明変数とした場合の、
を、u1からu6全てを目的変数とした場合について求めます。そして、求めた寄与率Ri2を
に当てはめてやる、ということです。
この作業、分析ツールを使うにしても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
使い方は、上記のソースコードを標準モジュールにコピペしたら、任意のセルに
と入力して、一度Enterキーを押下します。
その後、変数の数と同じだけ選択セル範囲を横に広げて、数式バーをクリック、Ctrl+Shiftを押しながらEnterを押下すると、
u1からu6全てについて、自分を目的変数、自分以外を説明変数とした重回帰式の寄与率R2が表示されます。
この値を相関行列(の右肩下がりの対角線上)に当てはめた結果がこちらです。