Selezione del modello bayesiano in PyMC3


11

Sto usando PyMC3 per eseguire modelli bayesiani sui miei dati.

Sono nuovo nella modellazione bayesiana ma secondo alcuni post di blog , Wikipedia e QA di questo sito, sembra essere un approccio valido per utilizzare il fattore Bayes e il criterio BIC per essere in grado di scegliere quale modello rappresenti meglio i miei dati (quello che genera i miei dati).

Per calcolare il fattore Bayes, ho bisogno della probabilità relativa per i modelli che voglio confrontare. Forse è un po 'confuso per me, ma penso che ci sia due modi per ottenere la probabilità (correggimi se sbaglio):

  • il modo algebrico quando i modelli sono semplici: vedi la pagina del fattore Bayes dell'esempio di Wikipedia

  • il modo numerico: questo è ciò che fa PyMC3 con gli algoritmi MCMC

Come posso accedere alla probabilità e quindi confrontare i miei modelli in PyMC3? Ho trovato un model.logpmetodo che secondo il documento è la "funzione di densità della probabilità di registro". Posso usarlo per ottenere la probabilità?

Domanda bonus: quando vengono confrontati due modelli, viene calcolato il rapporto tra entrambe le probabilità. Cosa succede se si desidera confrontare diversi modelli?

Un esempio concreto di PyMC3 sarebbe molto utile!

Risposte:


15

Puoi davvero calcolare la probabilità di un modello usando model.logp (). Come input, richiede un punto. Ad esempio, il modello MIGLIORE dalla directory degli esempi che posso fare:

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

Nota che questo modello utilizza variabili trasformate, quindi devo fornirle. Potresti quindi prendere exp () e usarlo all'interno di un integratore numerico, ad esempio fornito da scipy.integrate. Il problema è che anche con solo 5 parametri, questo sarà molto lento.

I fattori Bayes sono generalmente molto difficili da calcolare perché è necessario integrarsi nello spazio completo dei parametri. Per questo ci sono alcune idee sull'uso dei campioni MCMC. Vedi questo post, e in particolare la sezione commenti per maggiori informazioni: https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-method-ever / Il caso del BIC è purtroppo simile.

Se vuoi davvero calcolare il Bayes Factor, puoi anche guardare il test Savage Dickey Ratio (vedi ad esempio http://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf ), ma la sua applicazione è limitata.

Suppongo che tu stia cercando di fare un confronto tra modelli che è un campo con molte opinioni e soluzioni (alcune difficili da implementare, come i BF). Una misura che è molto facile da calcolare è il Criterio di informazioni sulla devianza. Ha i suoi lati negativi, anche se alcuni di essi possono essere risolti (vedi http://onlinelibrary.wiley.com/doi/10.1111/rssb.12062/abstract ). Sfortunatamente non abbiamo ancora portato il codice pymc3, ma sarebbe abbastanza semplice (vedi qui per l'implementazione di pymc2: https://github.com/pymc-devs/pymc/blob/895c24f62b9f5d786bce7ac4fe88edb4ad220364/pymc/MCMC.py# L410 ).

Kruschke preferisce l'approccio per costruire semplicemente il modello completo e lasciare che ti dica quali parametri contano. È anche possibile creare una selezione di variabili nel modello stesso (vedere ad esempio http://arxiv.org/pdf/math/0505633.pdf ).

Infine, per un trattamento molto più completo, vedi questo recente post sul blog: http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/


1
Aperto un problema per l'aggiunta di DIC a pymc3: github.com/pymc-devs/pymc3/issues/797
twiecki
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.