分散共分散行と相関行列を求めよう

統計学

今回は分散共分散と相関行列を行列を用いて機械的に導出する方法をまとめます。変数がどんなに増えても同じ手順を行えば導出ができます。

分散共分散行列とは?

分散共分散行列は対角成分に分散を持ち、非対角成分に共分散を持つ行列のことです。3変数のデータの分散共分散行列は次のように表現できます。

$$
\Sigma = \left(\begin{array}{ccc}
s_{11}&s_{12}&s_{13}\\
s_{21}&s_{22}&s_{23}\\
s_{31}&s_{32}&s_{33}\\
\end{array}\right)
$$

行列表記を用いて簡単に分散共分散を導出

上で示した例と同様に、3変数のデータの共分散を求めることとします。つまり、以下のようなデータです。前の添字がidを示し、後ろの添字が変数の種類を示しています。

id\(x_1\)\(x_2\)\(x_3\)
\(1\)\(x_{11}\)\(x_{12}\)\(x_{13}\)
\(2\)\(x_{21}\)\(x_{22}\)\(x_{23}\)
\(\vdots\)\(\vdots\)\(\vdots\)\(\vdots\)
\(n\)\(x_{n1}\)\(x_{n2}\)\(x_{n3}\)

次に、分散、共分散の定義は次のように偏差の積をデータ数で割ったもので、次のようになります。

分散・共分散の定義

変数を\(x_{ki}\)、サンプルサイズを\(n\)としたとき分散・共分散\(s_{ij}\)は次のように定義されます。

$$
s_{ij} =
\frac{1}{n}{\sum^n_{k=0}{(x_{ki}-\bar{x}_{i})(x_{kj}-\bar{x}_j)}}
$$

\(i=j\)ならば分散となり、\(i\neq{j}\)ならば共分散となることがわかると思います。これらを踏まえて上で示したデータの分散共分散行列を行列を用いて求めていきましょう。

観測データを行列\(X\)、各列の平均をサンプルサイズと同じだけ用意した行列を\(\bar{X}\)とする。


$$
\begin{align}
X = \left(\begin{array}{ccc}
x_{11} & x_{12} & x_{13}\\
x_{21} & x_{22} & x_{23}\\
\vdots&\vdots&\vdots\\
x_{n1} & x_{n2} & x_{n3}
\end{array}\right)\quad
\bar{X} = \left(\begin{array}{ccc}
\bar{x}_{1} & \bar{x}_{2} & \bar{x}_{3}\\
\bar{x}_{1} & \bar{x}_{2} & \bar{x}_{3}\\
\vdots&\vdots&\vdots\\
\bar{x}_{1} & \bar{x}_{2} & \bar{x}_{3}\\
\end{array}\right)
\end{align}
$$

すると、偏差行列は次のように表せます。


$$
X-\bar{X} = \left(\begin{array}{ccc}
x_{11} – \bar{x}_{1} & x_{12} – \bar{x}_{2} & x_{13}- \bar{x}_{3}\\
x_{21} – \bar{x}_{1} & x_{22} – \bar{x}_{2} & x_{23} -\bar{x}_{3}\\
\vdots&\vdots&\vdots\\
x_{n1} – \bar{x}_{1}& x_{n2} – \bar{x}_{2} & x_{n3} – \bar{x}_{3}
\end{array}\right)
$$

これで分散共分散行列をつくる準備が整いました。分散共分散行列を\(\Sigma\)とすると次のようになります。


$$
\begin{align}
\Sigma & = \frac{1}{n}(X – \bar{X})^{T}(X – \bar{X})\\
& = \left(\begin{array}{ccc}
\frac{1}{n}\sum^{n}_{k=1}(x_{k1} – \bar{x}_{1})^2 & \frac{1}{n}\sum^{n}_{k=1}(x_{k1} – \bar{x}_{1})(x_{k2} – \bar{x}_{2}) & \frac{1}{n}\sum^{n}_{k=1}(x_{k1} – \bar{x}_{1})(x_{k3} – \bar{x}_{3})\\
\frac{1}{n}\sum^{n}_{k=1}(x_{k2} – \bar{x}_{2})(x_{k1} – \bar{x}_{1}) & \frac{1}{n}\sum^{n}_{k=1}(x_{k2} – \bar{x}_{2})^2 & \frac{1}{n}\sum^{n}_{k=1}(x_{k2} – \bar{x}_{2})(x_{k3} – \bar{x}_{3})\\
\frac{1}{n}\sum^{n}_{k=1}(x_{k3} – \bar{x}_{2})(x_{k1} – \bar{x}_{1}) & \frac{1}{n}\sum^{n}_{k=1}(x_{k3} – \bar{x}_{3})(x_{k2} – \bar{x}_{2}) & \frac{1}{n}\sum^{n}_{k=1}(x_{k3} – \bar{x}_{3})^2\\
\end{array}\right)\\
&=\left(\begin{array}{ccc}
s_{11}&s_{12}&s_{13}\\
s_{21}&s_{22}&s_{23}\\
s_{31}&s_{32}&s_{33}\\
\end{array}\right)
\end{align}
$$

このようにして、行列表記を用いて機械的に分散共分散を計算することができます。

分散共分散行列から相関行列を導出

相関行列は各変数同士の相関を行列で表現したもののことです。また相関係数の定義は次のようになります。

相関係数の定義

ある変数\(x_i,x_j\)の分散を\(s_{ii}, s_{jj}\)、共分散を\(x_{ij}\)としたとき、相関行列は次のように定義されます。

$$
r = \frac{s_{ij}}{\sqrt{s_{ii}s_{jj}}}
$$

このことを踏まえると、分散共分散行列から相関行列を導出できます。先ほど求めた分散共分散行列の対角成分は各変数の分散となっているので、その分散の逆数の平方根を対角成分にもつ行列\(A\)を利用します。


$$
A = \left(\begin{array}{ccc}
\frac{1}{\sqrt{s_{11}}}&0&0\\
0&\frac{1}{\sqrt{s_{22}}}&0\\
0&0&\frac{1}{\sqrt{s_{33}}}
\end{array}\right)
$$
すると、相関行列\(R\)は次のようになります。

$$
\begin{align}
R &=A\Sigma A\\
&=
\left(\begin{array}{ccc}
\frac{1}{\sqrt{s_{11}}}&0&0\\
0&\frac{1}{\sqrt{s_{22}}}&0\\
0&0&\frac{1}{\sqrt{s_{33}}}
\end{array}\right)
\left(\begin{array}{ccc}
s_{11}&s_{12}&s_{13}\\
s_{21}&s_{22}&s_{23}\\
s_{31}&s_{32}&s_{33}\\
\end{array}\right)
\left(\begin{array}{ccc}
\frac{1}{\sqrt{s_{11}}}&0&0\\
0&\frac{1}{\sqrt{s_{22}}}&0\\
0&0&\frac{1}{\sqrt{s_{33}}}
\end{array}\right)\\
&=
\left(\begin{array}{ccc}
\frac{s_{11}}{\sqrt{s_{11}s_{11}}}&
\frac{s_{12}}{\sqrt{s_{11}s_{22}}}&
\frac{s_{13}}{\sqrt{s_{11}s_{33}}}\\
\frac{s_{21}}{\sqrt{s_{22}s_{11}}}&
\frac{s_{22}}{\sqrt{s_{22}s_{22}}}&
\frac{s_{23}}{\sqrt{s_{22}s_{33}}}\\
\frac{s_{31}}{\sqrt{s_{33}s_{11}}}&
\frac{s_{32}}{\sqrt{s_{33}s_{22}}}&
\frac{s_{33}}{\sqrt{s_{33}s_{33}}}\\
\end{array}\right)
\end{align}
$$

このようにして、機械的に分散共分散行列と相関行列を導出できました。この方法は変数が増えても変わらないため、プログラムで関数を定義してしまえば、すぐに分散共分散行列や相関行列を計算できます。RやPython等にはすでにパッケージが用意されているため知らなくても算出できますが…笑。ただ不偏分散を用いる分散共分散行列もあるので、そうしたパラメータの指定を間違えないようにしましょう。

コメント

タイトルとURLをコピーしました