PyMC3 中的噪声 OR-gate

Noisy OR-gate in PyMC3

我正在尝试创建噪声 OR-gate(common-effect 贝叶斯网络,见下图)的 PyMC3 模型,如 Rehder (1999) 中所述:

得到的概率分布应该如下面的 table,在 "Common Effect Causal Model" 下。 q 是 parents.

的无条件概率

当然,我可以轻松地硬编码 a4 对其他三个随机变量的依赖性,但我想知道 PyMC3 是否有更紧凑的方式来表达这种析取相互作用。

参考文献:Rehder, B. (1999)。分类的因果模型理论。在 *第 21 届认知科学学会年会论文集 *(第 595–600 页)。

假设 c 是一个共享值,我能想到的捕捉关系的最紧凑的方法是将 a_4 的概率降低到一个单一的概率。也就是说,沿着这些方向:

import pymc3 as pm
import theano.tensor as tt

with pm.Model() as model:
    # prior probabilities
    q = pm.Beta('q', alpha=1, beta=1)
    c = pm.Beta('c', alpha=1, beta=1)
    u = pm.Beta('u', alpha=1, beta=1)

    # input nodes
    a_i = pm.Bernoulli('a_i', p=q, shape=3)

    # prob for a_4
    p = pm.math.switch(tt.any(a_i), 1.0 - (1.0 - c)**tt.sum(a_i), u)

    # output node
    a_4 = pm.Bernoulli('a_4', p=p)

    prior = pm.sample_prior_predictive(samples=1000)

其中,如果任何 a_i 成功,那么我们计算 sum(a_i) 次尝试(即 1-(1-c)^sum(a_i))中任何成功的概率,否则只需使用 u.

显然,先验概率可以根据需要固定或独立(例如,也许您想要独立的 q 值,这可以通过添加 shape=3 来完成)。

如果这不是您要查找的内容,那么也许可以对问题进行一些说明。