Pemula PyMC: bagaimana sebenarnya sampel dari model yang cocok

12

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 datavariabel 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")?
jmmcd
sumber
Persis pertanyaan saya! Ingin tahu jika sampling prediktif disederhanakan dalam pymc3 ...
Vladislavs Dovgalecs

Jawaban:

15

Anda mencari apa yang disebut distribusi prediktif . Untuk memasukkan ini sangat sederhana. Sebelum membuat Model, tambahkan variabel stokastik tambahan:

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

...

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

Data buatan dari model yang dipasang

Ini akan menghasilkan data buatan dari model yang dipasang. Terima kasih telah memberikan pengawasan ini kepada saya, saya akan memasukkannya ke dalam proyek BMH.

Cam.Davidson.Pilon
sumber
Bagaimana Anda membuat larik n variabel acak yang nnya acak? stackoverflow.com/questions/45283843/… (Maaf apakah ini terlalu banyak ...)
drake
4

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

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

Sekarang, ppc berisi 500 set data yang dihasilkan (masing-masing berisi 100 sampel), masing-masing menggunakan pengaturan parameter yang berbeda dari posterior.

Jan Kukacka
sumber