エクセルで正規分布乱数の作り方

正規分布に従った乱数が欲しいんだけど……。まあなんかスクリプトでも書くか」
「それエクセルで出来るよ」
「R使えよ」


PRML 読書会に向けて3章予習中。
手を動かさないと理解できない人なので、「σ=0.2 のガウスノイズを加えて人工的な訓練データを」なんて、いやーんなことを書かれると、はたと困ってしまう。
スクリプトとかじゃあなく、なんかもう少し手触りを求め、あえてエクセルを使う。なんとかっこいい。


エクセルで N(0,1) な乱数の作り方というのはいくつかあるのだが、まとまっているところがなかったので小ネタ風にまとめてみた。

極限中心定理

[0,1] の一様乱数が平均 0.5、分散 1/12 であることと極限中心定理を用いて。

=RAND()+RAND()+RAND()+RAND()+RAND()+RAND()+RAND()+RAND()+RAND()+RAND()+RAND()+RAND()-6

ヒストグラムを書くと、これがなかなかきれいに分布してくれるのがわかって嬉しくなるが、略。

Box-Muller

WikiPedia にあった。

A B
1 =RAND() =SQRT(-2*LN(A1))*SIN(2*PI()*A2)
2 =RAND() =SQRT(-2*LN(A2))*COS(2*PI()*A1)

必ず2つ組になるのが、ちょっと面倒。

normsinv 関数

Excel には正規分布の累積の逆関数があるので、それに [0,1] の一様乱数を与えればOK。

=NORMSINV(RAND())

ま、最後のやつでいいよね。