Sélection du modèle bayésien dans PyMC3

11

J'utilise PyMC3 pour exécuter des modèles bayésiens sur mes données.

Je suis nouveau dans la modélisation bayésienne mais selon certains articles de blogs , Wikipedia et QA de ce site, il semble que ce soit une approche valable pour utiliser le facteur Bayes et le critère BIC pour pouvoir choisir le modèle qui représente le mieux mes données (celui qui génère mes données).

Pour calculer le facteur Bayes, j'ai besoin de la probabilité relative des modèles que je veux comparer. C'est peut-être un peu confus pour moi, mais je pense qu'il y a deux façons d'obtenir la probabilité (corrigez-moi si je me trompe):

  • la manière algébrique lorsque le modèle est simple: voir l'exemple de Wikipédia page du facteur de Bayes

  • la voie numérique: c'est ce que fait PyMC3 avec les algorithmes MCMC

Comment puis-je accéder à la probabilité et ainsi comparer mes modèles dans PyMC3? J'ai trouvé une model.logpméthode qui selon le doc est la "fonction de densité de probabilité logarithmique". Puis-je l'utiliser pour obtenir la probabilité?

Question bonus: lorsque deux modèles sont comparés, le rapport entre les deux probabilités est calculé. Que se passe-t-il si vous souhaitez comparer plusieurs modèles?

Un exemple concret de PyMC3 serait très utile!

hadim
la source

Réponses:

15

Vous pouvez en effet calculer la probabilité d'un modèle en utilisant model.logp (). En entrée, il nécessite un point. Par exemple, le MEILLEUR modèle du répertoire d'exemples que je peux faire:

np.exp(model.logp({'group1_mean': 0.1, 
                   'group2_mean': 0.2, 
                   'group1_std_interval': 1., 
                   'group2_std_interval': 1.2, 
                   'nu_minus_one_log': 1}))

Notez que ce modèle utilise des variables transformées, je dois donc les fournir. Vous pouvez ensuite prendre l'exp () de cela et l'utiliser dans un intégrateur numérique, par exemple comme fourni par scipy.integrate. Le problème est que même avec seulement 5 paramètres, ce sera très lent.

Les facteurs de Bayes sont généralement très difficiles à calculer car vous devez les intégrer sur tout l'espace des paramètres. Il y a quelques idées pour utiliser des échantillons MCMC pour cela. Voir cet article, et en particulier la section des commentaires pour plus d'informations: https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-method-ever / Le cas de BIC est malheureusement similaire.

Si vous voulez vraiment calculer le facteur Bayes, vous pouvez également consulter le test Savage Dickey Ratio (voir par exemple http://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf ), mais son application est limitée.

Je suppose que vous essayez de faire une comparaison de modèles qui est un domaine avec de nombreuses opinions et solutions (certaines difficiles à mettre en œuvre, comme les BF). Une mesure qui est très facile à calculer est le critère d'information de la déviance. Il a ses inconvénients, bien que certains d'entre eux puissent être corrigés (voir http://onlinelibrary.wiley.com/doi/10.1111/rssb.12062/abstract ). Malheureusement, nous n'avons pas encore porté le code pymc3, mais ce serait assez facile (voir ici pour l'implémentation de pymc2: https://github.com/pymc-devs/pymc/blob/895c24f62b9f5d786bce7ac4fe88edb4ad220364/pymc/MCMC.py# L410 ).

Kruschke privilégie l'approche consistant à simplement construire le modèle complet et à le laisser vous dire quels paramètres sont importants. Vous pouvez également créer une sélection de variables dans le modèle lui-même (voir par exemple http://arxiv.org/pdf/math/0505633.pdf ).

Enfin, pour un traitement beaucoup plus complet, voir ce récent article de blog: http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/

twiecki
la source
1
Ouverture d'un problème pour l'ajout de DIC à pymc3: github.com/pymc-devs/pymc3/issues/797
twiecki