julia で t 分布に従う 95% 信頼区間を求めてみよう
お題のとおり、julia で t 分布に従う平均の 95% 信頼区間を求めてみます。
Distributions.jl を使います。少々、矛盾しますが、100 個の正規分布の乱数を観測値 (ベクトル) とします。
julia> using Distributions julia> x = randn(100) 100-element Array{Float64,1}: -0.307257 -0.074242 0.485464 1.47269 -0.0526559 -1.533 -0.123655 0.3673 -1.62462 -1.09255 ⋮ -0.313221 -0.655702 -0.933212 0.553407 -1.17567 -0.305231 1.8448 0.0459129 1.88275 -0.764762 julia> using PyCall, PyPlot julia> @pyimport seaborn as sns julia> sns.distplot(x, kde= false) PyObject <matplotlib.axes._subplots.AxesSubplot object at 0x130be8940>
x = randn(100) は、x2 = rand(Normal(),100) としても良いです。
julia> x2 = rand(Normal(),100); julia> sns.distplot(x2, kde= false) PyObject <matplotlib.axes._subplots.AxesSubplot object at 0x130be8940>
薄い茶色が後の x2 の方です。
自由度 99 の T 分布 TDist(99) における 2.5% と、97.5% の確率密度関数の x 軸の値は、 quantile() を使って求めることができます。
julia> quantile.(TDist(99), [0.025, 0.975]) 2-element Array{Float64,1}: -1.98422 1.98422
[0.025, 0.975] という2つの値を同時に計算したいので、quantile.() と "." を入れてブロードキャストというのにしています。
もし、これが、正規分布 Normal() だと、1.96 という有名な数字が出てきます。
julia> quantile.(Normal(), [0.025, 0.975]) 2-element Array{Float64,1}: -1.95996 1.95996
やはり、t 分布だと少し広くなりますね。
julia> mean(x) # 平均 -0.020108918166004477 julia> mean(x) + quantile.(TDist(99), [0.025, 0.975]).* std(x)/(sqrt(100-1)) 2-element Array{Float64,1}: -0.222323 0.182105
t 分布の 95% 信頼区間は、 -0.222323 と 0.182105 の間ということになります。
では、観測点を 1,000 個にしてみましょう。
julia> x3 = randn(1000); julia> mean(x3) -0.031912429047342365 julia> mean(x3) + quantile.(TDist(999), [0.025, 0.975]).* std(x3)/(sqrt(1000-1)) 2-element Array{Float64,1}: -0.0938459 0.030021 julia> sns.distplot(x3, kde=false, norm_hist=true ) PyObject <matplotlib.axes._subplots.AxesSubplot object at 0x13b4ba198>
1,000個でも滑かとは、言い難いですね。自分達のしている観測って、ちょっと、不安になりますね。