如何使用索引列表来分区PyMC3中观察到的列表?

时间:2017-11-20 23:03:28

标签: pymc3

我有一个观察数据得分的列表和一个索引列表 ind ind 的每个元素都是0,1或2. 得分 ind 具有相同的长度, ind 得分划分为三组:如果 ind [i] 为k,则得分[i] 在k中。

我想在数据中加入三个正态分布,第0组正常,第1组正常,第2组正常。我设置模型的PyMC3代码是:

with pm.Model(): 
    mean = pm.Uniform('mean', 0, 1, shape=3) 
    sd = pm.Uniform('sd', 0, 1, shape=3)
    mean_i = pm.Deterministic('mean_i', mean[ind])
    sd_i = pm.Deterministic('sd_i', sd[ind])
    obs = pm.Normal('obs', mu=mean_i, sd=sd_i, observed=score)

但是 mean_i 似乎有错误的形状:traceplots显示它有三个元素,而不是我预期的单个元素。表达式表示[ind] 看起来不对:PyMC3如何知道它应该以一种与得分对齐的方式使用 ind ? / p>

我该怎么做?

1 个答案:

答案 0 :(得分:1)

你可以这样做。

with pm.Model(): 
    mean = pm.Uniform('mean', 0, 1, shape=3) 
    sd = pm.Uniform('sd', 0, 1, shape=3)
    obs = pm.Normal('obs', mu=mean[ind], sd=[ind], observed=score)

为了将来参考,您还可以提出问题here