Próbuję bardzo prostego modelu: dopasowanie Normalnego, w którym zakładam, że znam precyzję i chcę tylko znaleźć środek. Poniższy kod wydaje się poprawnie pasować do Normalnego. Ale po dopasowaniu chcę próbkować z modelu, tj. Generować nowe dane, które są podobne do mojej data
zmiennej. Wiem, że mogę użyć trace("mean")
do pobrania próbek dla zmiennej średniej. Ale jak mogę uzyskać nowe próbki z samego modelu?
Przeglądałem dokumenty np . Http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data . Spojrzałem również na kilka przykładów, np. Katastrofy wydobywcze i kilka z notatników Probabilistic Programming, i żaden z nich o tym nie wspomina. Ja (mniej więcej początkujący MCMC) spodziewałem się, że próbowanie z dopasowanego modelu było najważniejsze! czego mi brakuje?
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")?
Odpowiedzi:
Patrzysz na tak zwaną dystrybucję predykcyjną . Uwzględnienie tego jest bardzo proste. Przed utworzeniem
Model
dodaj dodatkową zmienną stochastyczną:Spowoduje to wygenerowanie sztucznych danych z dopasowanego modelu. Dzięki za zwrócenie mojej uwagi na ten nadzór, włączę go do projektu BMH.
źródło
Wylądowałem tutaj kilka lat później, szukając tego samego za pomocą PyMC3, więc zostawiam odpowiedź dotyczącą nowej wersji: (z posterior Predictive Checks ).
źródło