1

我是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.valueand 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 的后验概率分布(我最初假设它是均匀的)

4

1 回答 1

1

认为你想要这样的东西:

from pymc import *
p_d = [[0.7, 0.3], [0.5, 0.1, 0.4], [0.4, 0.6], [0.8, 0.2]]
count =[26, 39, 20, 10]

rv = [ Multinomial("rv"+str(i), count[i], p_d[i]) for i in xrange(0, len(count)) ]

m = MCMC(rv)

m.sample(100)

print m.trace('rv0')[:]

还要确保你安装了 pymc2.3 而不是 3。

于 2014-05-28T07:04:22.147 回答