1

分布に割り当てられた事前確率が特定の値に依存し、その値がサンプリングされる別の変数であるモデルを構築しようとしています。たとえば、問題に正しく答える生徒は、確率 p のベルヌーイ試行に従ってモデル化されます。学生が与えられた前提条件 (モデルの一部) を持っている場合、p は Beta(20,5) から取得する必要があります。そうでない場合、p は Beta(5,20) から取得する必要があります。

次のコードを使用して、これを 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))    

つまり、ベルヌーイ確率変数に割り当てられた事前確率は、他の値 (この場合は theta1[i]) の SAMPLED 値に応じて確率変数を返す決定論的関数です。

@deterministic デコレータが存在しなくなり、決定論的関数は Theano 変数として入出力を持たなければならないため、PyMC3 でこれを行う方法がわかりません。

洞察や提案をいただければ幸いです!!

4

1 に答える 1