我有一个观察数据得分的列表和一个索引列表 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>
我该怎么做?
答案 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