贝叶斯IRT Pymc3 - 参数推理

问题描述 投票:0回答:1

我想用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

请问您对这个差距的来源有什么想法,如何解决?

非常感谢。

bayesian pymc3 hierarchical pymc
1个回答
0
投票

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

为什么你用的是正态而不是伯努利?另外,正态的方差是多少?

© www.soinside.com 2019 - 2024. All rights reserved.