2015-11-16 1 views
1

J'essaie de construire un modèle dans lequel le prior assigné à une distribution dépend d'une valeur particulière, et cette valeur est une autre variable qui est échantillonnée. Par exemple, un étudiant répondant correctement à une question est modélisé selon un essai de Bernoulli avec probabilité p. Si l'étudiant a les pré-requis donnés (eux-mêmes partie du modèle), p devrait être tiré de Bêta (20,5). Sinon, p devrait être tiré de Beta (5,20).Condition préalable dans PyMC3

J'ai eu que cela fonctionne en PyMC2 avec le code suivant:

# 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))  

En d'autres termes, le prieur affecté à la variable aléatoire Bernoulli est une fonction déterministe qui renvoie une variable stochastique en fonction de la valeur échantillonnée une autre valeur, dans ce cas theta1 [i].

Je ne peux pas comprendre comment faire cela dans PyMC3, car le décorateur @deterministic n'existe plus et les fonctions déterministes doivent avoir des entrées/sorties comme variables Theano.

J'apprécierais vraiment toute idée ou suggestion !!

Répondre

0

Ici vous pouvez utiliser:

pymc3.switch(theta[i], lambda2[1], lambda2[0]) 
+0

Merci, testera aujourd'hui. Y a-t-il de la documentation pour cela? Je n'arrive pas à le trouver en cherchant. – tom

+0

Vous le trouverez dans l'exemple desaster houiller: https://pymc-devs.github.io/pymc3/getting_started/#case-study-2-coal-mining-disasters –