Juliaを用いて,一様分布からsize個をサンプリングして標本平均を求めることを1000回繰り返し,size個を大きくしていくと標本平均が正規分布に従うことを示す.
using PyPlot
using Statistics
using Distributions
fig = figure(figsize=(20, 12), dpi=200)
# 標本の大きさのリスト
size_list = [1, 2,5, 10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000]
# 一様分布U(loc, loc+scale)のパラメータ
# loc は分布の開始点(最小値), scale は分布の幅
loc = 0
scale = 10
for (i, size) in pairs(size_list) # インデックスを1から開始する
ax = fig.add_subplot(2, 7, i)
title("\$size=$size\$")
# 一様分布からsize個サンプリングして標本平均を求めることを1000回繰り返す
sm = zeros(1000)
for j in 1:1000
vals = rand(Uniform(loc, loc+scale), size)
# size個の平均を計算
sm[j] = mean(vals)
end
# 一様分布の平均と分散を計算
mu = mean(Uniform(loc, loc+scale))
var = Statistics.var(Uniform(loc, loc+scale))
# 一様分布の標本平均の分布をヒストグラムとして描画
# plt[:hist] は、PythonのMatplotlibライブラリをJuliaから呼び出すために
# 用いる.ヒストグラムの描画.
plt[:hist](sm, alpha=0.4, label="sm", bins=20, density=true)
# 正規分布のpdfを描画
# 99%点まで描画
# 信頼係数99%のとき,標準正規分布において上側0.5%点は2.58
x = collect(mu-2.58*(var/size)^0.5:0.001:mu+2.58*(var/size)^0.5)
# pdfの値を生成
norm_vals = pdf(Normal(mu, (var/size)^0.5), x)
# plt[:plot] は、PythonのMatplotlibライブラリをJuliaから呼び出すために
# 用いる.折れ線グラフの描画.
plt[:plot](x, norm_vals, label="norm")
# グラフに凡例(legend)を追加
legend()
end
Mathematics is the language with which God has written the universe.