如Rehder(1999)所述,我正在尝试创建一个嘈杂的OR门的PyMC3模型(一个通用效果的贝叶斯网络,请参见下图):
所得的概率分布应在“共效应因果模型”下的下表中。 q是父母的无条件概率。
我当然可以轻松地对a4对其他三个随机变量的依赖性进行硬编码,但我想知道PyMC3是否具有更紧凑的方式来表达这种分离相互作用。
参考:Rehder,B。(1999)。因果模型分类理论。在*认知科学学会第21届年会论文集*(pp。595-600)。答案 0 :(得分:1)
假设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
来实现)。
如果这不是您想要的内容,则可以在问题中添加一些说明。