主成分分析ができる(3次元)
「主成分分析がうまくできない」などと困っていませんか?
こういう疑問に答えます。
本記事のテーマ
おさえておきたいポイント
- ①例題
- ➁相関係数行列の計算
- ➂固有値、固有ベクトルの計算
- ➃主成分の寄与率、累積寄与率
- ➄因子負荷量
- ⑥主成分負荷量
- ⑦主成分得点
Excelや固有値、因子負荷量とか暗記不要!
自力で導出できるぜ!
固有方程式が手計算で解くのは辛い!
今回はツールを使って解きます。
①例題
主成分分析の本質
主成分分析はいろいろな値が計算できますが、本質をおさえることが最重要です。関連記事で解説していますので、まずは確認してください。
【重要】主成分分析が導出できる 主成分分析で自力で主成分方向が導出できますか?「主成分分析=固有値解」とインプットしていませんか? 本記事では主成分分析の本質が理解できるために導出過程をわかりやすく解説します。2次元の例で基礎をしっかり理解しましょう。多変量解析を学ぶ人は必読です。 |
例題
3次元の主成分分析の例題は次の通りです。3次元の行列式を解く場面もあるので、行列式も練習しましょう。
例題
以下のデータにおいて、主成分分析せよ。
(1)相関係数行列\(R\)
(2)固有値\(λ_i\)
(3)固有ベクトル\(v_i\)
(4)寄与率と累積寄与率
(5)因子負荷量(標準化)
(6)主成分得点(標準化)
データ(下表)
No | x1 | x2 | x3 |
1 | 1 | 5 | 4 |
2 | 2 | 4 | 2 |
3 | 3 | 3 | 3 |
4 | 4 | 4 | 1 |
5 | 5 | 5 | 5 |
和 | 15 | 21 | 15 |
平均 | 3 | 4.2 | 3 |
3次元の主成分分析ですが、手計算で解いて主成分分析の理解を深めましょう。
データの標準化
因子負荷量や主成分得点などをツールから計算するために、データを標準化しておきます。
データの標準化は
\(z_i\)=\(\frac{x_i-\bar{x}}{s}\)と変換して、
平均0、標準偏差\(s\)=1の変数\(z_i\)に変換することです。
上のデータ表からは、標準偏差を計算すると、下表になります。
No | x1 | x2 | x3 |
標準偏差\(s\) | 1.41 | 0.75 | 1.41 |
なので、データを標準化します。結果は下表のとおりです。
No | x1 | x2 | x3 |
1 | -1.414 | 1.069 | 0.707 |
2 | -0.707 | -0.267 | -0.707 |
3 | 0 | -1.604 | 0 |
4 | 0.707 | -0.267 | -1.414 |
5 | 1.414 | 1.069 | 1.414 |
和 | 0 | 0 | 0 |
平均 | 0 | 0 | 0 |
標準偏差 | 1 | 1 | 1 |
確かに、平均0、標準偏差1に変換できていますね。
➁相関係数行列の計算
各平方和を先に計算
科目ごとの平方和を先に計算します。
\(S_{ij}\)=\(\sum_{k=1}^{n}(x_{ki}-\bar{x_i})(x_{kj}-\bar{x_j})\)
として、x1とx2の平方和は
\(S_{12}\)=\(\sum_{k=1}^{n=5}(x_{ki}-\bar{x_i})(x_{kj}-\bar{x_j})\)
と計算します。
全部のパターンを計算した結果を下表にまとめます。
平方和S | x1 | x2 | x3 |
x1 | \(S_{11}\)=10 | \(S_{12}\)=0 | \(S_{13}\)=1 |
x2 | \(S_{21}\)=0 | \(S_{22}\)=2.8 | \(S_{23}\)=3 |
x3 | \(S_{31}\)=1 | \(S_{32}\)=3 | \(S_{33}\)=10 |
相関係数行列の計算
相関係数\(r_{ij}\)は
●\(r_{ij}\)=\(\frac{S_{ij}}{\sqrt{S_{ii} S_{jj}}}\)
から計算できて、それをまとめたら
相関係数行列が計算できますね。
まず、さっき求めた平方和\(S_{ij}\)から相関係数\(r_{ij})\)を計算すると下表になります。
相関係数\(r_{ij}\) | x1 | x2 | x3 |
x1 | \(r_{11}\)=1 | \(r_{12}\)=0 | \(r_{13}\)=0.1 |
x2 | \(r_{21}\)=0 | \(r_{22}\)=1 | \(r_{23}\)=0.567 |
x3 | \(r_{31}\)=0.1 | \(r_{32}\)=0.567 | \(r_{33}\)=1 |
よって相関係数行\(R\)は
\(R\)=\(\left(
\begin{array}{cccc}
r_{11} & r_{12} & r_{13} \\
r_{21} & r_{22} & r_{23} \\
r_{31} & r_{32} & r_{33} \\
\end{array}
\right)
\)
=\(\left(
\begin{array}{cccc}
1 & 0 & 0.1 \\
0 & 1 & 0.567 \\
0.1 & 0.567 & 1 \\
\end{array}
\right)
\)
ここで、相関係数\(r_{12}\)=0となっています。変な感じですが、このあとの行列式を簡単に解くためにあえて、相関係数0になるように、x2のデータを作っています。
x2-x1のグラフをプロットすると2次関数っぽい感じになります。(プロットしてみてくださいね。)
➂固有値、固有ベクトルの計算
固有値、固有ベクトルの解法
ツールを使った解法を解説する前に、主成分分析の本質を再確認しましょう。
本記事のテーマではありませんが、主成分分析は必ず固有方程式を解きます。
固有方程式
平方和でも相関係数でもどちらでも固有方程式は解けますが、今回は相関係数を使って解きます。
固有方程式
\(Rv\)=\(λv\)
より
\(\left(
\begin{array}{cccc}
r_{11} & r_{12} & r_{13} \\
r_{21} & r_{22} & r_{23} \\
r_{31} & r_{32} & r_{33} \\
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a \\
b\\
c\\
\end{array}
\right)
\)=\(λ\)\(
\left(
\begin{array}{c}
a \\
b\\
c\\
\end{array}
\right)
\)
を満たす、固有値\(λ\)と固有ベクト\(v\)を解きます。
その後で、解析ツールに頼りましょう。
手計算で何を解いているのかの理解を深めましょう。
【重要】固有値の計算
3×3行列における、固有方程式を書くと
\(Rv\)=\(λv\)
\((R-λE)v=0\)
より
行列式|\(R-λE\)|=0を満たすλを計算します。
\(R-λE\)=\(\left(
\begin{array}{cccc}
r_{11}-λ & r_{12} & r_{13} \\
r_{21} & r_{22}-λ & r_{23} \\
r_{31} & r_{32} & r_{33}-λ \\
\end{array}
\right)
\)
から
|\(R-λE\)|=\(
\begin{vmatrix}
r_{11}-λ & r_{12} & r_{13} \\
r_{21} & r_{22}-λ & r_{23} \\
r_{31} & r_{32} & r_{33}-λ \\
\end{vmatrix}
\)=\(
\begin{vmatrix}
1-λ & 0 & b \\
0 & 1-λ & a \\
b & a & 1-λ \\
\end{vmatrix}
\)
(\(a\)=0.567,\(b\)=0.1とします。)
行列式の公式を紹介すると
\begin{vmatrix}
A_{11} & A_{12} & A_{13} \\
A_{21} & A_{22} & A_{23} \\
A_{31} & A_{32} & A_{33}-λ \\
\end{vmatrix}
\)
\(A_{11}A_{22}A_{33}\)+\(A_{12}A_{23}A_{31}\)+\(A_{13}A_{21}A_{32}\)
-\(A_{13}A_{22}A_{31}\)-\(A_{12}A_{21}A_{33}\)-\(A_{11}A_{23}A_{32}\)
となります。線形代数の教科書に書いていますので参考ください。
行列式を解くと
\(
\begin{vmatrix}
1-λ & 0 & b \\
0 & 1-λ & a \\
b & a & 1-λ \\
\end{vmatrix}
\)
=\((1-λ)^3\)+0+0-\(b^2(1-λ)\)-0-\(a^2(1-λ)\)
=\((1-λ)((1-λ)^2-(a^2+b^2))\)=0
となり、綺麗に因数分解できます。
一般的には、因数分解できない3次方程式が多いので、数値解析しますが、今回は勉強用に因数分解でできるデータを用意しました。
よって、固有値λは
λ=1, 1±\(\sqrt{a^2+b^2}\)
\(a\)=0.567,\(b\)=0.1を代入して
●λ1=1.5757
●λ2=1
●λ3=0.4243
となります。
\(c=\sqrt{a^2+b^2}\)として、今後
●λ1=1+c
●λ2=1
と簡略化して、最後に値を代入しましょう。
【重要】固有ベクトルの計算
λ1=1+c の場合
\(\left(
\begin{array}{cccc}
-c & 0 & b \\
0 & -c & a \\
b & a & -c \\
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
v_{11} \\
v_{12}\\
v_{13}\\
\end{array}
\right)
\)=\(
\left(
\begin{array}{c}
0 \\
0\\
0\\
\end{array}
\right)
\)
から、関係式を作ると
●\(-cv_{11}+bv_{13}\)=0
●\(-cv_{12}+av_{13}\)=0
\(v_{13}\)=1とすると
・\(v_{11}\)=\(\frac{b}{c}\)
・\(v_{12}\)=\(\frac{a}{c}\)
よって、固有ベクトル\(v_1\)は
\(v_1\)=\(
\left(
\begin{array}{c}
b \\
a\\
c\\
\end{array}
\right)
\)
となり、大きさ|\(v_1\)|は
|\(v_1\)|2=\(a^2+b^2+c^2\)=\(2c^2\)
|\(v_1\)|=\(\sqrt{2}c\)
となります。まとめると、
\(v_1\)=\(\frac{1}{\sqrt{2}c}
\left(
\begin{array}{c}
0.1228 \\
0.6965\\
0.7072\\
\end{array}
\right)
\)
となります。
λ2=1の場合
同様に解くと、
\(\left(
\begin{array}{cccc}
0 & 0 & b \\
0 & 0 & a \\
b & a & 0 \\
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
v_{21} \\
v_{22}\\
v_{23}\\
\end{array}
\right)
\)=\(
\left(
\begin{array}{c}
0 \\
0\\
0\\
\end{array}
\right)
\)
から、関係式を作ると
●\(bv _{23}\)=0
●\(av_{23}\)=0
●\(bv_{21}+av_{22}=0\)
\(v_{23}\)=0, (bv_{21}+av_{22}=0\)を満たしつつ、単位ベクトルとなるように解くと、
よって、固有ベクトル\(v_2\)は
\(v_2\)=\(
\left(
\begin{array}{c}
0.9848 \\
-0.1737\\
0\\
\end{array}
\right)
\)
となります。
λ3=1-c の場合
同様に解くと
\(v_3\)=\(
\left(
\begin{array}{c}
0.1228\\
0.6964\\
-0.7071\\
\end{array}
\right)
\)
となります。
以上、固有値と固有ベクトルを下表にまとめます。
固有ベクトル | 主成分1 | 主成分2 | 主成分3 |
x1 | 0.1228 | 0.9848 | 0.1228 |
x2 | 0.6964 | -0.1737 | 0.6964 |
x3 | 0.7071 | 0 | -0.7071 |
固有値 | 1.5757 | 1 | 0.4243 |
固有値、固有ベクトルの計算結果を検算
固有値の計算の理解を深める方法の1つとして、実際に検算することをお勧めします。
実際、検算すると\(Rv=λv\)が成り立ちます。
ここからは、個々の値を求めていきましょう。
単に数字があっていればOKではなく、値の意味をまず関連記事で確認しましょう。
主成分分析が計算できる 主成分負荷量、主成分得点、主成分平方和、主成分の寄与率は説明・計算ができますか? 本記事は各変数の導出方法を丁寧に解説します。ただ、主成分分析の本質は先に習得しておきましょう。多変量解析を学ぶ人は必読です。 |
➃主成分の寄与率、累積寄与率
主成分の寄与率、累積寄与率
●主成分の寄与率は、個々の固有値を自由度で割った値ですね。
●累積寄与率は、寄与率の累積値です。
結果は下表のとおりです。
主成分寄与率 | 主成分1 | 主成分2 | 主成分3 |
固有値 | 1.5757 | 1 | 0.4243 |
寄与率 | 0.525 | 0.333 | 0.142 |
累積寄与率 | 0.525 | 0.858 | 1 |
寄与率を平方和でなく固有値で考える理由
各主成分の平方和は固有値になります。これは関連記事で解説していますが、一番簡単にわかる証明方法があります。
全ての変数をスカラ(数値)と考えると、
両辺を\(v\)で割れば、
(平方和)\(S\)=\(λ\)(固有値)
確かに、(平方和)\(S\)=\(λ\)(固有値)となりますよね。これを行列、ベクトル表記にしてn次元化していますが、考え方は同じなので、主成分平方和は固有値として考えてよいということです。平方和と固有値は別物と思いがちですが、一致しています。意外ですよね。
➄因子負荷量
因子負荷量の公式
因子負荷量の公式を下表にまとめます。公式から計算しましょう。
因子負荷量 | 主成分1 | 主成分2 | 主成分3 |
主成分1 | \(v_{11} \sqrt{λ_1}\) | \(v_{21} \sqrt{λ_2}\) | \(v_{31} \sqrt{λ_3}\) |
主成分2 | \(v_{12} \sqrt{λ_1}\) | \(v_{22} \sqrt{λ_2}\) | \(v_{32} \sqrt{λ_3}\) |
主成分3 | \(v_{13} \sqrt{λ_1}\) | \(v_{23} \sqrt{λ_2}\) | \(v_{33} \sqrt{λ_3}\) |
因子負荷量の計算結果
因子負荷量 | 主成分1 | 主成分2 | 主成分3 |
主成分1 | 0.1542 | 0.8741 | 0.8876 |
主成分2 | 0.9848 | -0.1737 | 0 |
主成分3 | 0.08 | 0.4536 | -0.4606 |
➄主成分負荷量
「主成分負荷量」名前は立派ですが、簡単にいうと固有ベクトルの個々の値です。すでに表で結果が出ていますが、再掲します。
主成分負荷量 | 主成分1 | 主成分2 | 主成分3 |
主成分1 | 0.1228 | 0.6964 | 0.7071 |
主成分2 | 0.9848 | -0.1737 | 0 |
主成分3 | 0.1228 | 0.6964 | -0.7071 |
⑥主成分得点
主成分得点の求め方は、
個々の主成分負荷量を
掛け算して足し合わせたもの
つまり、
主成分得点\(z_i\)=\(λ_1 x_{1j}\)+\(λ_2 x_{2j}\)+\(λ_3 x_{3j}\)
主成分得点の結果を下表にまとめます。
主成分得点 | 主成分1 | 主成分2 | 主成分3 |
1 | -0.9577 | -1.4118 | 0.0633 |
2 | 0.6914 | -0.5813 | 0.2031 |
3 | 0.9988 | 0.2491 | -0.9988 |
4 | 0.9832 | 0.6644 | 0.8056 |
5 | -1.7156 | 1.0796 | -0.0732 |
長い計算でしたが、3次元主成分分析ができましたね。
何を求めているのかを常に意識しましょう。
まとめ
「主成分分析ができる(3次元)」を解説しました。
- ①例題
- ➁相関係数行列の計算
- ➂固有値、固有ベクトルの計算
- ➃主成分の寄与率、累積寄与率
- ➄因子負荷量
- ⑥主成分負荷量
- ⑦主成分得点
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