
72
5 章 分布をモデル化する
5.6
乱数の生成
解析分布の
CDF
は、分布関数
p
=
CDF(x)
に従う乱数を生成するのにも役立ちま
す。
CDF
の逆関数を効率的に計算する方法があるなら、
0
と
1
の問の一様分布から
p
を選び、そして
x
を
x
=
ICDF(p)
として選ぶことにより、適当な分布に従う乱数値
を作れます。
例えば、指数分布の
CDF
は次のようになります。
p
=
1
−
e
−
λ
x
x
について解くと、次になります。
x
=−
log(1
−
p)/
λ
Python
では次のようになります。
def expovariate(lam):
p=random.random()
x=-math.log(1-p)/lam
return x
expovariate
は
lam
を取って、母数が
lam
の指数分布からランダムに選ばれた値を
返します。
この実装についての注意が
2
つあります。母数を
lam
にしたのは、
lambda
が
Python
の予約語だからです。また、
log 0
が未定義なので、注意が必要です。
random.random
の実装は
0
は返しますが
1
は返しません。だから、
1
−
p
は
1
を取る
ことはありますが
0
にはなりません。したがって、
log(1-p)
の値は不定になりません。
5.7
モデルが何の役に立つの?
本章の冒頭で多くの実世界の現象が解析分布でモデル化できると述べました。「そ
れでどうなの
?
」と読者の中には疑問に思う方もいるかもしれません。
モデル一般に言えることですが、解析分布は抽象化、すなわち些末と考えられる詳
細を省きます。例えば、観測された分布には、その標本特有の計測誤差やねじれがあ ...