<<展開

正規分布で相関ある二つの乱数が欲しい

概要

同様の正規分布に従う相関を持った二つの乱数が欲しい場合に必要な技術についてまとめたページです.生成された二つの分散と相関係数を調整することができます.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • 二つの別の擬似乱数が入力
  • 上記から生成した正規分布に従う乱数を使用
効果
  • 分散が1, 相関係数がρの二つの乱数を生成
ポイント
  • 正規分布を生成する方法が必要

解 説

平均が0で、分散が1となっている正規分布に従う二つのA,Bがあるときに、 それらの和と差で作られるX = αA + βB, Y = αA - βBは分散\(\alpha^2+\beta^2\)で相関係数が\(\alpha^2-\beta^2\)になることがわかっています. 上記を利用して、相関係数を自由に決められる二つの正規分布X, Yを作ることがここでの目標になります.
正規分布で相関ある二つの乱数が欲しい
そこで、相関係数をρとし、分散を1とすれば、以下のようにしてαとβを求めればよいこととなる.
αとβを求める
$$\begin{eqnarray} \left\{ \begin{array}{l} \alpha^2 + \beta^2 = 1 \\ \alpha^2 + \beta^2 = \rho \end{array} \right.\end{eqnarray}$$ $$\begin{eqnarray} \left\{ \begin{array}{l} \alpha = \sqrt{\frac{1+\rho}{2}} \\ \beta = \sqrt{\frac{1-\rho}{2}} \end{array} \right.\end{eqnarray}$$
αとβからなる連立方程式
最後にこれを実現するプログラムをここに貼っておく
プログラムでの実現
C++
1
2
3
4
5
6
void rand_2(double rho, double& x, double& y){
    double aA = sqrt((1 + rho)/2 ) * rand_normal();
    double bB = sqrt((1 - rho)/2 ) * rand_normal();
    x = aA + bB;
    y = aA - bB;
}
rand_normalは正規分布を生成する関数 それに対して、rhoから計算される係数αとβを掛け合わせ、和と差を算出しています.
rand_normalのような正規分布をプログラムで実現する方法については右のリンクを参照してください.
正規分布に従った単一の乱数が欲しい
この章を学んで新たに学べる
Comments

Reasons
>>隠す

知識: 正規分布に従った単一の乱数が欲しい
正規分布に従った単一の乱数が欲しいときに必要な技術についてまとめたページです.random関数などから生成された一様乱数を正規分布に従った乱数に変換します.