0Pricing
R Academy · Pelajaran

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 model

ppc_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 misfit

Fungsi PPC bayesplot Lainnya

bayesplot menawarkan banyak visualisasi PPC selain tumpang tindih kepadatan:

  • ppc_hist(y, yrep[1:8,]) — kisi histogram
  • ppc_scatter_avg(y, yrep) — plot sebaran data yang diamati versus mean yrep
  • ppc_intervals(y, yrep) — interval ketidakpastian di sekitar setiap pengamatan
  • ppc_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] matrix

Validasi 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 reliable

Praktik 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-check

Pemeriksaan 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

  1. Pengantar Pemikiran Bayesian
  2. Menulis Model Stan di R
  3. Pengambilan Sampel MCMC dan Diagnostik
  4. Pemeriksaan Prediktif Posterior
← Kembali ke R Academy