3つある部屋A, B, Cに猫ちゃんたちがいます。
全部で100匹いて、現在、それぞれの部屋に0.6,0.25,
0.15の割合でいます。
10分に1回猫ちゃん達は部屋を移動できますが、部屋と
部屋の間には管理人がいて、通過する割合が左下の表の
通りとなるよう制御しています。
次に行く部屋(j)
A B C
現在の
部屋
(i)
A 0.3 0.3 0.4
B 0.1 0.5 0.4
C 0.2 0.6 0.2
猫ちゃんの遷移
波平釣果問題
prop_m = 1;prop_sd = 1.5
def f(x): # 事後分布カーネル
k = 11; t = 13
return x**(k-1) * np.exp(-t*x)
def q(theta):
return st.norm.pdf(theta, loc=prop_m,
scale=prop_sd)
def rand_prop():
return st.norm.rvs(prop_m, prop_sd)
theta = []
# Initial value
current = 1
theta.append(current)
n_itr = 100000
for i in range(n_itr):
# 提案分布からの乱数生成
a = rand_prop()
if a < 0: continue
r = (q(current)*f(a)) / (q(a)*f(current))
if r < 0: continue
if r >= 1 or r > st.uniform.rvs():
# Accept
theta.append(a); current = a
else:
#Reject
pass
sample mean:0.88094, sample std:0.28639
mean:0.84615, std:0.25512
理論分布と
ヒストグラムが一致
しないので、
要改善・・・
def f_beta(x):
p =10.2
q = 5.8
return x**(p-1) * (1-x)**(q-1)
def rand_prop():
return st.uniform.rvs()
theta = []
# Initial value
current = 0.5
theta.append(current)
n_itr = 200000
for i in range(n_itr):
# 提案分布からの乱数生成
a = rand_prop()
r = f_beta(a) / f_beta(current)
if r < 0:
#reject
continue
if r >= 1 or r > st.uniform.rvs():
# Accept
theta.append(a)
current = a
else:
#Reject
pass
正選手問題 sample mean:0.63239, sample std:0.13082
mean:0.63750, std:0.12412
理論分布と
ヒストグラムが一致
しないので、
要改善・・・
80.
提案分布の選び方
目標分布 : ガンマ分布f(✓|↵ = 11, = 13)
提案分布 : 正規分布
(青)
N(1, 0.5) (緑)
正規分布A
正規分布B
正規分布C
N(1, 2.0) (赤)
N(1, 0.01)
N(3, 0.5)
(赤)
(赤)
C
B
A