PyMC3中的条件优先

时间:2015-11-16 20:16:51

标签: bayesian pymc pymc3

我正在尝试构建一个模型,其中分配给分布的先验值取决于特定值,该值是另一个被采样的变量。例如,正确回答问题的学生根据概率为p的伯努利试验建模。如果学生具有给定的先决条件(他们自己是模型的一部分),则应该从Beta(20,5)中抽取p。如果不是,则应从Beta(5,20)中抽取p。

我使用以下代码在PyMC2中使用它:

# prior for thetas - same for all students
lambda1 = pymc.Beta('lambda1',alpha=20,beta=5) 
#top-level node - one for each student
theta1 = []
for i in range(num_students):
    theta1.append(pymc.Bernoulli('theta1_%i' % i, p=lambda1, plot=False))

lambda2 = [
    pymc.Beta('lambda2_0', alpha=5,beta=20),
    pymc.Beta('lambda2_1', alpha=20,beta=5)
]
lambda2_choices = []
theta2 = []
for i in range(num_students):
    @pymc.deterministic(name='lambda2_choice_%i'%(i), plot=False)
    def lambda2_choice(theta1 = theta1[i],
                     lambda2 = lambda2):
        if theta1 == False:
            return lambda2[0]
        elif theta1 == True:
            return lambda2[1]
    lambda2_choices.append(lambda2_choice) 
    theta2.append(pymc.Bernoulli('theta2_%i' % i,p=lambda2_choice))    

换句话说,分配给伯努利随机变量的先验是一个确定性函数,它根据某个其他值的SAMPLED值返回一个随机变量,在本例中为theta1 [i]。

我无法弄清楚如何在PyMC3中执行此操作,因为@deminministic装饰器不再存在,并且确定性函数必须具有输入/输出作为Theano变量。

我真的很感激任何见解或建议!!

1 个答案:

答案 0 :(得分:0)

您可以在这里使用:

Global.asax.cs