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 !!
Merci, testera aujourd'hui. Y a-t-il de la documentation pour cela? Je n'arrive pas à le trouver en cherchant. – tom
Vous le trouverez dans l'exemple desaster houiller: https://pymc-devs.github.io/pymc3/getting_started/#case-study-2-coal-mining-disasters –