如何使用索引列表对 PyMC3 中观察到的列表进行分区?
How to use a list of indices to partition a list of observed in PyMC3?
我有一个观察数据列表 score 和一个索引列表 ind。 ind 的每个元素都是 0、1 或 2。score 和 ind 具有相同的长度,并且 ind 将 score 分成三组:如果 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
我有一个观察数据列表 score 和一个索引列表 ind。 ind 的每个元素都是 0、1 或 2。score 和 ind 具有相同的长度,并且 ind 将 score 分成三组:如果 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