Pemeriksaan Prediktif Posterior
Validasi kecocokan model dengan membandingkan distribusi data simulasi dan data teramati.
Pemeriksaan Prediktif Posterior adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Apa Itu Pemeriksaan Prediktif Posterior?
Setelah menyesuaikan model Bayesian, Anda perlu bertanya: apakah model ini menghasilkan data yang tampak seperti data yang Anda amati? Pemeriksaan Prediktif Posterior (PPC) menjawabnya dengan menyimulasikan kumpulan data replikasi yrep dari posterior dan membandingkannya secara grafis dengan y yang diamati.
Mengekstrak Sampel Posterior
extract(fit, pars='mu') mengembalikan daftar bernama; $mu adalah vektor numerik berisi semua sampel setelah warmup untuk parameter tersebut. Dengan 4 rantai x 1000 iterasi setelah warmup, Anda mendapatkan 4000 sampel.
# library(rstan)
# mu_samples <- extract(fit, pars = 'mu')$mu
# sigma_samples <- extract(fit, pars = 'sigma')$sigma
#
# cat('Samples drawn:', length(mu_samples), '
')
# cat('Posterior mean of mu:', mean(mu_samples), '
')
# cat('90% CI:', quantile(mu_samples, c(0.05, 0.95)), '
')Menghasilkan yrep dari Sampel Posterior
Untuk setiap pengambilan posterior (mu_s, sigma_s), simulasikan kumpulan data replikasi dengan ukuran yang sama seperti data asli. Simpan hasilnya dalam matriks yrep, dengan setiap baris berisi satu kumpulan data yang disimulasikan.
# y <- c(2.1, 1.8, 2.4, 1.9, 2.3, 2.0, 1.7, 2.2)
# n_obs <- length(y)
# S <- length(mu_samples) # 4000 posterior draws
#
# yrep <- matrix(NA, nrow = S, ncol = n_obs)
# for (s in seq_len(S)) {
# yrep[s, ] <- rnorm(n_obs, mean = mu_samples[s], sd = sigma_samples[s])
# }
# dim(yrep) # [4000, 8]ppc_dens_overlay() — Perbandingan Kepadatan
bayesplot::ppc_dens_overlay(y, yrep[1:50,]) menumpangtindihkan kepadatan kernel data yang diamati (garis gelap) dengan kepadatan dari 50 kumpulan data yang disimulasikan secara acak (garis terang). Kecocokan model yang baik berarti garis gelap berada di dalam kumpulan garis terang.
# library(bayesplot)
#
# ppc_dens_overlay(y, yrep[1:50, ])
#
# Interpretation:
# - Dark line (y_obs) surrounded by light lines (yrep): good fit
# - Dark line systematically outside the cloud: model misfit
# - Light lines much wider than dark: overdispersed model
# - Light lines much narrower than dark: underdispersed modelppc_stat() — Pemeriksaan Statistik Uji
ppc_stat(y, yrep, stat = 'mean') menampilkan histogram statistik uji (misalnya, mean) yang dihitung pada setiap kumpulan data yang disimulasikan, dengan garis vertikal pada statistik yang diamati. Jika nilai yang diamati berada di bagian utama histogram, model menangkap aspek data tersebut.
# library(bayesplot)
#
# ppc_stat(y, yrep, stat = 'mean') # does model capture the mean?
# ppc_stat(y, yrep, stat = 'sd') # does model capture spread?
# ppc_stat(y, yrep, stat = 'max') # does model capture extremes?
#
# If observed stat is in the tail of the histogram,
# the model fails to reproduce that statistic.Nilai-p Bayesian
Nilai-p Bayesian (nilai-p prediktif posterior) adalah proporsi kumpulan data yang disimulasikan dengan statistik uji yang lebih ekstrem daripada nilai yang diamati. Nilai yang mendekati 0.5 menunjukkan kalibrasi yang baik; nilai yang mendekati 0 atau 1 menunjukkan ketidakcocokan model untuk statistik tersebut.
# Bayesian p-value for the mean:
# obs_mean <- mean(y)
# rep_means <- apply(yrep, 1, mean)
# pval <- mean(rep_means >= obs_mean)
# cat('Bayesian p-value (mean):', round(pval, 3), '
')
# # 0.5 is perfect; < 0.05 or > 0.95 suggests misfitFungsi PPC bayesplot Lainnya
bayesplot menawarkan banyak visualisasi PPC selain tumpang tindih kepadatan:
ppc_hist(y, yrep[1:8,])— kisi histogramppc_scatter_avg(y, yrep)— plot sebaran data yang diamati versus mean yrepppc_intervals(y, yrep)— interval ketidakpastian di sekitar setiap pengamatanppc_rootogram(y, yrep)— untuk data cacahan
# library(bayesplot)
#
# # Grid of 8 simulated histograms vs the observed
# ppc_hist(y, yrep[1:8, ])
#
# # Scatter: y_obs (x) vs mean of yrep (y) — should hug diagonal
# ppc_scatter_avg(y, yrep)
#
# # 50% and 90% posterior predictive intervals around each y_i
# ppc_intervals(y, yrep)Menafsirkan Plot PPC — Ketidakcocokan Model
Pola ketidakcocokan yang umum dan penyebabnya:
- yrep terlalu lebar — prior terlalu menyebar atau model mengalami dispersi berlebih
- yrep bergeser — keluarga likelihood yang salah (misalnya, normal untuk data miring)
- yrep tidak menangkap multimodalitas — diperlukan model campuran
- yrep gagal untuk nilai ekstrem — diperlukan distribusi berekor tebal
# Example: if data has a long right tail but yrep does not,
# consider switching:
# y ~ normal(mu, sigma) => y ~ student_t(nu, mu, sigma)
#
# Or for count data:
# y ~ poisson(lambda) => y ~ neg_binomial_2(mu, phi) (overdispersion)
cat('PPCs guide model improvement by revealing specific failure modes
')PPC dalam Blok Model Stan
Anda dapat menghasilkan yrep secara langsung dalam Stan menggunakan blok generated quantities. Cara ini menghindari ekstraksi ulang parameter di R dan setara secara komputasional.
# Stan model with generated quantities:
# '
# generated quantities {
# array[N] real y_rep;
# for (n in 1:N) {
# y_rep[n] = normal_rng(mu, sigma);
# }
# }
# '
# Then extract in R:
# yrep <- extract(fit, pars = 'y_rep')$y_rep # [S, N] matrixValidasi Silang Leave-One-Out
Selain PPC, loo::loo(fit) menghitung validasi silang leave-one-out untuk membandingkan model-model yang bersaing. Model dengan ELPD (kepadatan prediktif log yang diharapkan) lebih tinggi lebih disukai. Gunakan loo::loo_compare(loo1, loo2) untuk mengurutkan model.
# library(loo)
# loo1 <- loo(fit1) # normal model
# loo2 <- loo(fit2) # student-t model
#
# comparison <- loo_compare(loo1, loo2)
# print(comparison)
#
# Model with elpd_diff > 0 is preferred
# se_diff > |elpd_diff| means difference is not reliablePraktik Terbaik PPC
Ikuti praktik berikut untuk pemeriksaan prediktif posterior yang ketat:
- Selalu mulai dengan
ppc_dens_overlay()sebagai pemeriksaan kewajaran global - Lanjutkan dengan statistik khusus bidang (
ppc_stat()) yang relevan dengan tujuan analisis Anda - Gunakan setidaknya 50 pengambilan yrep untuk pemeriksaan visual; gunakan semua 4000 untuk nilai-p Bayesian
- PPC yang gagal membantu mengarahkan perbaikan model — PPC bersifat diagnostik, bukan kegagalan
# Workflow:
# 1. Fit model -> extract() -> generate yrep matrix
# 2. ppc_dens_overlay(y, yrep[1:50,]) -- visual global check
# 3. ppc_stat(y, yrep, stat='mean') -- check mean
# 4. ppc_stat(y, yrep, stat='sd') -- check spread
# 5. ppc_stat(y, yrep, stat='max') -- check tails
# 6. If misfit found -> revise model -> refit -> re-checkPemeriksaan Cepat: Menafsirkan Nilai-p Bayesian
Apa arti nilai-p Bayesian sebesar 0.03 untuk statistik maksimum terhadap model?
Rangkuman Pemeriksaan Prediktif Posterior
Alur kerja PPC dalam RStan dan bayesplot:
- Ekstrak sampel:
extract(fit, pars='mu')$mu - Hasilkan yrep: lakukan perulangan pada pengambilan posterior dengan memanggil
rnorm(n, mu_s, sigma_s) - Pemeriksaan global:
ppc_dens_overlay(y, yrep[1:50,]) - Pemeriksaan statistik:
ppc_stat(y, yrep, stat='mean') - Nilai-p Bayesian:
mean(apply(yrep,1,stat) >= stat(y))— nilai mendekati 0.5 berarti baik - Untuk perbandingan model, gunakan
loo::loo_compare()
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemeriksaan Prediktif Posterior” gratis?
Ya — teks lengkap “Pemeriksaan Prediktif Posterior” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pemeriksaan Prediktif Posterior”?
Validasi kecocokan model dengan membandingkan distribusi data simulasi dan data teramati. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pemeriksaan Prediktif Posterior” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengantar Pemikiran Bayesian
- Menulis Model Stan di R
- Pengambilan Sampel MCMC dan Diagnostik
- Pemeriksaan Prediktif Posterior