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

How to use a list of indices to partition a list of observed in PyMC3?

我有一个观察数据列表 score 和一个索引列表 indind 的每个元素都是 0、1 或 2。scoreind 具有相同的长度,并且 indscore 分成三组:如果 ind[i] 是 k,那么 score[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 显示它有三个元素,而不是我预期的只有一个元素。并且表达式 mean[ind] 看起来是错误的:PyMC3 如何知道它应该使用 ind 使其与 [=19= 对齐]分数?

我该怎么做?

你可以做到这一点。

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