PyMC:来自独立分布的两个值的总和

时间:2013-11-19 00:52:05

标签: modeling python mcmc pymc

我正在尝试使用pymc从观察中学习潜在变量。 简化版如下:

我想学习两个隐藏参数$ \ lambda_0,\ lambda_1 $,

虽然分别使用这些参数有两个发行版$ X_0,X_1 $:

$ X_0 \ sim Expon(\ lambda_0)$,$ X_1 \ sim Expon(\ lambda_1)$。

我没有观察$ X_i $。 相反,我观察到这些变量的线性组合: $ x_0 ^ {(0)} + x_1 ^ {(1)} + x_1 ^ {(1)} = 6 $, $ x_0 ^ {(1)} = 2 $。

我最初的做法是这样的,但我不认为它有效:

import pymc

lambda0 = pymc.Uniform('lambda0', 0, 10)
lambda1 = pymc.Uniform('lambda1', 0, 10)
x00 = pymc.Exponential('x00', lambda0)
x01 = pymc.Exponential('x01', lambda0)
x10 = pymc.Exponential('x10', lambda1)
x11 = pymc.Exponential('x11', lambda1)
z = pymc.Normal('z', mu=[x00+x10+x11, x01], tau=1.0, value=[6, 2], observed=True)

model = pymc.Model([lambda0, lambda1, x00, x01, x10, x11, z])
mcmc = pm.MCMC(model)
mcmc.sample(10000)

你能帮我解决这个玩具的例子吗?

1 个答案:

答案 0 :(得分:0)

在将指数变量用作参数之前,应该创建指数变量的确定性。试试这个:

mu = [x00+x10+x11, x01]
z = pymc.Normal('z', mu=mu, tau=1.0, value=[6, 2], observed=True)

此外,您不需要实例化ModelMCMC对象。只是后者:

mcmc = pymc.MCMC([lambda0, lambda1, mu, z])