PyMC débutant: comment échantillonner réellement à partir du modèle ajusté


12

J'essaie un modèle très simple: ajuster un Normal où je suppose que je connais la précision, et je veux juste trouver la moyenne. Le code ci-dessous semble correspondre correctement à la normale. Mais après l'ajustement, je veux échantillonner à partir du modèle, c'est-à-dire générer de nouvelles données similaires à ma datavariable. Je sais que je peux utiliser trace("mean")pour obtenir des échantillons pour la variable moyenne. Mais comment puis-je obtenir de nouveaux échantillons du modèle lui-même?

J'ai regardé des documents, par exemple http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data . J'ai également regardé pas mal d'exemples, par exemple les catastrophes minières, et plusieurs des cahiers de programmation probabiliste, et aucun ne le mentionne. Je (plus ou moins un débutant MCMC) m'attendais à ce que l'échantillonnage à partir du modèle ajusté soit tout l'intérêt! Qu'est-ce que je rate?

from pymc import *
data = np.array([-1, 0, 4, 0, 2, -2, 1, 0, 0, 2, 1, -3, -1, 0, 0, 1, 0, 1])
mean = Uniform("mean", -4, 4)
precision = 2.0**-2
obs = Normal("obs", mean, precision, value=data, observed=True)
model = Model( {"mean": mean, "obs": obs})
mcmc = MCMC(model)
mcmc.sample(10000, 1000, 1)
# I can get samples for the "mean" variable
mean_samples = mcmc.trace("mean")[:]
hist(mean_samples)
# but how can I do the equivalent of mcmc.trace("obs")?

Exactement la question que j'avais! Vous vous demandez si l'échantillonnage prédictif est simplifié dans pymc3 ...
Vladislavs Dovgalecs

Réponses:


15

Vous regardez ce qu'on appelle la distribution prédictive . L'inclure est très simple. Avant de créer le Model, ajoutez la variable stochastique supplémentaire:

predictive = mc.Normal( "predictive", mean, precision )
model = Model( {"mean": mean, "obs": obs, "pred":predictive})

...

predictive_traces = mcmc.trace("predictive")[:]
hist( predictive_traces )

Données artificielles du modèle ajusté

Cela générera des données artificielles à partir du modèle ajusté. Merci d'avoir porté cette omission à mon attention, je vais l'inclure dans le projet BMH.


Comment créez-vous un tableau de n variables aléatoires dans lesquelles n est aléatoire? stackoverflow.com/questions/45283843/… (Désolé, c'est trop ...)
drake

4

J'ai atterri ici plusieurs années plus tard lorsque je cherchais la même chose en utilisant PyMC3, donc je vais laisser une réponse pertinente pour la nouvelle version: (de Postior Predictive Checks ).

ppc = pm.sample_ppc(trace, samples=500, model=model, size=100)

Maintenant, ppc contient 500 ensembles de données générés (contenant 100 échantillons chacun), chacun utilisant un réglage de paramètre différent de celui postérieur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.