Chapter 1 序論
Exercise 1.1 P(A)>0,P(B)>0とする. P(A∣B)=P(B∣A) が成り立つのために,P(A),P(B)およびP(A∩B)が満たすべき条件を求めよ.
Solution. 本問はひっかけ問題である.条件付き確率の定義から,もとめる等号が成り立つことと P(A∩B)P(B)=P(A∩B)P(A) が成り立つことは同値である.もしP(A∩B)>0なら,両辺をP(A∩B)でわって,P(A)=P(B)を得る.じつは,これだけがこたえではなく,P(A∩B)=0なら,P(A),P(B)の値がなんであれ成り立つ.したがって,求める等号が成り立つのはつぎの2つの場合である.ひとつは P(A∩B)>0かつP(A)=P(B)のとき.もうひとつはP(A∩B)=0となるときである.
Exercise 1.2 事象A,Bは独立であり,P(B)>0とする.また,P(B∣A∪B)=2/3,P(A∣B)=1/2とする.このときP(B)を求めよ.
Solution. AとBが独立だから, P(A∣B)=P(A∩B)P(B)=P(A)P(B)P(B)=P(A) となる.したがってP(A)=P(Ac)=1/2である.いっぽう, P(A∪B)=P(A)+P(Ac∩B)=P(A)+P(Ac)P(B)=12(1+P(B)) である.よって P(B∣A∪B)=P(B)P(A∩B)=P(B)(1+P(B))/2=23 となり,かんたんな計算からP(B)=1/2を得る.
Exercise 1.3 ある大学では,学生のうち60%はスニーカーを履いている.一方,教職員のうち20%がスニーカーを履いている.大学の構成員のうち,60%が学生,40%が教職員とする.その大学の,ある構成員はスニーカーを履いていたとする.このとき彼もしくは彼女が学生である確率を求めよ.
Solution. (20200312解答修正) 大学の構成員を勝手に一人選んだとき,それが学生である事象をA,スニーカーを履いている事象をBとする.すると P(A)=0.6,P(B∣A)=0.6,P(B∣Ac)=0.2 である.また,求める確率はP(A∣B)である.条件付き確率の定義から P(A∣B)=P(A∩B)P(B)=P(A∩B)P(A∩B)+P(Ac∩B)=P(B∣A)P(A)P(B∣A)P(A)+P(B∣Ac)P(Ac)=0.6×0.60.6×0.6+0.2×0.4=911.
Exercise 1.4 Nは正の整数,σ2は正の実数.観測x1,…,xNは独立でN(θ,σ2)に従い,θの事前分布をN(0,σ2)とする.このときθの事後分布を求めよ.
Solution. 観測をまとめてxNと書くと,尤度は p(xN∣θ)=N∏n=11√2πσ2exp(−(xn−θ)22σ2)∝exp(−12σ2N∑n=1(xn−θ)2) となる.従って,事後確率密度関数は p(θ∣xN)∝p(xN∣θ)p(θ)∝exp(−12σ2N∑n=1(xn−θ)2−θ22σ2) となる.指数の中身を平方完成すると −N+12σ2(θ−1N+1N∑n=1xn)2+C となる.ただし,実数Cはθによらない定数とする.よって事後密度関数の形から,事後分布は N(∑Nn=1xn/(N+1),σ2/(N+1)).
rstan
を用いて事後分布を描画してみよう.rstan
はベイズ統計学の応用でしばしば使われるStan言語のR版である.教科書では扱えなかったが,ちょっとした計算に便利だ.なお,rstan
では常に,事後分布を導出する際には乱数を用いた近似が利用されることに注意せよ.まずrstan
のために,モデルを記述しよう.こうしたことはたいてい,固い教科書よりもユーザによるウェブサイトが役に立つ.説明はそちらに譲る.
モデルの記述の仕方はいくつかあるが,ここでは下記のモデルをnormal.stan
というチャンクに記述する.
data {
int N;
real x[N];
real<lower=0> sigma;
}
parameters {
real theta;
}
model {
theta ~ normal(0, sigma); // 事前分布
x ~ normal(theta, sigma); // 尤度
}
そしてそのモデルをrstan
の関数に代入しよう.最初の二行はおまじないなので気にしなくて良い.
rstan_options(auto_write = TRUE)
options(mc.cores = parallel::detectCores())
# データの生成
sigma <- 1.0
x <- rnorm(10,1,sigma)
normal_dat <- list(N = length(x), x = x, sigma = sigma)
# コンパイル
fit <- rstan::sampling(normal.stan, data = normal_dat,
iter = 10^4, chains = 4)
# stanからparameterの取り出し
theta <- extract(fit, 'theta')
theta <- unlist(theta, use.names=FALSE)
# 理論的な事後密度関数
t <- mean(x)+seq(-1,1,length=1000)
fit <- dnorm(t, sum(x)/(length(x)+1), sigma/sqrt(length(x)+1))
fig <- plot_ly(x = theta, type="histogram", histnorm = "probability density", name="rstan")
fig %>% add_lines(x = t, y = fit, mode = 'lines', name="exact")
おおよそ上で計算した理論的な事後密度関数と,rstan
で乱数を用いて計算したものは一致するようだ.
Exercise 1.5 ν,αが正の実数であるとき,式(1.7)をもちいて,G(ν,α)の平均を求めよ.
Solution. 式(1.7)より ∫∞0x ανxν−1e−αxΓ(ν)dx=ανΓ(ν)∫∞0xνe−αxdx=ανΓ(ν)Γ(ν+1)αν+1=να. ただし,Γ(ν+1)=ν Γ(ν)を用いた.
Remark. 記号∝を使うのは,事後分布を計算するために不要な計算を回避する,計算のテクニックである.計算をこのように適宜省かないと,事後分布の計算はとても煩雑になりがちだからだ. しかし,初学者は記号∝の意味するものが well-defined ではないと感じることだろう.そのため,初学者は教科書に最初に紹介した,記号∝をもちいずきっちり事後分布の確率密度関数を計算する方法を何度か経験したほうが良い.その経験のあとなら記号∝の便利さと意味を納得できるだろう.
Exercise 1.6 Nは正の整数,μは実数,α,β,τは正の実数とする.観測x1,…,xNはN(μ,τ−1)に従い独立とする.また,τ∼G(α,β)とする.実数α,β,μは既知とするとき,パラメータτの事後分布を求めよ.
Solution. 尤度は p(xN∣τ)=N∏n=1√τ2πexp(−(xn−μ)22τ)∝τN/2exp(−N∑n=1(xn−μ)22τ) となる.よって事後密度関数は p(τ∣xN)∝τα+N/2−1exp(−{β+N∑n=1(xn−μ)22}τ) となる.よって事後密度関数の形から,事後分布は G(α+N2,β+N∑n=1(xn−μ)22).
Remark. 確率分布を求めよ,という問題は,求めるべき確率分布がよく知られた確率分布になることを暗に意味している.その確率分布が正規分布やガンマ分布など,どの確率分布なのか,そしてパラメータの値がなにかということが聞かれているのである.
これもrstan
を使って確認しよう.次のモデルをnormal_gamma.stan
というチャンクに記述した.
data {
int N;
real x[N];
real<lower=0> alpha;
real<lower=0> beta;
real mu;
}
parameters {
real tau;
}
model {
tau ~ gamma(alpha, beta); // 事前分布
x ~ normal(mu, 1/sqrt(tau)); // 尤度
}
rstan
の結果と理論の結果は整合性があるようだ.
# データの生成
alpha <- 2.0
beta <- 3.0
mu <- 2.5
tau <- 1.0
x <- rnorm(10,mu,1/sqrt(tau))
normal_gamma_dat <- list(N = length(x), x = x, alpha = alpha, beta = beta, mu = mu)
# コンパイル
fit <- rstan::sampling(normal_gamma.stan, data = normal_gamma_dat,
iter = 10^4, chains = 4)
##
## SAMPLING FOR MODEL '4158cf09bd62d921e268909ea92a86fb' NOW (CHAIN 1).
## Chain 1: Rejecting initial value:
## Chain 1: Error evaluating the log probability at the initial value.
## Chain 1: Exception: normal_lpdf: Scale parameter is nan, but must be > 0! (in 'modela68872b8d8a9_4158cf09bd62d921e268909ea92a86fb' at line 13)
##
## Chain 1: Rejecting initial value:
## Chain 1: Error evaluating the log probability at the initial value.
## Chain 1: Exception: normal_lpdf: Scale parameter is nan, but must be > 0! (in 'modela68872b8d8a9_4158cf09bd62d921e268909ea92a86fb' at line 13)
##
## Chain 1:
## Chain 1: Gradient evaluation took 1.8e-05 seconds
## Chain 1: 1000 transitions using 10 leapfrog steps per transition would take 0.18 seconds.
## Chain 1: Adjust your expectations accordingly!
## Chain 1:
## Chain 1:
## Chain 1: Iteration: 1 / 10000 [ 0%] (Warmup)
## Chain 1: Iteration: 1000 / 10000 [ 10%] (Warmup)
## Chain 1: Iteration: 2000 / 10000 [ 20%] (Warmup)
## Chain 1: Iteration: 3000 / 10000 [ 30%] (Warmup)
## Chain 1: Iteration: 4000 / 10000 [ 40%] (Warmup)
## Chain 1: Iteration: 5000 / 10000 [ 50%] (Warmup)
## Chain 1: Iteration: 5001 / 10000 [ 50%] (Sampling)
## Chain 1: Iteration: 6000 / 10000 [ 60%] (Sampling)
## Chain 1: Iteration: 7000 / 10000 [ 70%] (Sampling)
## Chain 1: Iteration: 8000 / 10000 [ 80%] (Sampling)
## Chain 1: Iteration: 9000 / 10000 [ 90%] (Sampling)
## Chain 1: Iteration: 10000 / 10000 [100%] (Sampling)
## Chain 1:
## Chain 1: Elapsed Time: 0.084998 seconds (Warm-up)
## Chain 1: 0.062902 seconds (Sampling)
## Chain 1: 0.1479 seconds (Total)
## Chain 1:
##
## SAMPLING FOR MODEL '4158cf09bd62d921e268909ea92a86fb' NOW (CHAIN 2).
## Chain 2: Rejecting initial value:
## Chain 2: Error evaluating the log probability at the initial value.
## Chain 2: Exception: normal_lpdf: Scale parameter is nan, but must be > 0! (in 'modela68872b8d8a9_4158cf09bd62d921e268909ea92a86fb' at line 13)
##
## Chain 2: Rejecting initial value:
## Chain 2: Error evaluating the log probability at the initial value.
## Chain 2: Exception: normal_lpdf: Scale parameter is nan, but must be > 0! (in 'modela68872b8d8a9_4158cf09bd62d921e268909ea92a86fb' at line 13)
##
## Chain 2:
## Chain 2: Gradient evaluation took 4e-06 seconds
## Chain 2: 1000 transitions using 10 leapfrog steps per transition would take 0.04 seconds.
## Chain 2: Adjust your expectations accordingly!
## Chain 2:
## Chain 2:
## Chain 2: Iteration: 1 / 10000 [ 0%] (Warmup)
## Chain 2: Iteration: 1000 / 10000 [ 10%] (Warmup)
## Chain 2: Iteration: 2000 / 10000 [ 20%] (Warmup)
## Chain 2: Iteration: 3000 / 10000 [ 30%] (Warmup)
## Chain 2: Iteration: 4000 / 10000 [ 40%] (Warmup)
## Chain 2: Iteration: 5000 / 10000 [ 50%] (Warmup)
## Chain 2: Iteration: 5001 / 10000 [ 50%] (Sampling)
## Chain 2: Iteration: 6000 / 10000 [ 60%] (Sampling)
## Chain 2: Iteration: 7000 / 10000 [ 70%] (Sampling)
## Chain 2: Iteration: 8000 / 10000 [ 80%] (Sampling)
## Chain 2: Iteration: 9000 / 10000 [ 90%] (Sampling)
## Chain 2: Iteration: 10000 / 10000 [100%] (Sampling)
## Chain 2:
## Chain 2: Elapsed Time: 0.082411 seconds (Warm-up)
## Chain 2: 0.062013 seconds (Sampling)
## Chain 2: 0.144424 seconds (Total)
## Chain 2:
##
## SAMPLING FOR MODEL '4158cf09bd62d921e268909ea92a86fb' NOW (CHAIN 3).
## Chain 3:
## Chain 3: Gradient evaluation took 5e-06 seconds
## Chain 3: 1000 transitions using 10 leapfrog steps per transition would take 0.05 seconds.
## Chain 3: Adjust your expectations accordingly!
## Chain 3:
## Chain 3:
## Chain 3: Iteration: 1 / 10000 [ 0%] (Warmup)
## Chain 3: Iteration: 1000 / 10000 [ 10%] (Warmup)
## Chain 3: Iteration: 2000 / 10000 [ 20%] (Warmup)
## Chain 3: Iteration: 3000 / 10000 [ 30%] (Warmup)
## Chain 3: Iteration: 4000 / 10000 [ 40%] (Warmup)
## Chain 3: Iteration: 5000 / 10000 [ 50%] (Warmup)
## Chain 3: Iteration: 5001 / 10000 [ 50%] (Sampling)
## Chain 3: Iteration: 6000 / 10000 [ 60%] (Sampling)
## Chain 3: Iteration: 7000 / 10000 [ 70%] (Sampling)
## Chain 3: Iteration: 8000 / 10000 [ 80%] (Sampling)
## Chain 3: Iteration: 9000 / 10000 [ 90%] (Sampling)
## Chain 3: Iteration: 10000 / 10000 [100%] (Sampling)
## Chain 3:
## Chain 3: Elapsed Time: 0.079113 seconds (Warm-up)
## Chain 3: 0.072525 seconds (Sampling)
## Chain 3: 0.151638 seconds (Total)
## Chain 3:
##
## SAMPLING FOR MODEL '4158cf09bd62d921e268909ea92a86fb' NOW (CHAIN 4).
## Chain 4: Rejecting initial value:
## Chain 4: Error evaluating the log probability at the initial value.
## Chain 4: Exception: normal_lpdf: Scale parameter is nan, but must be > 0! (in 'modela68872b8d8a9_4158cf09bd62d921e268909ea92a86fb' at line 13)
##
## Chain 4: Rejecting initial value:
## Chain 4: Error evaluating the log probability at the initial value.
## Chain 4: Exception: normal_lpdf: Scale parameter is nan, but must be > 0! (in 'modela68872b8d8a9_4158cf09bd62d921e268909ea92a86fb' at line 13)
##
## Chain 4:
## Chain 4: Gradient evaluation took 8e-06 seconds
## Chain 4: 1000 transitions using 10 leapfrog steps per transition would take 0.08 seconds.
## Chain 4: Adjust your expectations accordingly!
## Chain 4:
## Chain 4:
## Chain 4: Iteration: 1 / 10000 [ 0%] (Warmup)
## Chain 4: Iteration: 1000 / 10000 [ 10%] (Warmup)
## Chain 4: Iteration: 2000 / 10000 [ 20%] (Warmup)
## Chain 4: Iteration: 3000 / 10000 [ 30%] (Warmup)
## Chain 4: Iteration: 4000 / 10000 [ 40%] (Warmup)
## Chain 4: Iteration: 5000 / 10000 [ 50%] (Warmup)
## Chain 4: Iteration: 5001 / 10000 [ 50%] (Sampling)
## Chain 4: Iteration: 6000 / 10000 [ 60%] (Sampling)
## Chain 4: Iteration: 7000 / 10000 [ 70%] (Sampling)
## Chain 4: Iteration: 8000 / 10000 [ 80%] (Sampling)
## Chain 4: Iteration: 9000 / 10000 [ 90%] (Sampling)
## Chain 4: Iteration: 10000 / 10000 [100%] (Sampling)
## Chain 4:
## Chain 4: Elapsed Time: 0.081844 seconds (Warm-up)
## Chain 4: 0.06383 seconds (Sampling)
## Chain 4: 0.145674 seconds (Total)
## Chain 4:
# stanからparameterの取り出し
tau <- extract(fit, 'tau')
tau <- unlist(tau, use.names=FALSE)
# 理論的な事後密度関数
t <- seq(0,4,length=1000)
fit <- dgamma(t, shape = alpha + length(x)/2, rate = beta + sum((x-mu)^2)/2)
fig <- plot_ly(x = tau, type="histogram", histnorm = "probability density", name="rstan")
fig %>% add_lines(x = t, y = fit, mode = 'lines', name="exact")
Exercise 1.7 α,βは正の実数とする.観測xはE(θ)に従い,θの事前分布をG(α,β)とする.
(a). このときθの事後分布を求めよ.
(b). 事後平均を求めよ.
(c). 事後予測分布を求めよ.
Solution. (a). 事後密度関数は p(θ∣x)∝θe−θxθα−1e−βθ∝θαe−(x+β)θ となる.従って,事後密度関数の形から,事後分布は G(α+1,x+β).
(b). 練習問題1.5より α+1x+β.
(c). 正の実数x∗を将来の観測とすると,事後予測分布の確率密度関数は p(x∗∣x)=∫∞0θe−θx∗(x+β)α+1θαΓ(α+1)e−(x+β)θdθ=∫∞0(x+β)α+1θα+1Γ(α+1)e−(x+x∗β)θdθ=Γ(α+2)(x+x∗+β)α+2(x+β)α+1Γ(α+1)=(α+1)(x+β)α+1(x+x∗+β)α+2.
Exercise 1.8 観測xはN(θ1,θ−12)に従い,θ1の事前分布をN(0,θ−12)とし,さらにθ2の事前分布をE(1)とする.
(a). θ1とxで条件づけたθ2の条件つき分布を求めよ.
(b). θ1の周辺事後分布を求めよ.
Solution. (20200312解答修正) (a). 尤度は p(x∣θ1,θ2)=√θ22πexp(−(x−θ1)22θ2) と書ける.したがって事後分布の確率密度関数は p(θ1,θ2∣x)∝p(x∣θ1,θ2)p(θ1∣θ2)p(θ2)=√θ22πexp(−(x−θ1)22θ2)√θ22πexp(−θ212θ2)exp(−θ2)∝θ2exp(−((x−θ1)22+θ212+1)θ2) となる.するとp(θ2∣x,θ1,)∝p(θ1,θ2∣x)だからθ1とxで条件づけたθ2の条件つき分布は ガンマ分布とパラメータを見比べると, Ga(2,(x−θ1)22+θ212+1) であることがわかる.
(b). ガンマ関数と見比べることで, p(θ1∣x)=∫∞0p(θ1,θ2∣x)dθ2=((x−θ1)22+θ212+1)−2∫∞0((x−θ1)22+θ212+1)2θ2exp(−((x−θ1)22+θ212+1)θ2)dθ2=((x−θ1)22+θ212+1)−2Γ(2) となる.だからt分布のパラメータ(16ページ)と見比べれば,これは T3(x2,{13(1+x24)}1/2) の確率密度関数である.したがって,周辺事後分布は上記のt分布である.
Remark. ここでは p(θ2∣x,θ1)∝p(θ1,θ2∣x) を用いた.なぜなら, p(θ2∣x,θ1)=p(θ1,θ2∣x)p(θ1∣x) であり,θ1とxで条件つけた分布を計算する際には左辺の分母を定数と見て良いからだ.この考え方は,あとでギブスサンプリングを構成する際に重要である.
これもrstan
を使って確認しよう.今までとは違う方法でrstan
を走らせてみよう.
モデルをすべてexcode
という変数に代入する.
excode <- '
data {
real x;
}
parameters {
real theta1;
real<lower=0> theta2;
}
model {
theta1 ~ normal(0, 1/sqrt(theta2)); // 事前分布
theta2 ~ exponential(1); // 事前分布
x ~ normal(theta1, 1/sqrt(theta2)); // 尤度
}'
コンパイルする際も先ほどと命令が若干異なる.
# データの生成
theta1 <- 2.0
theta2 <- 1.0
x <- rnorm(1,theta1,1/sqrt(theta2))
normal_exp_dat <- list(x = x)
# コンパイル
fit <- stan(model_code = excode, data = normal_exp_dat,
iter = 10000, chains = 4)
# stanからparameterの取り出し
theta1 <- extract(fit, 'theta1')
theta1 <- unlist(theta1, use.names=FALSE)
# 理論的な事後密度関数
t <- x/2 + seq(-10,10,length=1000)
scale <- sqrt((1 + x^2/4)/3)
fit <- dt( (t - x/2)/scale, df = 3)/scale
fig <- plot_ly(x = theta1, type="histogram", histnorm = "probability density", name="rstan")
fig <- fig %>% add_lines(x = t, y = fit, mode = 'lines', name="exact")
fig <- fig %>% layout(xaxis = list(range = c(x/2-10, x/2+10)))
fig
## Warning: 'scatter' objects don't have these attributes: 'histnorm'
## Valid attributes include:
## 'cliponaxis', 'connectgaps', 'customdata', 'customdatasrc', 'dx', 'dy', 'error_x', 'error_y', 'fill', 'fillcolor', 'groupnorm', 'hoverinfo', 'hoverinfosrc', 'hoverlabel', 'hoveron', 'hovertemplate', 'hovertemplatesrc', 'hovertext', 'hovertextsrc', 'ids', 'idssrc', 'legendgroup', 'legendgrouptitle', 'legendrank', 'line', 'marker', 'meta', 'metasrc', 'mode', 'name', 'opacity', 'orientation', 'selected', 'selectedpoints', 'showlegend', 'stackgaps', 'stackgroup', 'stream', 'text', 'textfont', 'textposition', 'textpositionsrc', 'textsrc', 'texttemplate', 'texttemplatesrc', 'transforms', 'type', 'uid', 'uirevision', 'unselected', 'visible', 'x', 'x0', 'xaxis', 'xcalendar', 'xhoverformat', 'xperiod', 'xperiod0', 'xperiodalignment', 'xsrc', 'y', 'y0', 'yaxis', 'ycalendar', 'yhoverformat', 'yperiod', 'yperiod0', 'yperiodalignment', 'ysrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'
Exercise 1.9 本問は例1.8の二項分布から多項分布への拡張である. Kは正の整数,α1,…,αKは正の実数とする. D(α1,…,αK)は確率密度関数 p(θ1,…,θK−1)={Γ(α1+⋯+αK)Γ(α1)⋯Γ(αK)θα1−11⋯θαK−1Kif 0<θk<1,k=1,…,K0otherwise をもつ.ただし,θ=(θ1,θ2,…,θK−1)とし, θK=θK(θ)=1−θ1−⋯−θK−1 とする.さらに,Nは正の整数で,θ1,…,θK−1は正の実数でθ1+⋯+θK−1<1のとき,) M(N,θ1,…,θK−1)は確率関数 p(x1,…,xK−1)={N!x1!⋯xK!θx11⋯θxKKif 0≤xk≤N,k=1,…,K0otherwise をもつ.ただし,x=(x1,…,xK−1)は正の整数で xK=xK(x)=N−x1−⋯−xK−1 とする. x∣θ∼M(N,θ), θ∼D(α1,…,αK)であるとき,θの事後分布をもとめよ.
Solution. 尤度が p(x∣θ)∝θx11⋯θxKK と書けるから事後分布の確率密度関数は p(θ∣x)∝p(x∣θ)p(θ)∝θx11⋯θxKK θα1−11⋯θαK−1K=θα1+x1−11⋯θαK+xK−1K となる.だから,ディリクレ分布の確率密度関数と見比べれば,事後分布が D(α1+x1,…,αK+xK) であることがわかる.
Remark. ディリクレ分布は和が1になる正の数列θ1,…,θKに値を取る確率分布である.とくにK=2としたときがベータ分布である.和をとると1になる列は多項分布の確率関数になるから,ディリクレ分布は確率分布の確率分布とも捉えられる.うえの練習問題はこの事実を使った.
ベータ分布はK=2であり,θ1+θ2=1となるので,θ1さえわかればθ2もわかるので確率密度関数を描画するのもたやすい.だから,ベータ分布のパラメータがベータ分布にどのように影響するかをみることも容易である.それに比べると,K≥3のディリクレ分布の形状の把握は難しい.ここではK=3の場合を考えてみよう.じつは X1∼G(α1,1),…,XK∼G(αK,1) であり,独立であるとき, θ=(θ1,…,θK)=(X1∑Kk=1Xk,…,XK∑Kk=1Xk) とすると,(θ1,…,θK−1)はD(α1,…,αK)に従う.以下では K=3のときに,乱数θをたくさん生成し,3次元空間に描画した.パラメータを変えて実験してみると良い.
set.seed(1234)
N <- 1e3
alpha <- c(1.0, 1.5, 1.8) #Parameter
x <- rgamma(N, alpha[1])
y <- rgamma(N, alpha[2])
z <- rgamma(N, alpha[3])
w <- x + y + z
data.fr <- data.frame(x=x/w, y=y/w, z=z/w)
plot_ly(data.fr, x=~x, y=~y, z=~z) %>% add_markers(marker=list(size=3))
Exercise 1.10 例1.14を参考に,実数μ, 正の実数σによる正規分布N(μ,σ2)に対するジェフリーズ事前分布を計算したい.パラメータをθ=(μ,σ2)としたときのジェフリーズ事前分布をフィッシャー情報行列の計算による方法と,不変性を用いた方法の二通りの方法で求めよ.
Solution. ξ=σ2とおく.すると正規分布N(μ,ξ)の確率密度関数は √12πξexp(−12ξ(x−μ)2) である.だからスコア関数は S1S2:=(ξ−1(x−μ)−12ξ+ξ−2(x−μ)22) となる.いっぽう,例1.14で紹介したように, E[x−μ]=E[(x−μ)3]=0, E[(x−μ)2]=ξ, E[(x−μ)4]=3ξ2 となる.したがって,フィッシャー情報行列は E[(S21S1S2S2S1S22)]=(ξ−100ξ−2/2) である.この行列の行列式はξ−3/2となるから,パラメータを(μ,ξ)としたときのジェフリーズ事前分布は 2−1/2ξ−3/2 を密度関数として持つ.これでひとつめの直接的な方法でのジェフリーズ事前分布を導出できた.
いっぽう,例1.14ではτ=ξ−1としてパラメータを(μ,ξ)としたときのジェフリーズ事前分布が τ−1/2 を密度関数として持つことがわかっている.また (μ,τ)↦(μ,ξ) という変数変換によるヤコビ行列式は |det である.よってジェフリーズ事前分布の変数変換による不変性から,パラメータを(\mu,\xi)としたときのジェフリーズ事前分布は \xi^{1/2}~\xi^{-2}=\xi^{-3/2} となり,たしかにさきほど求めたものと一致する (注: 次のRemark を見よ).
Remark. この例のジェフリーズ事前分布のように非正則な分布に対しては,密度関数の定数倍の差は無視して良い.このことを,非正則な分布は定数倍の任意性があるとも言う.
Exercise 1.11 Nは正の整数,\lambda_1,\lambda_2は正の実数とする. x_1^1,\ldots, x_N^1\mid \lambda_1\sim\mathcal{P}(\lambda_1), x_1^2,\ldots, x_N^2\mid \lambda_2\sim\mathcal{P}(\lambda_2)であり すべて独立とする.二つのモデル \mathcal{M}_1:\lambda_1,\lambda_2\sim \mathcal{E}(1), \mathcal{M}_0:\lambda_1=\lambda_2\sim\mathcal{E}(1) を考える.二つのモデルへの事前確率は0.5ずつとする.
(a). モデル\mathcal{M}_0の事後確率を求めよ.
(b). ベイズ因子B_{10}を求めよ.
Solution. 例1.15でつかったx^Nやx_1^N, x_2^Nといった記号を再利用したうえで,さらに記号をいくつか用意しよう.各集団の和をそれぞれ S_1=\sum_{n=1}^Nx_n^1,\ S_2=\sum_{n=1}^Nx_n^2 とし,全体の和を S=S_1+S_2 とする.また,各集団の積をそれぞれ T_1=x_1^1\cdots x_N^1,\ T_2=x_1^2\cdots x_N^2 とし,全体の積を T=T_1+T_2 としよう.すると,モデル\mathcal{M}_1のもとの周辺事後確率密度関数は p(x^N\mid 1)=\int_0^\infty p(x_1^N\mid \lambda_1)p(\lambda_1)\mathrm{d}\lambda_1\times \int_0^\infty p(x_2^N\mid \lambda_2)p(\lambda_2)\mathrm{d}\lambda_2 となる.うえの2つの積分の積のうち,最初の一つは \int_0^\infty\frac{\lambda_1^{S_1}}{T_1}e^{-N\lambda_1}~e^{-\lambda_1}\mathrm{d}\lambda_1=\frac{\Gamma(1+S_1)}{T_1(N+1)^{1+S_1}} と計算できる.2つ目の積についても同じ計算をすれば \int_0^\infty\frac{\lambda_2^{S_2}}{T_2}e^{-N\lambda_2}~e^{-\lambda_2}\mathrm{d}\lambda_2=\frac{\Gamma(1+S_2)}{T_2(N+1)^{1+S_2}} となることがわかる.よってモデル\mathcal{M}_1のもとの周辺事後確率密度関数は p(x^N\mid 1)=\frac{\Gamma(1+S_1)\Gamma(1+S_2)}{T(N+1)^{2+S}} となる.まったく同じ計算で,モデル\mathcal{M}_0の場合は p(x^N\mid 0)=\int_0^\infty\frac{\lambda_1^{S}}{T}e^{-2N\lambda}~e^{-\lambda}\mathrm{d}\lambda=\frac{\Gamma(1+S)}{T(2N+1)^{1+S}} を得る.したがって \frac{p(x^N\mid 0)}{p(x^N\mid 1)}=\frac{(N+1)^{2+S}}{(2N+1)^{1+S}}\binom{S}{S_1} となる.よって
(a). 事後確率は \frac{(N+1)^{2+S}}{(2N+1)^{1+S}}\binom{S}{S_1}\left(1+\frac{(N+1)^{2+S}}{(2N+1)^{1+S}}\binom{S}{S_1}\right)^{-1}.
(b). ベイズ因子は \left(\frac{(N+1)^{2+S}}{(2N+1)^{1+S}}\binom{S}{S_1}\right)^{-1}.