相関付きの多次元正規乱数の生成

のメモ。

相関付きの{N}次元正規乱数{X}を生成するには次のようにする。

{X}の相関行列{R}が次のように与えられているとする。

$$ \displaystyle R = \left( \begin{array}{cccc} 1 & \rho_{1,2} & \ldots & \rho_{1,N} \\ \rho_{1,2} & 1 & \ldots & \rho_{2,N} \\ \vdots & & \ddots & \vdots \\ \rho_{N,1} & \cdots & & \rho_{N,N} \end{array} \right) $$

{R}は対称行列である。{N}個の独立な正規乱数を{Z}とする。つまり、{Z \sim N(0, I_{N})}で、{I_{N}}は、{N}次元の単位行列である。 {Z}を生成する方法はBox-Muller法など良く知られているので、省略する。

相関行列{R}を持つ{N}次元正規乱数を生成するには、以下を満たす上三角行列{A}を求めれば良い。

$$ \displaystyle A^{T}A = R $$

{A, Z}から{X}

$$ X = ZA $$

で求まる。

{A}の求め方

{A}を一般の{N}次元で求める方法は、コレスキー分解として知られている。

コレスキー分解 - Wikipedia

{N}が小さい場合は手計算で求めることもでき、{N=2}の場合は、

$$ A = \left( \begin{array}{cc} 1 & \rho \\ 0 & \sqrt{1 - \rho^{2}} \end{array} \right) $$

で、{N=3}の場合は

$$ A = \left( \begin{array}{ccc} 1 & \rho_{1,2} & \rho_{1,3} \\ 0 & \sqrt{1 - \rho_{1,2}^{2}} & \frac{\rho_{2,3}−\rho_{1,2}\rho_{1,3}}{\sqrt{1−\rho_{1,2}^{2}}} \\ 0 & 0 & \sqrt{1−\frac{\rho_{2,3}^{2}−2\rho_{1,2}\rho_{1,3}\rho_{2,3}+\rho_{1,3}^{2}}{1−\rho_{1,2}^{2}}} \end{array} \right) $$

となる。見て分かる様に次元があがると、一般的に解くのは非常に面倒である。一応{N=3}の場合の求め方を記しておくと、

$$ A = \left( \begin{array}{ccc} a & b & c \\ 0 & d & e \\ 0 & 0 & f \end{array} \right) $$

とおけば、

$$ A^{T}A = \left( \begin{array}{ccc} a^{2} & ab & ac \\ ab & d^{2}+b^{2} & de+bc \\ ac & de+bc & f^{2}+e^{2}+c^{2} \end{array} \right) $$

となるから、これと{R}の各成分を比較して、{a, \ldots , f}を求める。特に一行目はすぐに求まるので、2行目、3行目と求めて行けば良い。

4次元以降も同様に解けるが、かなり大変になる。