【注意】平方和・相関行列から求めた固有値・固有ベクトルは一致しない

「主成分分析の固有値解は平方和、相関係数どちらでも同じ結果になるの?」と疑問に思っていませんか?
こういう疑問に答えます。
本記事のテーマ
おさえておきたいポイント
- ①平方和行列と相関係数行列は別物
- ➁平方和行列と相関係数行列から固有値・固有ベクトルを算出
- ➂平方和行列と相関係数行列は関係性がある場合がある
- ➃平方和が等しい場合
- ➄平方和が1の場合
【QC検定®1級合格】多変量解析問題集を販売します!
![]() |
【QC検定®合格】「多変量解析」問題集を販売します! 内容は、①回帰分析 単回帰分析・重回帰分析 の復習、➁ 主成分分析、➂判別分析、➃因子分析、➄数量化分析の5章全42題を演習できる問題集です。 |
Excelや固有値、因子負荷量とか暗記不要!
自力で導出できるぜ!
一致しない理由や、一致する特別な条件は何かを解説していきます。
案外、本記事のテーマをしっかり解説した教科書はないんですよ!
まず、主成分分析の基礎は関連記事で解説していますので、ご確認ください。
![]() |
【重要】主成分分析が導出できる 主成分分析で自力で主成分方向が導出できますか?「主成分分析=固有値解」とインプットしていませんか? 本記事では主成分分析の本質が理解できるために導出過程をわかりやすく解説します。2次元の例で基礎をしっかり理解しましょう。多変量解析を学ぶ人は必読です。 |
①平方和行列と相関係数行列は別物
平方和行列
主成分分析で固有値を求める際、固有方程式を作ります。
\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≠R
の理由です。
平方和が等しい場合
でも、逆に言えば、
の場合は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)
となり、
平方和行列から固有値・固有ベクトルを算出
固有方程式は
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)
となり、
行列から固有値・固有ベクトルを算出
固有方程式は
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の場合
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