主成分分析ができる(3次元で重解がある場合)
「主成分分析がうまくできない、固有方程式で重解が出たらどう解けばいいの?」などと困っていませんか?
こういう疑問に答えます。
本記事のテーマ
おさえておきたいポイント
- ①2次元データの場合、重解な固有値はない
- ➁例題
- ➂相関係数行列の計算
- ➃固有値、固有ベクトルの計算
- ➄主成分の寄与率、累積寄与率
Excelや固有値、因子負荷量とか暗記不要!
自力で導出できるぜ!
ここまで解説するのはQCプラネッツだけ!
①2次元データの場合、重解な固有値はない
主成分分析の本質
主成分分析はいろいろな値が計算できますが、本質をおさえることが最重要です。関連記事で解説していますので、まずは確認してください。
【重要】主成分分析が導出できる 主成分分析で自力で主成分方向が導出できますか?「主成分分析=固有値解」とインプットしていませんか? 本記事では主成分分析の本質が理解できるために導出過程をわかりやすく解説します。2次元の例で基礎をしっかり理解しましょう。多変量解析を学ぶ人は必読です。 |
2次元データが重解な固有値を持つための条件
2次元データの場合の固有方程式は、
固有方程式\(Rv\)=\(λv\)
より
\(\left(
\begin{array}{cccc}
a & b \\
b & c \\
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
x \\
y\\
\end{array}
\right)
\)=\(λ\)\(
\left(
\begin{array}{c}
x \\
y\\
\end{array}
\right)
\)
から固有値を計算します。なお、主成分分析で固有方程式を解くときは、
対称行列を使いますね。
固有方程式から、条件式
\((a-λ)(c-λ)-b^2\)=0
\(λ^2-(a+c)λ+(ac-b^2)\)=0
と2次方程式を作り、重解をもつので、判別式D=0ですね。
判別式D=\((a+c)^2-4(ac-b^2)\)=0
=\((a-c)^2+4b^2\)=0
となります。
等号成立条件は
\(a=c\)かつ\(b\)=0となり、これは単位行列しかないことになります。
データの平方和や相関係数行列が
単位行列になることはないので、
2次元データからは重解が出ることはありません。
では、3次元以上の場合も、主成分分析データから重解はないのかどうか、データを作ってみたら、3次元では重解になるデータがありました!というか見つけました!結構時間かかったけど!
では、3次元で重解となる主成分分析を解説します。
➁例題
例題
3次元の主成分分析の例題は次の通りです。3次元の行列式を解く場面もあるので、行列式も練習しましょう。
例題
以下のデータにおいて、主成分分析せよ。
(1)相関係数行列\(R\)
(2)固有値\(λ_i\)
(3)固有ベクトル\(v_i\)
(4)寄与率と累積寄与率
(5)因子負荷量(標準化)
(6)主成分得点(標準化)
データ(下表)
No | x1 | x2 | x3 |
1 | 1 | 1 | 3 |
2 | 2 | 4 | 2 |
3 | 3 | 2 | 1 |
4 | 4 | 5 | 5 |
5 | 5 | 3 | 4 |
和 | 15 | 15 | 15 |
平均 | 3 | 3 | 3 |
3次元の主成分分析ですが、手計算で解いて主成分分析の理解を深めましょう。
データの標準化
因子負荷量や主成分得点などをツールから計算するために、データを標準化しておきます。
データの標準化は
\(z_i\)=\(\frac{x_i-\bar{x}}{s}\)と変換して、
平均0、標準偏差\(s\)=1の変数\(z_i\)に変換することです。
上のデータ表からは、標準偏差を計算すると、下表になります。
No | x1 | x2 | x3 |
標準偏差\(s\) | 1.41 | 1.41 | 1.41 |
なので、データを標準化します。結果は下表のとおりです。
No | x1 | x2 | x3 |
1 | -1.414 | -1.414 | 0.000 |
2 | -0.707 | 0.707 | -0.707 |
3 | 0 | -0.707 | -1.414 |
4 | 0.707 | 1.414 | 1.414 |
5 | 1.414 | 0.000 | 0.707 |
和 | 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}\)=5 | \(S_{13}\)=5 |
x2 | \(S_{21}\)=5 | \(S_{22}\)=10 | \(S_{23}\)=5 |
x3 | \(S_{31}\)=5 | \(S_{32}\)=5 | \(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.5 | \(r_{13}\)=0.5 |
x2 | \(r_{21}\)=0.5 | \(r_{22}\)=1 | \(r_{23}\)=0.5 |
x3 | \(r_{31}\)=0.5 | \(r_{32}\)=0.5 | \(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.5 & 0.5 \\
0.5 & 1 & 0.5 \\
0.5 & 0.5 & 1 \\
\end{array}
\right)
\)
本題はここからです。
➃固有値、固有ベクトルの計算
固有値、固有ベクトルの解法
ツールを使った解法を解説する前に、主成分分析の本質を再確認しましょう。
本記事のテーマではありませんが、主成分分析は必ず固有方程式を解きます。
固有方程式
平方和でも相関係数でもどちらでも固有方程式は解けますが、今回は相関係数を使って解きます。
固有方程式
\(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.5 & 0.5 \\
0.5 & 1-λ & 0.5 \\
0.5 & 0.5 & 1-λ \\
\end{vmatrix}
\)
行列式の公式を紹介すると
\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.5 & 0.5 \\
0.5 & 1-λ & 0.5 \\
0.5 & 0.5 & 1-λ \\
\end{vmatrix}
\)=0
\((1-λ)^3\)+\(\frac{1}{8}\)+\(\frac{1}{8}\)-\(\frac{1}{4}(1-λ)\)- \(\frac{1}{4}(1-λ)\)- \(\frac{1}{4}(1-λ)\)=0
\(4λ^3-12λ^2+9λ-2\)=0
となり、因数分解すると
\((2λ-1)^2 (λ-2)\)=0
と因数分解でき、固有値は
\(λ\)=0.5 (重解),2
が得られます。
よって、固有値λは
●λ1=2
●λ2,λ3=0.5
となります。
【重要】固有ベクトルの計算
固有ベクトルはどう求めるの?
グラムシュミットの直交化法
という処理が1つ必要です。
λ1=2の場合
\(\left(
\begin{array}{cccc}
-1 & 0.5 & 0.5 \\
0.5 & -1 & 0.5 \\
0.5 & 0.5 & -1 \\
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a \\
b\\
c\\
\end{array}
\right)
\)=\(
\left(
\begin{array}{c}
0 \\
0\\
0\\
\end{array}
\right)
\)
から、関係式を作ると
●\(-2a+b+c\)=0
●\(a-2b+c\)=0
●\(a+b-2c\)=0
より、
\(a=b=c\)の関係式ができるので、固有ベクトルは単位ベクトルに注意して
\(v_1\)=\(\frac{1}{\sqrt{3}}
\left(
\begin{array}{c}
1 \\
1\\
1\\
\end{array}
\right)
\)
となります。
λ2=0.5(重解)の場合
同様に解くと、
\(\left(
\begin{array}{cccc}
0.5 & 0.5 & 0.5 \\
0.5 & 0.5 & 0.5 \\
0.5 & 0.5 & 0.5 \\
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a \\
b\\
c\\
\end{array}
\right)
\)=\(
\left(
\begin{array}{c}
0 \\
0\\
0\\
\end{array}
\right)
\)
から、関係式を作ると
●\(a+b+c\)=0
の1つしか関係式ができません。これは重解だからですね。
でも、焦る必要はなく、
\(c\)=\(-(a+b)\)
と変形して、ベクトル表記します。
\(v_2\)=\(
\left(
\begin{array}{c}
a \\
b\\
-(a+b)\\
\end{array}
\right)
\)=\(a
\left(
\begin{array}{c}
1 \\
0\\
-1\\
\end{array}
\right)
\)+\(b
\left(
\begin{array}{c}
0 \\
1\\
-1\\
\end{array}
\right)
\)
となり、2つのベクトル(単位ベクトル処理はあとにしますが)
\(v_2\)=\(
\left(
\begin{array}{c}
1 \\
0\\
-1\\
\end{array}
\right)
\)
\(v_3\)=\(
\left(
\begin{array}{c}
0 \\
1\\
-1\\
\end{array}
\right)
\)
が得られます。
ただし、注意点があり、内積\(v_2\)・\(v_3\)=1≠0で直交しません。
なので、グラムシュミットの直交化法を使って処理が1つ増えます。
グラムシュミットの直交化法は他のサイトでも解説していますので、それに任せるとすると
\(u_2\)=\(\frac{1}{\sqrt{2}}
\left(
\begin{array}{c}
1 \\
0\\
-1\\
\end{array}
\right)
\)
\(u_2\)は単純に単位ベクトル化
\(a_3\)=\(v_3-(v_3・u_2)u_2\)=\(\frac{1}{2}
\left(
\begin{array}{c}
-1 \\
2\\
-1\\
\end{array}
\right)
\)
単位ベクトル化すると
\(u_3\)=\(\frac{1}{2\sqrt{6}}
\left(
\begin{array}{c}
-1 \\
2\\
-1\\
\end{array}
\right)
\)
となります。
以上、固有値と固有ベクトルを下表にまとめます。
固有ベクトル | 主成分1 | 主成分2 | 主成分3 |
x1 | 0.5773 | 0.707 | -0.204 |
x2 | 0.5773 | 0 | 0.408 |
x3 | 0.5773 | -0.707 | -0.204 |
固有値 | 2 | 0.5 | 0.5 |
固有値、固有ベクトルの計算結果を検算
固有値の計算の理解を深める方法の1つとして、実際に検算することをお勧めします。
実際、検算すると\(Rv=λv\)が成り立ちます。
ここからは、個々の値を求めていきましょう。
単に数字があっていればOKではなく、値の意味をまず関連記事で確認しましょう。
主成分分析が計算できる 主成分負荷量、主成分得点、主成分平方和、主成分の寄与率は説明・計算ができますか? 本記事は各変数の導出方法を丁寧に解説します。ただ、主成分分析の本質は先に習得しておきましょう。多変量解析を学ぶ人は必読です。 |
➃主成分の寄与率、累積寄与率
主成分の寄与率、累積寄与率
●主成分の寄与率は、個々の固有値を自由度で割った値ですね。
●累積寄与率は、寄与率の累積値です。
結果は下表のとおりです。
主成分寄与率 | 主成分1 | 主成分2 | 主成分3 |
固有値 | 2 | 0.5 | 0.5 |
寄与率 | 2/3 | 1/6 | 1/6 |
累積寄与率 | 2/3 | 5/6 | 1 |
寄与率を平方和でなく固有値で考える理由
各主成分の平方和は固有値になります。これは関連記事で解説していますが、一番簡単にわかる証明方法があります。
全ての変数をスカラ(数値)と考えると、
両辺を\(v\)で割れば、
(平方和)\(S\)=\(λ\)(固有値)
確かに、(平方和)\(S\)=\(λ\)(固有値)となりますよね。これを行列、ベクトル表記にしてn次元化していますが、考え方は同じなので、主成分平方和は固有値として考えてよいということです。平方和と固有値は別物と思いがちですが、一致しています。意外ですよね。
まとめ
「主成分分析ができる(3次元で重解がある場合)」を解説しました。
- ①2次元データの場合、重解な固有値はない
- ➁例題
- ➂相関係数行列の計算
- ➃固有値、固有ベクトルの計算
- ➄主成分の寄与率、累積寄与率
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