我目前正在PyMC3中构建以下模型:
obs_data = 25
with pm.Model() as model:
xct = pm.Normal('xct',mu = 315.5,sigma = 48)
#xct = np.random.normal(315.5,48)
a = pm.Normal('a',mu=0,sigma = 2.0)
# specify the time that the data points comes in at
t = 15
g_e = 2.5
f_e = 5.0
RH_ref = 65
RH_real = pm.Beta('RH_real',alpha=40.0,beta = 100.0)
k_e = ( (1 - (RH_real/100)**f_e)/ (1 - (RH_ref/100)**f_e)) ** g_e
b_c = pm.Normal('b_c',mu=-0.567,sigma = 0.024)
t_c = 2.0
k_c = (t_c/7)**b_c
k_t = pm.Normal('k_t',mu=1.25,sigma = 0.35)
C_s = pm.Normal('C_s',mu = 0.00082,sigma = 0.0001)
t0 = 0.767
tow = 0.1
bw = pm.Normal('bw',mu =0.446,sigma = 0.163)
p_sr = 0.1
W_t = (t0/t) **(((p_sr * tow)**bw)/2)
g = a + np.sqrt(2 * k_e * k_c * (k_t * Racc_inv + xct) * C_s) * np.sqrt(t)* W_t
output = pm.Lognormal('output',mu = g,sigma = 2,observed = obs_data)
step0 = pm.NUTS([xct],target_accept = 0.9)
step1 = pm.NUTS([a],target_accept = 0.9)
step2 = pm.NUTS([b_c],target_accept = 0.9)
step3 = pm.NUTS([k_t],target_accept = 0.9)
step4 = pm.NUTS([RH_real],target_accept = 0.9)
step5 = pm.NUTS([Racc_inv],target_accept = 0.9)
step6 = pm.NUTS([epsilon_t],target_accept = 0.9)
step7 = pm.NUTS([C_s],target_accept = 0.9)
trace = pm.sample(13000,init='advi+adapt_diag_grad',step=[step0,step1,step2,step3,step4,step5,step6,step7],cores=4,tune=8000,chains = 8)
但是,我得到了错误:
调整后有159个差异。增加target_accept
或重新设定参数。”并在结尾处:“对于某些参数,有效样本的数量小于10%。”
使用这种分步方法,我得到的分歧最少。我该如何摆脱它们?我知道有可能重新设置参数,但是当我以特定方式设置系统时该怎么办?
还有其他采样方法吗?