jupyter | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
黒木玄
2019-09-14
正規分布モデルとt分布を用いた母集団平均の両側検定と区間推定について解説する.
$ \newcommand\eps{\varepsilon} \newcommand\ds{\displaystyle} \newcommand\Z{{\mathbb Z}} \newcommand\R{{\mathbb R}} \newcommand\C{{\mathbb C}} \newcommand\QED{\text{□}} \newcommand\root{\sqrt} \newcommand\bra{\langle} \newcommand\ket{\rangle} \newcommand\d{\partial} \newcommand\sech{\operatorname{sech}} \newcommand\cosec{\operatorname{cosec}} \newcommand\sign{\operatorname{sign}} \newcommand\sinc{\operatorname{sinc}} \newcommand\real{\operatorname{Re}} \newcommand\imag{\operatorname{Im}} \newcommand\Li{\operatorname{Li}} \newcommand\PROD{\mathop{\coprod\kern-1.35em\prod}} $
using Base64
displayfile(mime, file; tag="img") = open(file) do f
display("text/html", """<$tag src="data:$mime;base64,$(base64encode(f))">""")
end
using Distributions
using Plots
pyplot(size=(400, 250), titlefontsize=10, fmt=:svg)
以下では気楽に, 確率密度函数を確率分布もしくは分布と呼ぶことがある.
以下において, 母集団分布を
ここで
母集団からの無作為抽出で得たサイズ
数学的に
我々の目標はサンプル
正規分布モデルを用いて, 母集団平均に関する両側検定の手続きを作ろう.
そして, 仮説
-
$M(\mu)$ =「ある$\sigma^2 > 0$ が存在して, 母集団分布$q(x)$ は平均$\mu$ , 分散$\sigma^2$ の正規分布$p(x|\mu,\sigma)$ に等しい.」
前節において, 母集団分布
仮に仮説
自由度
この手の正規分布に関係する公式の導出はガンマ函数やベータ函数の計算に慣れればできるようになる. 個人的な意見では, 高校で三角函数, 指数函数, 対数函数, 逆三角函数などを習った後の次に習うべき特殊積分と特殊函数はGauss積分とガンマ函数とベータ函数だと思う.
# 正規分布の確率密度函数
μ, σ = 2, 0.5
x = range(-1, 5, length=400)
plot(x, pdf.(Normal(μ, σ), x); label="\$p(x|\\mu, \\sigma^2)\$", title="\$\\mu = $μ, \\quad \\sigma = $σ\$")
# t 分布の確率密度函数
x = range(-6, 6, length=400)
P = plot(; title="pdf of t-distributions", size=(500, 300))
for ν in [1, 2, 4, 20]
plot!(x, pdf.(TDist(ν), x); label="\$\\nu = $ν\$", ls=:auto, lw=1.5)
end
plot!(x, pdf.(Normal(), x); label="std normal", color=:black, lw=0.8)
P
平均
と表わされる. コンピューター上にt分布が実装されていればこれは簡単に計算できる.
p値が非常に小さな値になるということは, 仮に仮説
前もって決めておいた十分に小さな値
このような手続きを仮説検定と呼ぶ.
警告: p値は仮説
補足: より一般にp値は「母集団分布に関する確率モデル
警告: 仮説
警告: 上の仮説検定で棄却可能なのは「母集団平均が
警告: 母集団分布が正規分布であるという仮説に関する検定も開発されているが, その仮説で「母集団分布は正規分布である」という仮説が棄却されなくても, 母集団分布が正規分布であることが正しいことにはならないことに注意せよ. 結局のところ, 正規分布モデルの適用の妥当性の判断には別の議論が必要になる.
計算例:
T_statistic(μ, X) = (mean(X) - μ)/√(var(X)/length(X))
p_value(μ, X) = 2ccdf(TDist(length(X)-1), abs(T_statistic(μ, X)))
α = 0.05
μ₀, σ₀ = 2.0, 0.5
n = 10
L = 10^5
X = rand(Normal(μ₀, σ₀), n, L)
count(p_value(μ₀, @view X[:, j]) < α for j in 1:size(X,2))/L
サンプル
「仮説
これは
と書き直される. これは,
は同値になる. この条件を書き直すと,
が得られる. これが, 正規分布モデルを用いて計算される母集団平均に関する信頼係数
まとめ: 正規分布モデルを用いて計算される母集団平均に関する信頼係数
補足: より一般に検定の方法が定義されているパラメーター付きの仮説
警告: 仮説検定で棄却されないことは正しいことも近似的に正しいことも意味しないことに注意せよ.
補足・警告: 「母集団分布は平均
計算例: 平均の信頼区間を計算する函数は以下のように作れる. 母集団分布が平均
function confidence_interval(α, X)
n = length(X)
τ = cquantile(TDist(n-1), α/2)
Xbar = mean(X)
U² = var(X)
(Xbar - τ*√(U²/n), Xbar + τ*√(U²/n))
end
function is_in_confidence_interval(α, X, μ)
a, b = confidence_interval(α, X)
a ≤ μ ≤ b
end
function prob_of_true_val_is_in_confint(
dist;
n = 30,
L = 10^6,
α = 0.05
)
X = rand(dist, n, L)
μ₀ = mean(dist)
count(is_in_confidence_interval(α, @view(X[:,j]), μ₀) for j in 1:L)/L
end
μ₀, σ₀ = 2.0, 0.5
prob_of_true_val_is_in_confint(Normal(μ₀, σ₀); n=30, α=0.05)
グラフ: 以下は, 母集団分布が平均
function plot_CIs(μ₀, α, X; indices=1:500)
P = plot(; size=(1000, 150), legend=false)
for i in indices
a, b = confidence_interval(α, @view(X[:,i]))
color = ifelse(a ≤ μ₀ ≤ b, :cyan, :red)
plot!([i,i], [a,b], color=color)
end
plot!([minimum(indices), maximum(indices)], [μ₀, μ₀], color=:black, ls=:dot)
plot!(xlim=(minimum(indices)-10, maximum(indices)+5))
end
function plot1000CIs(population_dist; n=30, α=0.05)
L = 1000
μ₀ = mean(population_dist)
X = rand(population_dist, n, L)
P1 = plot_CIs(μ₀, α, X; indices=1:500)
P2 = plot_CIs(μ₀, α, X; indices=501:1000)
plot(P1, P2, size=(1000, 300), layout=grid(2,1))
end
plot1000CIs(Normal(); n=10, α=0.05)
一般に仮説検定や信頼区間は使用するモデルに強く依存している. 統計学入門書の多くはこの点について明瞭に書かれていない.
そのことが原因で, 統計学を勉強している多くの人達が仮説検定や区間推定がモデル依存であることを意識できないまま先に進んでしまい, 統計モデルを用いた統計分析に出会ったときに, その自由度の高さに戸惑うことになる. 実際には仮説検定や区間推定の段階で現実にはどこまで正しいのか不明の統計モデルを使用しているのである.
統計モデルの自由度は極めて高いので, 分析の客観性を保つために, ベイズ統計における事前分布の使用を特別視することは不適切な考え方だということになる.
母集団のうち95%は標準正規分布にしたがっており, 残りの5%は平均50, 分散1の正規分布に従っていると仮定する. 次のセルでその分布の確率密度函数をプロットしておく.
mixnormal = MixtureModel([Normal(), Normal(50, 1)], [0.95, 0.05])
x = range(-10, 60, length=400)
plot(x, pdf.(mixnormal, x), label="mixnormal")
このとき, その母集団のサイズ
0.95^30
以下のセルでは, 上の設定の母集団のサイズ30のサンプルを100万個生成し, その各々について95%信頼区間を計算し, 信頼区間に母集団分布の平均が含まれる割合を計算している. 95%には程遠い78%程度の割合になる.
@time prob_of_true_val_is_in_confint(mixnormal; n=30, α=0.05)
次のセルでは, 上の母集団のサイズ30のサンプルを1000個生成して, 各々の95%信頼区間プロットしている. 赤線は母集団の平均を含まない信頼区間である. 例外の5%をサンプルが1つも含まないケースが結構多いせいで, 信頼区間が狭くなってしまって, 区間推定に完全に失敗するケースが無視できないだけ大量に発生していることがわかる.
plot1000CIs(mixnormal; n=30, α=0.05)
以下では以上と同じことをサイズ
要するに, この場合にはサンプルサイズを
0.95^100
@time prob_of_true_val_is_in_confint(mixnormal; n=100, α=0.05)
plot1000CIs(mixnormal; n=100, α=0.05)
前節の計算結果を見ればわかるように, 母集団の95%が正規分布に従っていたとしても, 全体の平均に大きな影響を与える5%の小集団を母集団分布が含んでいるだけで, 正規分布モデルに基いた区間推定は破綻する.
だから, 正規分布モデルに基いた区間推定を使用する場合には, そのような状況ではないことを別の議論で示しておく必要がある.
例えば, サンプルが何らかの測定の繰り返しによって得られたものであれば, 過去の同様の測定のデータでは全体の平均に大きな影響を与える小集団がまったく観測されていないことを理由に今回の場合にもそのように仮定してよいと主張することは十分合理的だと思われる.
このように, 正規分布モデルを使った単純な区間推定でさえ, 過去の調査や実験の結果がどうであったかに関する情報は重要な役目を果たすのである.
結果的に母集団分布に正規分布モデルを適用することが不適切だとわかった場合には当然他のより適切なモデルを探して推定に役に立てるべきだろう.
統計学入門書ではこの点について十分な説明がないようなので, みんな注意するべきだと思う.
@show prob_of_true_val_is_in_confint(Uniform(); n=30, α=0.05)
plot1000CIs(Uniform(0, 1); n=30, α=0.05)
@show prob_of_true_val_is_in_confint(Gamma(10, 0.1); n=30, α=0.05)
plot1000CIs(Gamma(10, 0.1); n=30, α=0.05)
@show prob_of_true_val_is_in_confint(Exponential(); n=30, α=0.05)
plot1000CIs(Exponential(); n=30, α=0.05)
@show prob_of_true_val_is_in_confint(LogNormal(); n=30, α=0.05)
plot1000CIs(LogNormal(); n=30, α=0.05)
@show prob_of_true_val_is_in_confint(Beta(0.1, 10); n=30, α=0.05)
plot1000CIs(Beta(0.1, 10); n=30, α=0.05)