多离散父母的PyMC3条件随机变量

时间:2019-03-30 14:07:32

标签: probability pymc3 probabilistic-programming

我最近开始使用PyMC3进行概率编程。在我的场景中,我有3个随机变量:On,Triangle和X,这样X取决于Triangle和On。三角形和On都遵循伯努利分布,并且根据它们取的值,遵循正态的X值也会发生变化。

我写了一些模拟代码来测试这个概念,但是代码不好,主要是因为您不能在PyMC3发行版上调用numpy.isnan()。我刚刚开始在此框架中工作,我知道我不会编写将运行的代码,但是我将其发布在这里,以便您可以看到我的工作。

with pymc3.Model() as model:
    on = pymc3.distributions.discrete.Bernoulli('on', p=.7)
    x_on = pymc3.distributions.continuous.Normal('x_on', 10, .4)

    pTriangle_given_on = 1
    pTriangle_given_not_on = .7
    pTriangle = pymc3.math.switch(on, pTriangle_given_on, pTriangle_given_not_on)
    triangle = pymc3.distributions.discrete.Bernoulli('triangle', p=pTriangle)

    name = None
    x_triangle = None

    if triangle:
        name = pymc3.distributions.discrete.Categorical('name', p=[.3, .2, .1, .1, .2, .1])
    else:
        name = pymc3.distributions.discrete.Categorical('name', p=[.1, .5, .4])

    if on:
        x_triangle = pymc3.Deterministic('x_triangle', x_on)
    elif triangle:
        x_triangle = pymc3.Normal('x_triangle', 5, 1)
    else:
        x_triangle = numpy.nan

    trace = pymc3.sample()
    pymc3.plot_posterior(trace)

我不确定如何指定X对Triangle和On的条件依赖性。大家的任何想法都将不胜感激。

0 个答案:

没有答案