主成分分析を理解する　～理論編～

主成分分析を実分析・理論の両面から勉強してみたのでシェアします。

[1.主成分分析を理解する　～Rでデータ分析編～](https://qiita.com/japanesebonobo/items/d6e072f43aac8ebee685)
**2.主成分分析を理解する　～理論編～**

#主成分分析の理論を解説
この記事では主成分分析の理論面について解説していきます。

今回は以下の本を参考にしています。
![スクリーンショット 2019-04-21 4.09.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296645/46e5aa63-094a-6aa0-47b3-8891767cf529.png)
**「多変量解析法入門」**
永田靖,　棟近雅彦　著

詳細：http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN4-7819-0980-9


###相関係数行列を用いた主成分分析
[1.主成分分析を理解する　～Rでデータ分析編～](https://qiita.com/japanesebonobo/items/d6e072f43aac8ebee685)では、分散共分散行列を用いて主成分分析を行いました。
しかし、データの**各変数の単位が異なる**場合、分散共分散行列は各単位の影響を受けてしまいます。それは分散、共分散の定義から明らかです。

**分散**

```math
S_{xx}=\frac{1}{n}\sum_{i=1}^n(x_i-\bar{x})^2

```

**共分散**

```math
S_{xy}=\frac{1}{n}\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})
```

そこで分散共分散行列の代わりに相関係数行列を用いることで、各変数の単位の影響を受けずに分析ができます。
相関係数の定義からも明らかです。

**相関係数**

```math
R_{xy}=\frac{S_{xy}}{S_{x}S_{y}}=\frac{\frac{1}{n}\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\frac{1}{n}\sum_{i=1}^n(x_i-\bar{x})^2}\sqrt{\frac{1}{n}\sum_{i=1}^n(y_i-\bar{y})^2}}
```

以上より、データの各変数の単位が異なることが明らかな場合、または各変数の単位について十分な知識がない場合、主成分分析において分散共分散行列よりも相関係数行列を用いたほうが無難です。

以下では、相関係数行列を用いた主成分分析について解説します。

###主成分分析の解析ストーリー
Ⅰ. 相関係数行列Rの第1固有値(最大固有値) $\lambda_1$に対応する固有ベクトルから**第1主成分** $z_1$を求めます。次に、Rの第2固有値 $\lambda_2$に対応する**第2主成分** $z_2$を求めます。同様にして**第k主成分**を求めます。($k=3,4,...,p$)
Ⅱ. それぞれの主成分の**寄与率**および**累積寄与率**を求めます。
Ⅲ. **因子負荷量**を求めます。因子負荷量を散布図にプロットすることで、変数の分類を行います。
Ⅳ. **主成分得点**を散布図にプロットし、サンプルの特徴づけや分類を行います。

主成分分析の流れは上記のようになります。

以下、簡単のため**変数が $x_1$, $x_2$の2つで、サンプルサイズがn個の場合**について具体的に解説していきます。

###Ⅰ. 主成分の導出
まず、変数$x_1$, $x_2$を標準化します。$s_1$,$s_2$は$x_1$,$x_2$の標準偏差です。

```math
u_1=\frac{x_1-\bar{x_1}}{s_1},\hspace{5mm}u_2=\frac{x_2-\bar{x_2}}{s_2}\hspace{10mm}(1.1)
```

後のため、以下の式を導出しておきます。

```math
\sum_{i=1}^{n}{u_{i1}}^2=\sum_{i=1}^{n}{u_{i2}}^2=n-1\hspace{10mm}(1.2)
```

```math
\sum_{i=1}^{n}{u_{i1}}{u_{i2}}=(n-1)r_{x_1x_2}\hspace{10mm}(1.3)
```
(1.2)と(1.3)の証明については時間の都合上説明はしませんが、以下のようになります。
原先生の講義と同じく、分散を$n$ではなく$n-1$で割るものと定義しています。
余談にはなりますが、その理由などは以下リンクなど参照してください。
[分散は n で割るか n − 1 で割るか](https://oku.edu.mie-u.ac.jp/~okumura/stat/var_or_varp.html)
![P_20190421_182725_vHDR_On.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296645/0b8869e6-a25b-3be7-4bdd-b79648356bce.jpeg)

![P_20190422_000457.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296645/5b1aa604-c982-6bf5-79f2-b5b6390d94a4.jpeg)

第1主成分$z_1$を

```math
z_1=a_1u_1+a_2u_2\hspace{10mm}(1.4)
```
とおきます。$\bar{u_1}=\bar{u_2}=0$より、

```math
\bar{z_1}=0\hspace{10mm}(1.5)
```

主成分導出の目的はデータの情報をできるだけ多く有するように$z_1$を求めることです（つまり係数$a_1$と$a_2$をデータから定めることです)。

**「${z_1}$がもとのデータの情報をできるだけ多く有する」**→**「データの全体のバラツキ（分散）をできるだけ$z_1$のバラツキ（分散）に反映させる」**と考えます。

$z_1$の分散は

```math
V_{z1}=\frac{1}{n-1}\sum_{i=1}^{n}(z_{i1}-\bar{z_1})^2
```
(1.5)より、$\bar{z_1}=0$であるから

```math
V_{z1}=\frac{1}{n-1}\sum_{i=1}^{n}z_{i1}^2\hspace{10mm}(1.6)
```
この$V_{z1}$が最大になるような$a_1$と$a_2$を求める。(1.4)より

```math
V_{z1}=\frac{1}{n-1}\sum_{i=1}^{n}z_{i1}^2=\frac{1}{n-1}\sum(a_1u_1+a_2u_2)^2
```
2乗の部分を展開します。

```math
V_{z1}=\frac{1}{n-1}(a_1^2\sum{u_{i1}^2}+2a_1a_2\sum{u_{i1}u_{i2}}+a_2^2\sum{u_{i2}^2})
```
(1.2)と(1.3)を用いて

```math
V_{z1}=a_1^2+a_2^2+2r_{x_1x_2}a_1a_2\hspace{10mm}(1.7)
```
となるため$V_{z1}$の値は$(a_1, a_2)$の値が大きくなればいくらでも大きくなります。
そこで、

```math
a_1^2+a_2^2=1
```
の制約条件を設けた下で、$V_{z1}$の最大化を考えましょう。
制約付きの最大化問題を求めるための定石は**ラグランジュの未定乗数法**です。

未定乗数$\lambda$を用いて、

```math
f(a_1,a_2,\lambda)=a_1^2+a_2^2+2r_{x_1x_2}a_1a_2-\lambda(a_1^2+a_2^2-1)\hspace{10mm}(1.9)
```
とおき、$a_1$,$a_2$のそれぞれで偏微分してゼロと置く、すると次式のようになります。

```math
\begin{align}
2a_1&+2r_{x_1x_2}a_2&-2\lambda a_1&=0\hspace{10mm}(1.10a)\\
2r_{x_1x_2}a_1&+\hspace{11mm}2a_2&-2\lambda a_2&=0\hspace{10mm}(1.10b)
\end{align}
```
偏微分する過程については説明はしませんが以下のようになります。
![P_20190421_211351_vHDR_On.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296645/54403543-605b-793a-9bf7-cd6f8d2c7aac.jpeg)

(1.10a),(1.10b)の両辺をそれぞれ2で割って、行列の式に表現すると

```math
\begin{bmatrix}1&r_{x_1x_2}\\r_{x_1x_2}&1\end{bmatrix}\begin{bmatrix}a_1\\a_2\end{bmatrix}=\lambda\begin{bmatrix}a_1\\a_2\end{bmatrix}\hspace{10mm}(1.11)
```
となる。相関係数行列$R$を

```math
R=\begin{bmatrix}1&r_{x_1x_2}\\r_{x_1x_2}&1\end{bmatrix}\hspace{10mm}(1.12)
```
とおく、また$a=[a_1,a_2]'$とおくと、(1.11)は

```math
Ra=\lambda a\hspace{10mm}(1.13)
```
となります。(1.11)および、(1.13)は$\lambda$が行列$R$の**固有値**であり、求めるべき$[a_1,a_2]$は**固有ベクトル**であることがわかります。

固有値、固有ベクトルの定義は以下を参考にしてください。
![P_20190421_224503_vHDR_On.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296645/6f88d112-f389-b7a1-657d-6cd1d2c389d4.jpeg)

ここで、(1.11)の両辺に左からベクトル$[a_1, a_2]$をかけてみます。すると

```math
a_1^2+a_2^2+2r_{x1x2}a_1a_2=\lambda(a_1^2+a_2^2)
````
を得ます。(1.7)よりこの式の左辺は$V_{z1}$であり、右辺は(1.8)でも受けた制約条件より$\lambda$に等しいです。
よって

```math
V_{z1}=\lambda
```
であることが導かれます。

したがって(1.7)の$V_{z1}$を最大化することは

**「相関係数行列Rの固有値問題を解いて、最大固有値 $\lambda_1$に対応する（長さ1の)固有ベクトル$a=[a_1,a_2]'$を求めればそれが$V_{z1}$の最大値を与える$[a_1,a_2]$であり、$V_{z1}$の最大値を $\lambda_1$とする。」**

上記の手続きを踏むことで実行できます。

よって、$V_{z1}$を最大にする、固有ベクトル$a=[a_1,a_2]'$を求め第一主成分を求めてみましょう。

相関係数行列$R$は

```math
R=\begin{bmatrix}1&r\\r&1\end{bmatrix}
```
です。$R$の固有値は、

```math
\begin{vmatrix}1-\lambda&r\\r&1-\lambda\end{vmatrix}=(1-\lambda)^2-r^2=0
```
を解くことで


```math
\lambda_1=1+r,\hspace{5mm}\lambda_2=1-r
```
となり、第一主成分の場合は最大固有値$\lambda_1$を用います。
$\lambda_1$に対応する固有ベクトルは

```math
a=[\sqrt{2}/2,\hspace{1mm}\sqrt{2}/2]'
```
であり、第一主成分$z_1$は以下のようになります。

```math
z_1=\frac{\sqrt{2}}{2}u_1+\frac{\sqrt{2}}{2}u_2
```
固有ベクトルを求める過程は以下のようになります。
![P_20190421_224644.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296645/416b875d-90a6-5c12-2034-54722f358fa6.jpeg)


今回は省略しますが、同様に第二主成分も求めることができます。

```math
z_2=\frac{\sqrt{2}}{2}u_1-\frac{\sqrt{2}}{2}u_2
```

**[補足]主成分の選択基準について**

データを説明する主成分はいくつ選択すればいいのかについて、目安を示しておきます。
**1.各主成分に対応する固有値が1以上**
または
**2.累積寄与率が80%を超える**
になります。

###Ⅱ. 寄与率および累積寄与率
寄与率の定義は以下のようになります。

**第一主成分の寄与率**

```math
\frac{\lambda_1}{\lambda_1+\lambda_2}
```
**第二主成分の寄与率**

```math
\frac{\lambda_2}{\lambda_1+\lambda_2}
```
累積寄与率の定義は以下のようになります。
変数は2つなので第二主成分の累積寄与率は1となります。

**第一主成分の累積寄与率**

```math
\frac{\lambda_1}{\lambda_1+\lambda_2}
```
**第二主成分の累積寄与率**

```math
\frac{\lambda_1+\lambda_2}{\lambda_1+\lambda_2}=1
```

###Ⅲ. 因子負荷量と主成分の解釈
主成分と元の変数$x_1$,$x_2$との相関係数$[r_{z_1x_1},r_{z_1x_2}, r_{z_2x_1}, r_{z_2x_2}]$を因子負荷量と呼びます。
###Ⅳ. 主成分得点
個々のサンプルに対して各変数の値を標準化して(1.4)に代入して得られた値を第一主成分の主成分得点と呼びます。第二主成分も同様にして主成分得点を求めることができます。

```math
z_1=a_1u_1+a_2u_2\hspace{10mm}(1.4)
```

各主成分に対して、主成分得点はサンプルの個数だけ計算できます。これらを散布図にプロットし、サンプルの特徴付けや分類などを試みます。


補足として、Ⅰ.主成分の導出の第一主成分の分散を求める過程で使用したラグランジュの未定乗数法については、[ラグランジュの未定乗数法チュートリアル](https://qiita.com/japanesebonobo/items/5a6f22dfb5347b96d8c9)を参考にしてください。

#参考文献
[多変量解析法入門](http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN4-7819-0980-9)
[分散は n で割るか n − 1 で割るか](https://oku.edu.mie-u.ac.jp/~okumura/stat/var_or_varp.html)
[ラグランジュの未定乗数法チュートリアル](https://qiita.com/japanesebonobo/items/5a6f22dfb5347b96d8c9)