BDA3の4.7 Exercisesの2を解く。 本文はBayesian Data Analysis。 解答参考はSolutions to some exercises from Bayesian Data Analysis。
x | n | y |
---|
-0.86 | 5 | 0 |
-0.3 | 5 | 1 |
-0.05 | 5 | 3 |
0.73 | 5 | 5 |
xを薬の量。nを動物の数。yを死亡数とする。 薬の量を変えて、動物実験を行い、死亡数を観測した。 yは二項分布Bin(n,θ)に従うとする。θは死亡率である。 θはx(薬の量)が大きくなれば大きくなると考えられる。 0≤θ≤1であるので、logit関数を用いて
logit(θ)=α+βx とする。logit関数は
logit(θ)=log(1−θθ) である。yは二項分布Bin(n,θ)に従うので尤度関数は
p(y∣α,β,n,x)∝θy(1−θ)n−y=[logit−1(α+βx)]y[1−logit−1(α+βx)]n−y となる。 αとβの事前分布をUniform(0,1)とすると事後分布は
p(α,β∣y,n,x)∝p(α,β)p(y∣α,β,n,x)=i=1∏kp(yi∣α,β,ni,xi) である。
本文4.1の式(4.2)より
p(θ∣y)≈N(θ^,[I(θ^)]−1) と近似できる。θ^は事後分布のモードである。I(θ)は観測情報(observed information)であり、
I(θ)=−dθ2d2logp(θ∣y) と定義される。式(3)から
logp(y∣α,β)=constant+ylog(logit−1(α+βx))+(n−y)log(1−logit−1(α+βx)) ここで、logit−1(α+βx)はロジスティック関数
logit−1(α+βx)=1+exp(−(α+βx))1 となる。(6)式より
I(α,β)=−[dα2d2log(∏i=1kp(yi∣α,β,ni,xi))dαdβd2log(∏i=1kp(yi∣α,β,ni,xi))dαdβd2log(∏i=1kp(yi∣α,β,ni,xi))dβ2d2log(∏i=1kp(yi∣α,β,ni,xi))]=−[∑i=1kdα2d2log(p(yi∣α,β,ni,xi))∑i=1kdαdβd2log(p(yi∣α,β,ni,xi))∑i=1kdαdβd2log(p(yi∣α,β,ni,xi))∑i=1kdβ2d2log(p(yi∣α,β,ni,xi))] (7)式をα、βで偏微分する。
dα2d2logp(y∣α,β)=−(1+exp(α+βx))2nexp(α+βx) dαdβd2logp(y∣α,β)=−(1+exp(α+βx))2nxexp(α+βx) dβ2d2logp(y∣α,β)=−(1+exp(α+βx))2nx2exp(α+βx) (9)式に(10)-(12)式を代入する。
I(α,β)=[∑i=1k(1+exp(α+βxi))2nexp(α+βxi)∑i=1k(1+exp(α+βxi))2nxiexp(α+βxi)∑i=1k(1+exp(α+βxi))2nxiexp(α+βxi)∑i=1k(1+exp(α+βxi))2nxi2exp(α+βxi)] p(α,β|y)のモードとなるα^、β^がわかれば、正規分布近似
p(α^,β^∣y)≈N([α^ β^],[I(α^,β^)]−1) が導出できる。
using StatsPlots
x=[-0.86,-0.3,-0.05,0.73]
n=5
y=[0,1,3,5]
logistic(x)=1/(1+exp(-x))
function likelihood_yi(y,α,β,n,x)
θ=logistic(α+β*x)
θ^y * (1-θ)^(n-y)
end
likelihood_y(y,α,β,n,x)=prod(likelihood_yi.(y,α,β,n,x))
contour(-5:0.1:5,-10:0.1:30,(α,β)->likelihood_y(y,α,β,n,x), yrotation=90)
savefig(joinpath(@OUTPUT, "likelihood_y.svg"))
max_index = argmax(likelihood_y.(y|>Ref,(0:0.01:2)',5:0.01:10,n,x|>Ref))
matrix_αβ = tuple.((0:0.01:2)',5:0.01:10)
α, β = matrix_αβ[max_index]
(0.85, 7.76)
この図は正規化していない尤度関数の確率密度である。 密度の値は正しくない(全範囲で1にならない)がモードは取得できる。 αとβの事後分布モードは(0.85, 7.76)と分かった。
using Distributions, LinearAlgebra
expx = exp.(α .+ β .* x)
expx12 = (1 .+ expx) .^2
dlogpdα = sum(n .* expx ./ expx12)
dlogpdαβ = sum(n .* x .* expx ./ expx12)
dlogpdβ = sum(n .* x .^2 .* expx ./ expx12)
Iαβ = [dlogpdα dlogpdαβ; dlogpdαβ dlogpdβ]
normalappro = MvNormal([α, β], inv(Iαβ))
contour(-5:0.1:5,-10:0.1:30,(α,β)->pdf(normalappro, [α, β]))
savefig(joinpath(@OUTPUT, "normalappro.svg"))
nothing
事後分布のモードを使った正規分布近似はモード周辺はよく近似できているが離れるほど不正確になっている。 また、正規分布近似ではβがマイナスを取り得るが、βがマイナスであるということは 薬の量が増えると死亡率が下がるという意味であり、現実的にはあり得ない。