PyMC3变量依赖于另一个的结果

时间:2017-05-18 20:30:01

标签: statistics pymc3

我是第一次实现MCMC模拟,并且我有一个基于前一个变量的结果定义的变量。例如,如果我的bernoulli变量返回0,则会有一个不同的值被送入确定性变量,而不是返回1。

with pm.Model() as model:
    x = pm.Bernoulli('x', .5)
    if x == 1:
        y = 1 
    elif x == 0:
        y = 2
    z = pm.Deterministic('z', y * 1000)

我的问题是,由于x不是整数,因此不会输入这些if语句,它是一个分布。有没有办法获得x的采样值?或者我只想到这个错误?

1 个答案:

答案 0 :(得分:0)

你是对的,你应该使用Theano的功能switch

with pm.Model() as model:
    x = pm.Bernoulli('x', .5)
    y = pm.math.switch(x, 1, 0)
    z = pm.Deterministic('z', y * 1000) 

或者更详细一点

with pm.Model() as model:
    x = pm.Bernoulli('x', .5)
    y = pm.math.switch(pm.math.eq(x, 1), 1, 0)
    z = pm.Deterministic('z', y * 1000) 

switch计算第一个参数,如果true则返回第二个参数,否则返回第三个参数。

如果您有两个以上的条件,也可以使用多个switch

with pm.Model() as model:
    x = pm.DiscreteUniform('x', 0, 2)
    y_ = pm.math.switch(pm.math.eq(x, 1), 1, 0)
    y = pm.math.switch(pm.math.eq(x, 2), 2, y_)
    z = pm.Deterministic('z', y * 1000)