贝叶斯IRT Pymc3-参数推断

时间:2020-04-25 10:22:19

标签: bayesian pymc3 hierarchical pymc

我想使用PyMC3估算IRT模型。 我生成的数据具有以下分布:

alpha_fix = 4
beta_fix = 100
theta= np.random.normal(100,15,1000)
prob = np.exp(alpha_fix*(theta-beta_fix))/(1+np.exp(alpha_fix*(theta-beta_fix)))
prob_tt = tt._shared(prob)

然后我使用PyMC3创建了一个模型来推断参数:

irt = pm.Model()
with irt:
#     Priors
alpha = pm.Normal('alpha',mu = 4 , tau = 1)
beta = pm.Normal('beta',mu = 100 , tau = 15)
thau = pm.Normal('thau' ,mu = 100 , tau = 15)

#     Modelling
p = pm.Deterministic('p',tt.exp(alpha*(thau-beta))/(1+tt.exp(alpha*(thau-beta))))

out = pm.Normal('o',p,observed = prob_tt)

然后我推断出模型:

with irt: 
    mean_field = pm.fit(10000,method='advi', callbacks=[pm.callbacks.CheckParametersConvergence(diff='absolute')])

最后,从模型中采样以获取计算后验:

pm.plot_posterior(mean_field.sample(1000), color='LightSeaGreen');

但是“ alpha”(平均值为2.2)的结果与预期的结果(4)相距相对较远,即使先前alpha的标定良好也是如此。

Posterior parameters

您是否会知道此间隙的起源以及如何解决?

非常感谢

1 个答案:

答案 0 :(得分:0)

out = pm.Normal('o',p,observed = prob_tt)

为什么要使用Normal而不是Bernoulli?另外,正常的方差是多少?