「主成分分析の固有値解は平方和、相関係数どちらでも同じ結果になるの?」と疑問に思っていませんか?
こういう疑問に答えます。
本記事のテーマ
【注意】平方和・相関係数行列から求めた固有値・固有ベクトルは一致しない
おさえておきたいポイント
- ①平方和行列と相関係数行列は別物
- ➁平方和行列と相関係数行列から固有値・固有ベクトルを算出
- ➂平方和行列と相関係数行列は関係性がある場合がある
- ➃平方和が等しい場合
- ➄平方和が1の場合
[themoneytizer id=”105233-2″]
【QC検定®1級合格】多変量解析問題集を販売します!
QC検定®1級合格したい方、多変量解析をしっかり学びたい方におススメです。
主成分分析は自分で解けます!
Excelや固有値、因子負荷量とか暗記不要!
自力で導出できるぜ!
平方和行列と相関係数行列から固有値・固有ベクトルは一致しません!
一致しない理由や、一致する特別な条件は何かを解説していきます。
案外、本記事のテーマをしっかり解説した教科書はないんですよ!
まず、主成分分析の基礎は関連記事で解説していますので、ご確認ください。
①平方和行列と相関係数行列は別物
平方和行列
主成分分析で固有値を求める際、固有方程式を作ります。
\(\left(
\begin{array}{cccc}
S_{11} & S_{12} & \ldots & S_{1n} \\
S_{12} & S_{22} & \ldots & S_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
S_{1n} & S_{2n} & \ldots & S_{n}
\end{array}
\right)
\) \(
\left(
\begin{array}{c}
a_1 \\
a_2 \\
\vdots \\
a_n
\end{array}
\right)
\)=\(λ\)\(
\left(
\begin{array}{c}
a_1 \\
a_2 \\
\vdots \\
a_n
\end{array}
\right)
\)
となり、n×n行列のおける固有方程式ができます。
この、
\(S\)=\(\left(
\begin{array}{cccc}
S_{11} & S_{12} & \ldots & S_{1n} \\
S_{12} & S_{22} & \ldots & S_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
S_{1n} & S_{2n} & \ldots & S_{n}
\end{array}
\right)
\)
は平方和から計算した行列ですよね。
相関係数行列
一方、データを標準化してから、主成分分析する場合もあります。その場合は、
平方和ではなく、相関係数を使って固有方程式を作ります。
\(\left(
\begin{array}{cccc}
r_{11} & r_{12} & \ldots & r_{1n} \\
r_{12} & r_{22} & \ldots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
r_{1n} & r_{2n} & \ldots & r_{n}
\end{array}
\right)
\) \(
\left(
\begin{array}{c}
a_1 \\
a_2 \\
\vdots \\
a_n
\end{array}
\right)
\)=\(λ\)\(
\left(
\begin{array}{c}
a_1 \\
a_2 \\
\vdots \\
a_n
\end{array}
\right)
\)
となり、n×n行列のおける固有方程式ができます。
この、
\(R\)=\(\left(
\begin{array}{cccc}
r_{11} & r_{12} & \ldots & r_{1n} \\
r_{12} & r_{22} & \ldots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
r_{1n} & r_{2n} & \ldots & r_{n}
\end{array}
\right)
\)
は相関係数から作った、相関係数行列と呼んでいます。
平方和行列と相関係数行列は別物
さて、固有値・固有ベクトルを算出する式が2つありますが、結果は同じなのかというと、異なります。
なぜなら、
平方和行列と相関係数行列は別物だから
式でいうと、
\(S\)=\(\left(
\begin{array}{cccc}
S_{11} & S_{12} & \ldots & S_{1n} \\
S_{12} & S_{22} & \ldots & S_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
S_{1n} & S_{2n} & \ldots & S_{n}
\end{array}
\right)
\)≠\(\left(
\begin{array}{cccc}
r_{11} & r_{12} & \ldots & r_{1n} \\
r_{12} & r_{22} & \ldots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
r_{1n} & r_{2n} & \ldots & r_{n}
\end{array}
\right)
\)=\(R\)
なのです。
同じデータでも、固有方程式は
\(Sv=λv\)
\(Rv=λv\)
で\(S\)≠\(R\)なら、
\(λ,v\)は変わってきますよね!
➁平方和行列と相関係数行列から固有値・固有ベクトルを算出
平方和行列と相関係数行列からそれぞれ固有値・固有ベクトルを算出して比較してみましょう。わかりやすく説明するために2次元データで考えます。
データ事例
下表のデータを用意します。必要な数値も準備しておきます。
No |
x |
y |
x’\(標準化) |
y'(標準化) |
1 |
0 |
3 |
-1.414 |
0.267 |
2 |
1 |
2 |
-0.707 |
-1.069 |
3 |
2 |
2 |
0 |
-1.069 |
4 |
3 |
4 |
0.707 |
1.604 |
5 |
4 |
3 |
1.414 |
0.267 |
合計 |
10 |
14 |
0 |
0 |
平均 |
2 |
2.8 |
0 |
0 |
標準偏差 |
1.41 |
0.75 |
– |
– |
平方和と相関係数も計算しておきますが、是非、確かめてみてください。
x,y |
値 |
標準化x’,y’ |
値 |
\(S_{xx}\) |
10 |
\(S_{x’x’}\) |
5 |
\(S_{xy}\) |
2 |
\(S_{x’y’}\) |
1.89 |
\(S_{yy}\) |
2.8 |
\(S_{y’y’}\) |
5 |
R |
0.143 |
R |
0.143 |
平方和行列から固有値・固有ベクトルを算出
平方和行列は
\(S\)=\(\left(
\begin{array}{cccc}
S_{xx} & S_{xy} \\
S_{xy} & S_{yy}
\end{array}
\right)
\)=\(\left(
\begin{array}{cccc}
10 & 2 \\
2 & 2.8
\end{array}
\right)\)
より、固有方程式を作ると、
\(Sv\)=\(λv\)
\(\left(
\begin{array}{cccc}
10 & 2 \\
2 & 2.8
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a_1 \\
a_2
\end{array}
\right)\)
=\(λ\left(
\begin{array}{cccc}
a_1 \\
a_2
\end{array}
\right)
\)
固有方程式から
\((10-λ)(2.8-λ)-2^2\)=0
\(λ\)=10.518,2.282
また単位ベクトルを気にせず、固有ベクトルを計算すると(実際やってみてください)
\(v_1\)=\(
\left(
\begin{array}{c}
1 \\
0.259
\end{array}
\right)\)
\(v_2\)=\(
\left(
\begin{array}{c}
1 \\
-3.859
\end{array}
\right)\)
となります。
相関係数行列から固有値・固有ベクトルを算出
相関係数行列\(R\)は
\(R\)=\(\left(
\begin{array}{cccc}
r_{xx} & r_{xy} \\
r_{xy} & r_{yy}
\end{array}
\right)
\)=\(\left(
\begin{array}{cccc}
1 & 0.143 \\
0.143 & 1
\end{array}
\right)\)
より、固有方程式を作ると、
\(Rv\)=\(λv\)
\(\left(
\begin{array}{cccc}
1 & 0.143 \\
0.143 & 1
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a_1 \\
a_2
\end{array}
\right)\)
=\(λ\left(
\begin{array}{cccc}
a_1 \\
a_2
\end{array}
\right)
\)
固有方程式から
\((1-λ)^2-0.143^2\)=0
\(λ\)=1.143,0.857
また単位ベクトルを気にせず、固有ベクトルを計算すると(実際やってみてください)
\(v_1\)=\(
\left(
\begin{array}{c}
1 \\
1
\end{array}
\right)\)
\(v_2\)=\(
\left(
\begin{array}{c}
1 \\
-1
\end{array}
\right)\)
となります。
固有値と固有ベクトルを比較すると
|
平方和から |
相関係数行列から |
一致、不一致 |
固有値1 |
10.518 |
1.143 |
× |
固有ベクトルv1 |
\(
\left(
\begin{array}{c}
1 \\
0.259
\end{array}
\right)\) |
\(
\left(
\begin{array}{c}
1 \\
1
\end{array}
\right)\) |
× |
固有値2 |
2.282 |
0.857 |
× |
固有ベクトル2 |
\(
\left(
\begin{array}{c}
1 \\
-3.859
\end{array}
\right)\) |
\(
\left(
\begin{array}{c}
1 \\
-1
\end{array}
\right)\) |
× |
と、固有値も固有ベクトルも一致していません。
\(S\)=\(\left(
\begin{array}{cccc}
S_{11} & S_{12} & \ldots & S_{1n} \\
S_{12} & S_{22} & \ldots & S_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
S_{1n} & S_{2n} & \ldots & S_{n}
\end{array}
\right)
\)≠\(\left(
\begin{array}{cccc}
r_{11} & r_{12} & \ldots & r_{1n} \\
r_{12} & r_{22} & \ldots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
r_{1n} & r_{2n} & \ldots & r_{n}
\end{array}
\right)
\)=\(R\)
から、固有値と固有ベクトルが一致しませんが、
両者に関係性があれば、固有値・固有ベクトルは一致する場合があります。
➂平方和行列と相関係数行列は関係性がある場合がある
もともと相関係数は
\(r_{ij}\)=\(\frac{S_{ij}}{\sqrt{S_{ii} S_{jj}}}\)です。
基本的には、データはランダムデータですから、当然
\(S_{ii}\)≠\(S_{jj}\)です。
これが、行列
\(S\)≠\(R\)
の理由です。
平方和が等しい場合
でも、逆に言えば、
\(S_{ii}\)=\(S_{jj}\)
の場合は\(S\)=定数倍×\(R\)
の関係性ができます。
例えば、
\(S_{ii}\)=\(S_{jj}\)=\(T\)として、仮に
\(S_{ij}\)=\(kT\)とおくと
\(r_{ij}\)=\(\frac{S_{ij}}{\sqrt{S_{ii} S_{jj}}}\)=\(\frac{kT}{\sqrt{T^2}}\)=\(k\)となります。
そうなると、平方和行列と相関係数行列に関係性が生まれ、
\(S\)=\(\left(
\begin{array}{cccc}
S_{11} & S_{12} & \ldots & S_{1n} \\
S_{12} & S_{22} & \ldots & S_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
S_{1n} & S_{2n} & \ldots & S_{n}
\end{array}
\right)\)= \(\left(
\begin{array}{cccc}
T & kT & \ldots & kT \\
kT & T & \ldots & kT \\
\vdots & \vdots & \ddots & \vdots \\
kT & kT & \ldots & T
\end{array}
\right)\)
=\(T\left(
\begin{array}{cccc}
1 & k & \ldots & k \\
k & 1 & \ldots & k \\
\vdots & \vdots & \ddots & \vdots \\
k & k & \ldots & 1
\end{array}
\right)\)=\(TR\)
となり、
\(S\)=\(TR\)
と関係式ができます。
平方和が1の場合
さらに、平方和の値\(T\)=1まで特別なデータを用意すると、
\(S\)=\(R\)
となり、この場合、平方和でも相関係数でも
固有値・固有ベクトルは一致します。
でも、そこまでそろうデータは普通ありませんけど。
ということで、平方和行列と相関係数行列に関係性があるデータの場合をこれから、実際に主成分分析してみましょう。
➃平方和が等しい場合
データ事例
実データではほぼありえませんが、下表のように、\(x,y\)両方の平方和が等しい場合を想定します。
No |
x |
y |
1 |
0 |
0 |
2 |
1 |
2 |
3 |
2 |
3 |
4 |
3 |
1 |
5 |
4 |
4 |
合計 |
10 |
10 |
平均 |
2 |
2 |
標準偏差 |
1.41 |
1.41 |
平方和と相関係数は
x,y |
値 |
\(S_{xx}\) |
10 |
\(S_{xy}\) |
7 |
\(S_{yy}\) |
10 |
R |
0.143 |
平方和行列(S)と相関係数行列(R)はそれぞれ
\(S\)=\(\left(
\begin{array}{cccc}
S_{11} & S_{12} \\
S_{12} & S_{22}
\end{array}
\right)\)= \(\left(
\begin{array}{cccc}
10 & 7 \\
7 & 10
\end{array}
\right)\)
\(R\)=\(\left(
\begin{array}{cccc}
r_{11} &r_{12} \\
r_{12} & r_{22}
\end{array}
\right)\)= \(\left(
\begin{array}{cccc}
1 & 0.7 \\
0.7 & 1
\end{array}
\right)\)
となり、
\(S\)=10\(R\)の関係となることがわかりますね。
平方和行列から固有値・固有ベクトルを算出
固有方程式は
\(Sv\)=\(λv\)
\(\left(
\begin{array}{cccc}
10 & 7 \\
7 & 10
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a_1 \\
a_2
\end{array}
\right)\)
=\(λ\left(
\begin{array}{cccc}
a_1 \\
a_2
\end{array}
\right)
\)
より、
\((10-λ)^2=7^2\)
よって、固有値λ=17,3
固有ベクトルは単位ベクトルを気にせず求めると
\(v\)=\(\left(
\begin{array}{cccc}
1 \\
1
\end{array}
\right)
\),\(\left(
\begin{array}{cccc}
-1 \\
1
\end{array}
\right)
\)
となります。
相関係数行列から固有値・固有ベクトルを算出
固有方程式は
\(Rv\)=\(λv\)
\(\left(
\begin{array}{cccc}
1 & 0.7 \\
0.7 & 1
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a_1 \\
a_2
\end{array}
\right)\)
=\(λ\left(
\begin{array}{cccc}
a_1 \\
a_2
\end{array}
\right)
\)
より、
\((1-λ)^2=0.7^2\)
よって、固有値λ=1.7,0.3と、
平方和行列の場合の1/10の値になります。
固有ベクトルは単位ベクトルを気にせず求めると
\(v\)=\(\left(
\begin{array}{cccc}
1 \\
1
\end{array}
\right)
\),\(\left(
\begin{array}{cccc}
-1 \\
1
\end{array}
\right)
\)
と平方和行列の場合と同じ結果になります。
平方和行列と相関係数行列のそれぞれ結果をまとめると、
- 行列は\(S=kR\)の関係が成り立つ
- 固有値は\(k\)倍異なる
- 固有値ベクトルは同じになる
➄平方和が1の場合
データ事例
先のデータでは平方和\(S_{xx}\)=\(S_{yy}\)=10でしたので、データを1/\(\sqrt{10}\)倍に変えてみましょう。
データ事例
実データではほぼありえませんが、下表のように、\(x,y\)両方の平方和が等しく、1となる場合を想定します。
No |
x |
y |
1 |
0 |
0 |
2 |
0.316 |
0.632 |
3 |
0.632 |
0.949 |
4 |
0.949 |
0.316 |
5 |
1.265 |
1.265 |
合計 |
3.16 |
3.16 |
平均 |
0.632 |
0.632 |
標準偏差 |
0.45 |
0.45 |
平方和と相関係数は
x,y |
値 |
\(S_{xx}\) |
1 |
\(S_{xy}\) |
0.7 |
\(S_{yy}\) |
1 |
R |
0.143 |
平方和行列(S)と相関係数行列(R)はそれぞれ
\(S\)=\(\left(
\begin{array}{cccc}
S_{11} & S_{12} \\
S_{12} & S_{22}
\end{array}
\right)\)= \(\left(
\begin{array}{cccc}
1 & 0.7 \\
0.7 & 1
\end{array}
\right)\)
\(R\)=\(\left(
\begin{array}{cccc}
r_{11} &r_{12} \\
r_{12} & r_{22}
\end{array}
\right)\)= \(\left(
\begin{array}{cccc}
1 & 0.7 \\
0.7 & 1
\end{array}
\right)\)
となり、
\(S\)=\(R\)の関係となることがわかりますね。
行列から固有値・固有ベクトルを算出
固有方程式は
\(Sv\)=\(λv\)
\(\left(
\begin{array}{cccc}
1 & 0.7 \\
0.7 & 1
\end{array}
\right)
\)\(
\left(
\begin{array}{c}
a_1 \\
a_2
\end{array}
\right)\)
=\(λ\left(
\begin{array}{cccc}
a_1 \\
a_2
\end{array}
\right)
\)
より、
\((1.0-λ)^2=0.7^2\)
よって、固有値λ=1.7,0.3
固有ベクトルは単位ベクトルを気にせず求めると
\(v\)=\(\left(
\begin{array}{cccc}
1 \\
1
\end{array}
\right)
\),\(\left(
\begin{array}{cccc}
-1 \\
1
\end{array}
\right)
\)
となります。
平方和行列と相関係数行列のそれぞれ結果をまとめると、
- 行列は\(S=R\)の関係が成り立つ
- 固有値も固有ベクトルも同じになる
- でも、非常にレアなデータである点に注意
まとめ
「【注意】平方和・相関係数行列から求めた固有値・固有ベクトルは一致しないがわかる」を解説しました。
- ①平方和行列と相関係数行列は別物
- ➁平方和行列と相関係数行列から固有値・固有ベクトルを算出
- ➂平方和行列と相関係数行列は関係性がある場合がある
- ➃平方和が等しい場合
- ➄平方和が1の場合
多変量解析