ともにゃん的データ分析ブログ

勉強したことの備忘録とかね

分散共分散行列を分散の項と相関係数の項に分解する

ベイズ推定を行う際,パラメータもしくは潜在変数に多変量正規分布を事前分布として設定したい場合があります.その際,分散共分散行列の事前分布は非常に重要です.多くの場合,一様分布などの無情報事前分布を分散共分散行列に設定すると,MCMCが収束しないことがあります.データのみから分散共分散を推定するのは一般に難しいタスクなのです.

この場合,正規分布の分散共分散行列の共役事前分布である(逆)ウィシャート分布を事前分布として設定することが多いですが,慣れていないと(逆)ウィシャート分布の取り扱いは難しいと感じています.

したがって分散共分散行列に工夫して事前分布を設定したいというモチベーションが湧きます.分散(分散共分散行列の主対角成分)への事前分布の設定は比較的直感的にできます.なぜなら多くの分析者にとって分散という量は非常に馴染み深いからです.

しかしながら,個人的に共分散への事前分布の設定は難しいように感じます.2つの変数の共分散が大きければ,それらの(線形)関係が強いことはわかりますが,値は正規化されておらず,どのくらいの値を取っていればどうなのかということはデータによって様々であり,直感的に理解しづらい部分があるように思います.一方で相関は-1から1までの値を取る量であり,共分散と違って値を見ればそれら変数間の(線形)関係を直感的に理解することができます.

そこで,分散共分散行列に直接事前分布を設定するのではなく,分散共分散行列を分散行列と相関係数行列の直感的に理解しやすい2つの量に分解し,それぞれに事前分布を設定することを考えてみます.

 d 次元確率変数  X_{i},\ i=1,\ldots,d の分散共分散行列を  \Sigma とします.

天下り的に次のような分散共分散行列分解を考えてみます:

 \begin{align*}
\Sigma = \text{diag}((\sigma_{1},\sigma_{2},\ldots,\sigma_{d})^{T}) \cdot \Omega \cdot \text{diag}((\sigma_{1},\sigma_{2},\ldots,\sigma_{d})^{T})
\end{align*}

ここで,  \text{diag}(\cdot) は引数のベクトルを主対角成分に持つ対角行列です.また  \Omegad \times d の対称行列で,その  (i,j) 成分を  \rho_{ij} とします.

 \sigma_{i}^{2} は確率変数  X_{i} の分散を,  \Omega X_{i},\ i=1,\ldots,d相関係数行列をそれぞれ"想定"していますが,ここではまだこの行列分解によって  \sigma_{i}^{2} が分散を,  \Omega相関係数行列を表しているのかは定かではありません.

したがって計算によって,上記が正しいことを示します.

上記の式を書き下していくと,次のようになります:

 \begin{align*}
\Sigma &= \text{diag}((\sigma_{1},\sigma_{2},\ldots,\sigma_{d})^{T}) \cdot \Omega \cdot \text{diag}((\sigma_{1},\sigma_{2},\ldots,\sigma_{d})^{T}) \\
& = 
\begin{pmatrix}
\sigma_{1} & 0 & \ldots & 0 \\
0 & \sigma_{2} & \ldots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \ldots & \sigma_{d}
\end{pmatrix}
\begin{pmatrix}
1 & \rho_{12} & \ldots & \rho_{1d} \\
\rho_{21} & 1 & \ldots & \rho_{2d} \\
\vdots & \vdots & \ddots & \vdots \\
\rho_{d1} & \rho_{d2} & \ldots & 1
\end{pmatrix}
\begin{pmatrix}
\sigma_{1} & 0 & \ldots & 0 \\
0 & \sigma_{2} & \ldots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \ldots & \sigma_{D}
\end{pmatrix} \\
&=
\begin{pmatrix}
\sigma_{1} & 0 & \ldots & 0 \\
0 & \sigma_{2} & \ldots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \ldots & \sigma_{d}
\end{pmatrix}
\begin{pmatrix}
\sigma_{1} & \sigma_{2}\rho_{12} & \ldots & \sigma_{d}\rho_{1d} \\
\sigma_{1}\rho_{21} & \sigma_{2} & \ldots & \sigma_{d}\rho_{2d} \\
\vdots & \vdots & \ddots & \vdots \\
\sigma_{1}\rho_{d1} & \sigma_{2}\rho_{d2} & \ldots & \sigma_{d}
\end{pmatrix} \\
& =
\begin{pmatrix}
\sigma_{1}^{2} & \sigma_{1}\sigma_{2}\rho_{12} & \ldots & \sigma_{1}\sigma_{d}\rho_{1d} \\
\sigma_{2}\sigma_{1}\rho_{21} & \sigma_{2}^{2} & \ldots & \sigma_{2}\sigma_{d}\rho_{2d} \\
\vdots & \vdots & \ddots & \vdots \\
\sigma_{d}\sigma_{1}\rho_{d1} & \sigma_{d}\sigma_{2}\rho_{d2} & \ldots & \sigma_{d}^{2}
\end{pmatrix}
\end{align*}

ここで,  X_{i},\ X_{j},\ i,j=1,\ldots,d について  \text{Var}(X_{i})=\sigma_{i}^{2} \text{Cov}(X_{i},X_{j}) = \sigma_{i}\sigma_{j}\rho_{ij} となっています.

以上から  \sigma_{i}^{2} が確率変数  X_{i} の分散になっていることが確認できました.

また,相関係数の定義から

 \begin{align*}
\text{Cor}(X_{i},X_{j}) &= \frac{\text{Cov}(X_{i},X_{j})}{\sqrt{\text{Var}(X_{i})}\sqrt{\text{Var}(X_{j})}} \\
&= \frac{\sigma_{i}\sigma_{j}\rho_{ij}}{\sigma_{i}\sigma_{j}} = \rho_{ij}
\end{align*}

となり, 行列  \Omega (i,j) 成分  \rho_{ij} が確率変数  X_{i},\ X_{j}相関係数になっていることも確認できました.

以上で,最初に記した行列分解によって,分散共分散行列が分散行列と相関係数行列に分解できることが確認できました.

例えば,分散には逆ガンマ分布や半コーシー分布を,相関係数行列には一様分布やLKJ相関分布などを設定することができます.

LKJ相関分布については,例えば こちら を参考にしてみてください.