Saya mencoba model yang sangat sederhana: pas Normal di mana saya menganggap saya tahu presisi, dan saya hanya ingin menemukan mean. Kode di bawah ini tampaknya sesuai dengan Normal dengan benar. Tetapi setelah pas, saya ingin sampel dari model, yaitu menghasilkan data baru yang mirip dengan data
variabel saya . Saya tahu saya bisa menggunakan trace("mean")
untuk mendapatkan sampel untuk variabel rata-rata. Tetapi bagaimana saya bisa mendapatkan sampel baru dari model itu sendiri?
Saya telah melihat dokumen misalnya http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data . Saya juga telah melihat beberapa contoh, misalnya bencana pertambangan, dan beberapa dari notebook Programming Probabilistic, dan tidak ada yang menyebutkan ini. Saya (kurang lebih seorang pemula MCMC) berharap bahwa pengambilan sampel dari model yang sesuai adalah intinya! Apa yang saya lewatkan?
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")?
Jawaban:
Anda mencari apa yang disebut distribusi prediktif . Untuk memasukkan ini sangat sederhana. Sebelum membuat
Model
, tambahkan variabel stokastik tambahan:Ini akan menghasilkan data buatan dari model yang dipasang. Terima kasih telah memberikan pengawasan ini kepada saya, saya akan memasukkannya ke dalam proyek BMH.
sumber
Mendarat di sini beberapa tahun kemudian ketika mencari hal yang sama menggunakan PyMC3, jadi saya akan meninggalkan jawaban yang relevan dengan versi baru: (dari Posterior Predictive Checks ).
sumber