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 data
variable. 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")?
Réponses:
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: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.
la source
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 ).
la source