因子分析の2因子モデルが導出できる
「因子分析ってどうやって解くのかがわからない」などと困っていませんか?
こういう疑問に答えます。
本記事のテーマ
おさえておきたいポイント
- ①1因子モデルを式で表現
- ➁モデル式から分散・共分散を導出
- ➂仮定を入れて式を簡略化
- ➃因子負荷量を計算
- ➄共通因子と誤差を計算
- ⑥因子分析を解析する際の注意点
Excelや公式は暗記不要!
自力で導出できるぜ!
1因子モデル導出過程をベースに本記事を解説します。1因子モデルの導出過程は関連記事で解説しています。先に確認ください。
因子分析の1因子モデルが導出できる 因子分析が説明できますか?主成分分析との違いが明確に数式を使って説明できますか?本記事では、因子分析の最も基本的な1因子モデルにおける分析方法をわかりやすく解説します。多変量解析を学ぶ人は必読です。 |
①2因子モデルを式で表現
下表のように、例えば、あるデータがあり、変数x,y,zがあるとしましょう。
No | \(x\) | \(y\) | \(z\) |
1 | \(x_{1}\) | \(y_{1}\) | \(z_{1}\) |
2 | \(x_{2}\) | \(y_{2}\) | \(z_{2}\) |
… | … | … | … |
n | \(x_{n}\) | \(y_{n}\) | \(z_{n}\) |
このデータを、
主成分分析のように、2つの共通変数F、Gに集約できなか?
を考えます。
つまり式と図で表現すると、
\(
\left(
\begin{array}{c}
x_i \\
y_i \\
z_i
\end{array}
\right)
\)=\(F_i\)\(
\left(
\begin{array}{c}
a_{x}\\
a_{y}\\
a_{z}
\end{array}
\right)
\)+\(G_i\)\(
\left(
\begin{array}{c}
b_{x}\\
b_{y}\\
b_{z}
\end{array}
\right)
\)+\(
\left(
\begin{array}{c}
e_{xi}\\
e_{yi}\\
e_{zi}
\end{array}
\right)
\)
各値を共通因子と誤差に相当する独自因子に分割します。
式と図から、
●変数である共通因子F,G
●変数である誤差でもある独自因子e
にわけて、
●変数である共通因子F,Gに意味を持たせる
をやるのが因子分析です。
数式を使って、わかりやすく因子分析を導出していきます。
➁モデル式から分散・共分散を導出
モデル式から分散・共分散を導出
3変数\(x,y,z\)で、次の分散
\(s_x^2\),\(s_y^2\),\(s_z^2\)
と共分散
\(s_{xy}\),\(s_{xz}\),\(s_{yz}\)
を考えます。
分散\(s_x^2\)
\(s_x^2\),\(s_y^2\),\(s_z^2\)のうち、\(s_x^2\)を代表として計算します。
\(s_x^2\)=\(V(a_x F+b_x G+ e_x)\)
分散の加法性から
=\(a_x^2 V(F)+b_x^2 V(G)+V(e_x)\)
+2\(a_x b_x Cov(F,G)\)+ 2\(a_x Cov(F,e_x)\)+ 2\(b_x Cov(G,e_x)\)
と計算できます。
\(s_y^2\),\(s_z^2\)は同様に計算すると、
\(s_y^2\)=\(a_y^2 V(F)+b_y^2 V(G)+V(e_y)\)
+2\(a_y b_y Cov(F,G)\)+ 2\(a_y Cov(F,e_y)\)+ 2\(b_y Cov(G,e_y)\)
\(s_z^2\)=\(a_z^2 V(F)+b_z^2 V(G)+V(e_z)\)
+2\(a_z b_z Cov(F,G)\)+ 2\(a_z Cov(F,e_z)\)+ 2\(b_z Cov(G,e_z)\)
ですね。式は1因子モデルより長くなりましたが、機械的に計算できます。
共分散\(s_{xy}\)
\(s_{xy}\),\(s_{yz}\),\(s_{xz}\)のうち、\(s_{xy}\)を代表として計算します。
\(s_{xy}\)=\(Cov(a_x F+b_x G+e_x, a_y F+b_y G+e_y)\)
分散の加法性から
=\(a_x a_y V(F)+a_x b_y Cov(F,G)+a_x Cov(F,e_y)\)
+\(a_y b_x Cov(G,F)+b_x b_y V(G)+b_x Cov(G,e_y)\)
+\(a_y Cov(e_x,F)+b_y Cov(e_x,G)+Cov(e_x,e_y)\)
と計算できます。
\(s_{yz}\),\(s_{xz}\)も同様に計算すると、
\(s_{yz}\)=\(Cov(a_y F+b_y G+e_y, a_z F+b_z G+e_z)\)
=\(a_y a_z V(F)+a_y b_z Cov(F,G)+a_y Cov(F,e_z)\)
+\(a_z b_y Cov(G,F)+b_y b_z V(G)+b_y Cov(G,e_z)\)
+\(a_z Cov(e_y,F)+b_z Cov(e_y,G)+Cov(e_y,e_z)\)
\(s_{xz}\)=\(Cov(a_x F+b_x G+e_x, a_z F+b_z G+e_z)\)
=\(a_x a_z V(F)+a_x b_z Cov(F,G)+a_x Cov(F,e_z)\)
+\(a_z b_x Cov(G,F)+b_x b_z V(G)+b_x Cov(G,e_z)\)
+\(a_z Cov(e_x,F)+b_z Cov(e_x,G)+Cov(e_x,e_z)\)
と計算できます。
➂仮定を入れて式を簡略化
式を簡略化するため仮定を入れる
分散の式と共分散の式
が長い式なので、仮定を入れて式を簡略化
します。
- 因子間は独立とする
- 変数を標準化(平均0,標準偏差1)とする
つまり、
- 独立⇒\(Cov(●,□\))=0
- 標準化⇒\(S_x^2\)、\(S_y^2\)、\(S_z^2\)、\(V(F)\), \(V(G)\)はすべて1
では簡略化してみます。
分散を簡略化
●分散の式
\(s_x^2\)=1
=\(a_x^2\)\(V(F)\)(1)+\(b_x^2\)\(V(G) \)(1)+\(V(e_x)\)
+2\(a_x b_x Cov(F,G)\)+ 2\(a_x Cov(F,e_x)\)+ 2\(b_x Cov(G,e_x)\)
\(a_x^2\)+\(b_x^2\)+\(V(e_x)\)=1
と簡略化できます。
\(s_y^2\),\(s_z^2\)は同様に計算すると、
●\(s_y^2\)⇒
\(a_y^2\)+\(b_y^2\)+\(V(e_y)\)=1
●\(s_z^2\)⇒
\(a_z^2\)+\(b_z^2\)+\(V(e_z)\)=1
と簡略化できます。
●\(a_y^2\)+\(b_y^2\)+\(V(e_y)\)=1
●\(a_z^2\)+\(b_z^2\)+\(V(e_z)\)=1
共分散を簡略化
●共分散の式
\(s_{xy}\)=\(\frac{s_{xy}}{1×1}\)=
\(\frac{s_{xy}}{ s_x^2 s_y^2}\)=\(r_{xy}\)(相関係数)として、
\(s_{xy}\)=\(r_{xy}\)
=\(a_x a_y\)\(V(F)\)(1)+\(a_x b_y Cov(F,G)+a_x Cov(F,e_y)\)
+\(a_y b_x Cov(G,F)\)+\(b_x b_y\)\(V(G)\)(1)+\(b_x Cov(G,e_y)\)
+\(a_y Cov(e_x,F)+b_y Cov(e_x,G)+Cov(e_x,e_y)\)
\(r_{xy}\)=\(a_x a_y\)+\(b_x b_y\)
と計算できます。
\(s_{yz}\),\(s_{xz}\)も同様に計算すると、
●\(s_{yz}\)⇒
\(r_{yz}\)=\(a_y a_z\)+\(b_y b_z\)
●\(s_{xz}\)⇒
\(r_{xz}\)=\(a_x a_z\)+\(b_x b_z\)
と計算できます。
●\(r_{yz}\)=\(a_y a_z\)+\(b_y b_z\)
●\(r_{xz}\)=\(a_x a_z\)+\(b_x b_z\)
➃因子負荷量を計算
因子負荷量を求める方程式
先の結果をまとめると、
●\(a_y^2\)+\(b_y^2\)+\(V(e_y)\)=1
●\(a_z^2\)+\(b_z^2\)+\(V(e_z)\)=1
と
●\(r_{xy}\)=\(a_x a_y\)+\(b_x b_y\)
●\(r_{yz}\)=\(a_y a_z\)+\(b_y b_z\)
●\(r_{xz}\)=\(a_x a_z\)+\(b_x b_z\)
から、\(a_○\),\(b_○\)を計算すればOKですが、
手計算はかなりキツイ。。。
なので、最小二乗法を活用してExcelで計算します。
SMC法から因子負荷量の2乗和を計算
相関係数行列\(R\)の逆行列の\(ii\)要素を\(r^{ii}\)として、
\(h_i^2\)=1-\(\frac{1}{r^{ii}}\)
\(h_i^2\)=\(a_i^2\)+\(b_i^2\)
\(V(e_i)\)=1-\(h_i^2\)
の関係式を使って計算する方法です。この理論の背景は現在調査中です。分かり次第報告します。
因子負荷量を最小二乗法から計算
SMC法を使って
●\(h_x^2\)=\(a_x^2\)+\(b_x^2\)
●\(h_y^2\)=\(a_y^2\)+\(b_y^2\)
●\(h_z^2\)=\(a_z^2\)+\(b_z^2\)
から、求めます。
●\(h_y^2\)=\(a_y^2\)+\(b_y^2\)
●\(h_z^2\)=\(a_z^2\)+\(b_z^2\)
と
●\(r_{xy}\)=\(a_x a_y\)+\(b_x b_y\)
●\(r_{yz}\)=\(a_y a_z\)+\(b_y b_z\)
●\(r_{xz}\)=\(a_x a_z\)+\(b_x b_z\)
ここで、\(Q\)を
\(Q\)=\(((a_x^2+b_x^2)-h_x^2)^2\)
+\(((a_y^2+b_y^2)-h_y^2)^2\)
+\(((a_z^2+b_z^2)-h_z^2)^2\)
+2\((( a_x a_y+ b_x b_y)- r_{xy}^2)^2\)
+2\((( a_y a_z+ b_y b_z)- r_{yz}^2)^2\)
+2\((( a_x a_z+ b_x b_z)- r_{xz}^2)^2\)
と定義して、この\(Q\)が最小値(なるべく0)となる場合を
Excelで計算してもらいます。
最小二乗法の計算をExcelに託す
\(Q\)の式を行列表記します。
\(Q\)=\((\left(
\begin{array}{cccc}
h_x^2 & r_{xy} & r_{xz} \\
r_{xy} & h_y^2 & r_{xy} \\
r_{xz} & r_{xy} & h_z^2
\end{array}
\right)\)
-\(\left(
\begin{array}{cccc}
a_x^2+b_x^2 & a_x a_y+ b_x b_y & a_x a_z+ b_x b_z \\
a_x a_y+ b_x b_y & a_y^2+b_y^2 & a_y a_z+ b_y b_z \\
a_x a_z+ b_x b_z & a_y a_z+ b_y b_z & h_z^2
\end{array}
\right))^2
\)
上の式を満たすように、
\(a_○\),\(b_○\)の値を数値計算から求めます。
具体的な計算は、関連記事の計算編で解説します。
\(a_○\),\(b_□\)が求まります。
因子負荷量\(a_○\),\(b_□\)
求める方程式は自由度が残るので、
因子負荷量は1組ではありませんし、
数値解析の誤差が残ります。
➄共通因子と誤差を計算
あとは、誤差と共通因子を計算すれば、因子分析の一連の流れが計算できます。
誤差を計算
誤差\(V(e_x)\), \(V(e_y)\), \(V(e_z)\)は関係式から計算できます。
●\(V(e_x)\)=1-\(h_x^2\)
●\(V(e_y)\)=1-\(h_y^2\)
●\(V(e_z)\)=1-\(h_z^2\)
計算はできるのですが、1つ問題があります。
実は共通因子Fの各値を計算してから、個別の誤差の値を計算します。
共通因子Fを計算
実は、推定方法から計算します。この推定方法の導出はQCプラネッツで調査中です。
共通因子Fの計算方法
ただし、
●\(Z\):標準化データ行列(\(x_i,y_i,z_i\)は標準化対応済が前提)
●\(R\):相関係数行列
●\(A\):因子負荷量ベクトル
(1因子モデルはベクトル、2因子以上なら行列)
3変数、2因子モデルの場合、具体的に記述すると
\(
\left(
\begin{array}{c}
F_1 & G_1\\
F_2 & G_2\\
\vdots \\
F_n & G_2
\end{array}
\right)
\)
=\(\left(
\begin{array}{cccc}
x_{1} & y_{1} & z_{1} \\
x_{2} & y_{2} & z_{2} \\
\vdots & \vdots & \vdots \\
x_{n} & y_{n} & z_{n}
\end{array}
\right)
\)\(\left(
\begin{array}{cccc}
h_x^2 & r_{xy} & r_{xz} \\
r_{xy} & h_y^2 & r_{yz} \\
r_{xz} & r_{xy} & h_z^2
\end{array}
\right)^{-1}
\)\(
\left(
\begin{array}{c}
a_x & b_x \\
a_y & b_y \\
a_z & b_z
\end{array}
\right)
\)
で計算できます。
誤差Eを計算
誤差Eは残りなので、上の式を使うと、
\(\left(
\begin{array}{cccc}
x_1 & y_1 & z_1 \\
x_2 & y_2 & z_2 \\
\vdots & \vdots & \vdots \\
x_n & y_n & z_n
\end{array}
\right)
\)
=\(
\left(
\begin{array}{c}
F_1 \\
F_2 \\
\vdots \\
F_n
\end{array}
\right)
\)\(\left(
\begin{array}{cccc}
a_x & a_y & a_z
\end{array}
\right)
\)
+\(
\left(
\begin{array}{c}
G_1 \\
G_2 \\
\vdots \\
G_n
\end{array}
\right)
\)\(\left(
\begin{array}{cccc}
b_x & b_y & b_z
\end{array}
\right)
\)
+\(\left(
\begin{array}{cccc}
e_{x1} & e_{y1} & e_{z1} \\
e_{x2} & e_{y2} & e_{z2} \\
\vdots & \vdots & \vdots \\
e_{xn} & e_{yn} & e_{zn}
\end{array}
\right)
\)
から、誤差行列
\(\left(
\begin{array}{cccc}
e_{x1} & e_{y1} & e_{z1} \\
e_{x2} & e_{y2} & e_{z2} \\
\vdots & \vdots & \vdots \\
e_{xn} & e_{yn} & e_{zn}
\end{array}
\right)
\)
の個々の値が計算できます。
ここまで、各値を計算した上で、共通因子F,Gの意味を考えて、因子分析ができたといえます。
⑥因子分析を解析する際の注意点
注意点
一連の流れを解説してきましたが、どうでしょうか?
おそらく、以下の点が因子分析するとき注意が必要です。
- 因子分析という割に、自分で因子が設定できない(ならば主成分分析でいいじゃん!)
- 因子負荷量を求める方程式は自由度が残るため、解は1つではない
- SMC法などの手法を借りて解くので、精度は低下する
- 数値解析解から因子F,Gの意味を考えても、結果の精度は低い
- 2因子モデルで精度が高くないので、多因子になると何を解析しているかがわからなくなる
難しい手法の割に得るものが少ないと
QCプラネッツは思います。
分析から何を得たいのかはよく考えて使う必要があります。
まとめ
「因子分析の2因子モデルが導出できる」を解説しました。
- ①1因子モデルを式で表現
- ➁モデル式から分散・共分散を導出
- ➂仮定を入れて式を簡略化
- ➃因子負荷量を計算
- ➄共通因子と誤差を計算
- ⑥因子分析を解析する際の注意点
Warning: count(): Parameter must be an array or an object that implements Countable in /home/qcplanets/qcplanets.com/public_html/wp-content/themes/m_theme/sns.php on line 119