Juliaの世界

指数分布

Juliaで指数分布を扱う。 指数分布はPDFが以下で表される分布である。

P(xλ)=λeλx P(x|λ)=λe^{−λx}
using Distributions, StatsPlots
plot(Exponential(2), label="PDF")
savefig(joinpath(@OUTPUT, "exponential.svg"))

Exponential(2)λ=12λ=\frac{1}{2}の指数分布を生成する。

具体例:コーヒーショップ

コーヒーショップに訪れる客の間隔を指数分布でモデル化する。単位時間を1分とするとCDF(累積分布関数)は次の客がその時間内に来る確率となる。

distribution=Exponential(2)
@show cdf(distribution, 0.5)
@show cdf(distribution, 1)
@show cdf(distribution, 2)
@show cdf(distribution, 2) - cdf(distribution, 1)
@show cdf(distribution, 10)
cdf(distribution, 0.5) = 0.22119921692859512
cdf(distribution, 1) = 0.3934693402873666
cdf(distribution, 2) = 0.6321205588285577
cdf(distribution, 2) - cdf(distribution, 1) = 0.2386512185411911
cdf(distribution, 10) = 0.9932620530009145

次の客が30秒内に来る確率は22%であり、1分以上2分未満に来る確率は24%となる。

rand

rand関数で客が来る時間をシミュレートできる。

using Random
Random.seed!(1)
samples=rand(Exponential(2), 10)
@show samples
samples = [0.1884755220158787, 4.291594439918017, 2.6463897775340954, 10.928184498200238, 4.414343624545636, 1.2315648901274583, 3.6061063048116053, 2.4353457405544314, 0.3134026691976988, 0.5073200149288529]

samples=rand(Exponential(2), 10)で指数分布Exponential(2)から10個乱数を生成し、配列に入れたものを出力している。 samplesは客が前の客から何分後に来たかを表している。1人目は0.188分後に来て、2人目はその4.29分後に来ている。 その平均は

@show mean(samples)

mean(samples) = 3.0562727481833916
約3分となっている。この値はサンプル数を増やすにつれて1λ=2\frac{1}{λ}=2に近づいていく。

E[P(xλ)]=1λ E[P(x|λ)] = \frac{1}{λ}
@show mean(rand(Exponential(2), 10))
@show mean(rand(Exponential(2), 100))
@show mean(rand(Exponential(2), 1000))
mean(rand(Exponential(2), 10)) = 1.139729818178493
mean(rand(Exponential(2), 100)) = 2.304297753923884
mean(rand(Exponential(2), 1000)) = 1.9522656774668683