【问题标题】:Bayesian IRT Pymc3 - Parameter inference贝叶斯 IRT Pymc3 - 参数推断
【发布时间】:2020-04-25 10:22:19
【问题描述】:

我想使用 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 的先验经过良好校准。

你知道这个差距的来源以及如何解决它吗?

非常感谢,

【问题讨论】:

  • 什么是 tausd 测量正常 (o)?测量误差的错误指定是否会对alpha 产生影响?即,缺乏可识别性。
  • 我认为您需要研究变分推理的收敛性,因为它可能尚未收敛。如果您不必使用 VI,则此模型将通过使用 NUTS 采样恢复 alpha_fix 的值:只需在 out 的定义后添加行 trace = pm.sample()

标签: bayesian pymc3 hierarchical pymc


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2015-10-09
    • 2016-09-15
    • 1970-01-01
    • 2016-01-22
    • 2019-09-22
    • 2020-09-25
    相关资源
    最近更新 更多