我正在尝试构建一个模型,其中分配给分布的先验值取决于特定值,该值是另一个被采样的变量。例如,正确回答问题的学生根据概率为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变量。
我真的很感激任何见解或建议!!
答案 0 :(得分:0)
您可以在这里使用:
Global.asax.cs