我是pymc的新手。我已经在 github 上阅读了所需的东西,并且在我遇到这个问题之前做得很好。我想制作一个多项式随机变量的集合,以后可以使用 mcmc 对其进行采样。但我能做的最好的就是
rv = [ Multinomial("rv", count[i], p_d[i]) for i in xrange(0, len(count)) ]
for i in rv:
print i.value
i.random()
for i in rv:
print i.value
但这不好,因为我希望能够调用rv.value
and rv.random()
,否则我将无法从中采样。
count 是一个非 ve 整数列表,每个整数表示该分布的 n 值,例如。一个可能的计数可以是[26, 39, 20, 10]
p_d 是凹陷概率的列表。例如,一个可能的 p_d 可以是[[0.7, 0.3], [0.5, 0.1, 0.4], [0.4, 0.6], [0.8, 0.2]]
for 循环没有用。他们只是表明组件是多项式随机变量,但我认为我不能将组件与 mcmc 一起使用来获得后验分布。我需要一些方法来将 mcmc 与 rv 一起使用。
如果有人可以告诉我一些函数,比如 pymc 中的 numpy.array() (将列表转换为 numpy 数组),它可以将列表转换为我想要的东西,那将是非常好的。(很抱歉,我无法用科学术语表达,但我已尽量让自己清楚)如果有人需要更多信息,请告诉我。
编辑 1
我有几个游戏的数据,例如[8, 8, 10]
。它表示当这个游戏玩了 26 次时,P1(玩家 1)采取了 A1(行动 1)8 次,A2 8 次,A3 10 次。
(在不同的游戏中可以有不同的动作数。在这个结果为 的例子中[8, 8, 10]
,有 3 个动作)
我有大约 200 个这样的数据(以列表/numpy 数组的形式)
我相信多项分布最能描述数据。
所以我写了一个确定性函数,给定一个均匀分布的随机变量tau
,在这些动作上生成概率分布,例如,在这种情况下,说[0.16, 0.28, 0.56]
你看,我有 200 个这样的列表,每一个都表示该游戏中动作的概率分布。我还有一个包含 200 个整数(可能不同)的列表,每个整数表示玩游戏的次数(我通过对数据求和获得,例如,有数据的游戏[8, 8, 10,]
玩了 26 次)。
现在给定观察到的数据(例如 200 个列表的列表[[8, 8, 10], [0, 0, 0], ....., [12, 3]]
),我想绘制 tau 的后验概率分布(我最初假设它是均匀的)