В настоящее время я строю следующую модель в 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%».
Используя этот шаговый метод, я получил наименьшее количество расхождений. Как я могу избавиться от них? Я знаю, что есть возможность репараметризации, но как я могу это сделать, когда моя система настраивается определенным образом?
Существуют ли другие подходы к выборке?