Pengantar Pemikiran Bayesian
Pahami prior, likelihood, dan posterior dalam kerangka Bayesian.
Pengantar Pemikiran Bayesian adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Frekuentis vs Bayesian
Dalam statistika frekuentis, probabilitas adalah frekuensi jangka panjang suatu peristiwa. Dalam statistika Bayesian, probabilitas merepresentasikan tingkat keyakinan. Perbedaan utamanya: frekuentis menganggap parameter sebagai nilai tetap yang tidak diketahui; Bayesian menganggap parameter sebagai variabel acak dengan distribusi probabilitas.
# Frequentist: parameter theta is fixed, data is random
# Bayesian: data is fixed (observed), theta has a distribution
# Example: estimating coin bias p
# Frequentist: MLE -> p_hat = heads / total
heads <- 7; total <- 10
p_mle <- heads / total
cat('MLE estimate:', p_mle, '\n')
# Bayesian: update prior belief with observed data
# Prior: Beta(2, 2) -> slightly informative, centered at 0.5
# Posterior: Beta(2 + heads, 2 + (total - heads)) = Beta(9, 5)
alpha_post <- 2 + heads
beta_post <- 2 + (total - heads)
p_bayes <- alpha_post / (alpha_post + beta_post) # posterior mean
cat('Bayesian posterior mean:', round(p_bayes, 3), '\n')Teorema Bayes
Teorema Bayes menghubungkan keyakinan awal tentang suatu parameter, kemungkinan data berdasarkan parameter tersebut, dan keyakinan posterior setelah data diamati:
P(θ|data) = P(data|θ) × P(θ) / P(data)
Penyebut P(data) adalah konstanta normalisasi — konstanta ini membuat posterior menjadi distribusi probabilitas yang sah.
# Bayes' theorem components
# P(theta | data) = posterior (what we want)
# P(data | theta) = likelihood (how well theta explains data)
# P(theta) = prior (what we believed before data)
# P(data) = evidence (normalising constant)
# Medical test example
P_disease <- 0.01 # prior: 1% prevalence
P_pos_given_disease <- 0.99 # sensitivity
P_pos_given_no_disease <- 0.05 # false positive rate
P_pos <- P_pos_given_disease * P_disease +
P_pos_given_no_disease * (1 - P_disease)
P_disease_given_pos <- (P_pos_given_disease * P_disease) / P_pos
cat('P(positive test):', round(P_pos, 4), '\n')
cat('P(disease | positive test):', round(P_disease_given_pos, 4), '\n')
cat('Only', round(P_disease_given_pos * 100, 1), '% chance despite positive test!\n')Distribusi Prior
Prior menyandikan keyakinan Anda tentang suatu parameter sebelum melihat data. Prior dapat bersifat noninformatif (datar, yang menyatakan pengetahuan minimal) atau informatif (memiliki puncak yang kuat, yang menyatakan keahlian domain). Prior yang umum: Beta(1,1) = uniform, Normal(0, 10) = sedikit informatif.
# Visualise different Beta priors for a probability parameter
theta <- seq(0, 1, length.out = 200)
# Uniform (no prior knowledge)
prior_uniform <- dbeta(theta, 1, 1)
# Informative: believe p ~ 0.3
prior_informative <- dbeta(theta, 3, 7)
# Strong: believe p ~ 0.5
prior_strong <- dbeta(theta, 20, 20)
plot(theta, prior_uniform, type = 'l', col = 'gray',
ylim = c(0, 8), xlab = 'theta', ylab = 'Density',
main = 'Different Prior Beliefs')
lines(theta, prior_informative, col = 'blue')
lines(theta, prior_strong, col = 'red')
legend('topright', c('Uniform Beta(1,1)', 'Informative Beta(3,7)', 'Strong Beta(20,20)'),
col = c('gray', 'blue', 'red'), lty = 1)Fungsi Likelihood
Likelihood P(data|θ) mengukur seberapa mungkin data yang diamati untuk nilai parameter tertentu. Untuk pelemparan koin, likelihood-nya adalah Binomial. Untuk data kontinu, likelihood sering kali berupa Gaussian. Kita mengevaluasi likelihood pada banyak nilai θ untuk menemukan nilai yang paling baik menjelaskan data.
# Likelihood for a coin flip experiment
# Data: 7 heads in 10 flips
heads <- 7; n <- 10
# Evaluate likelihood at many theta values
theta <- seq(0.01, 0.99, length.out = 200)
likelihood <- dbinom(heads, n, theta)
# Maximum likelihood
mle <- theta[which.max(likelihood)]
cat('MLE (max likelihood theta):', mle, '\n')
# Plot the likelihood function
plot(theta, likelihood, type = 'l', col = 'steelblue',
xlab = 'theta (coin bias)', ylab = 'Likelihood P(7H|theta)',
main = '7 Heads in 10 Flips: Likelihood')
abline(v = mle, lty = 2, col = 'red')
legend('topleft', paste('MLE =', mle), lty = 2, col = 'red')Posterior = Prior × Likelihood
Posterior sebanding dengan prior dikalikan likelihood. Untuk model Beta-Binomial, hal ini dapat ditangani secara analitis: jika priornya Beta(α, β) dan Anda mengamati h sisi kepala dalam n kali pelemparan, posteriornya adalah Beta(α + h, β + n − h).
# Beta-Binomial conjugate model
heads <- 7; n <- 10
alpha_prior <- 2; beta_prior <- 2 # prior: Beta(2,2)
# Update: posterior = Beta(alpha + heads, beta + tails)
alpha_post <- alpha_prior + heads
beta_post <- beta_prior + (n - heads)
theta <- seq(0.01, 0.99, length.out = 300)
prior <- dbeta(theta, alpha_prior, beta_prior)
likelihood <- dbinom(heads, n, theta)
likelihood <- likelihood / max(likelihood) # normalise for plotting
posterior <- dbeta(theta, alpha_post, beta_post)
plot(theta, posterior, type = 'l', col = 'red', lwd = 2,
xlab = 'theta', ylab = 'Density', main = 'Prior vs Posterior')
lines(theta, prior, col = 'blue', lwd = 2)
lines(theta, likelihood, col = 'gray', lwd = 2, lty = 2)
legend('topleft', c(paste0('Prior Beta(', alpha_prior, ',', beta_prior, ')'),
'Likelihood (scaled)',
paste0('Posterior Beta(', alpha_post, ',', beta_post, ')')),
col = c('blue', 'gray', 'red'), lty = c(1,2,1), lwd = 2)Prior Konjugat
Prior konjugat adalah prior yang posteriornya termasuk dalam keluarga distribusi yang sama dengan prior tersebut. Hal ini membuat inferensi dapat ditangani secara analitis. Pasangan konjugat yang umum: Beta-Binomial (proporsi), Normal-Normal (rata-rata dengan varians yang diketahui), Gamma-Poisson (laju).
# Conjugate prior table (analytical results)
conjugates <- data.frame(
Likelihood = c('Binomial', 'Poisson', 'Normal (known sigma)',
'Exponential', 'Multinomial'),
Prior = c('Beta', 'Gamma', 'Normal',
'Gamma', 'Dirichlet'),
Posterior = c('Beta', 'Gamma', 'Normal',
'Gamma', 'Dirichlet'),
Update_Rule = c('(a+h, b+t)', '(a+x, b+n)', '(mu_n, sigma_n)',
'(a+n, b+sum)', '(a+counts)')
)
print(conjugates, row.names = FALSE)
# Beta-Binomial update
cat('\nBeta(2,3) + 7 heads, 3 tails -> Beta(',
2+7, ',', 3+3, ')\n')Interval Kredibel
Interval kredibel (CI) adalah padanan Bayesian dari interval kepercayaan: CI 95% berarti terdapat probabilitas posterior sebesar 95% bahwa θ berada dalam interval tersebut. Inilah interpretasi intuitif yang secara keliru biasanya diberikan orang pada interval kepercayaan frekuentis.
# 95% credible interval for Beta posterior
alpha_post <- 9; beta_post <- 5 # posterior from earlier
# Credible interval via quantile function
ci_lower <- qbeta(0.025, alpha_post, beta_post)
ci_upper <- qbeta(0.975, alpha_post, beta_post)
posterior_mean <- alpha_post / (alpha_post + beta_post)
cat('Posterior mean: ', round(posterior_mean, 3), '\n')
cat('95% Credible Interval: [',
round(ci_lower, 3), ',',
round(ci_upper, 3), ']\n')
cat('Interpretation: 95% probability theta is in this interval\n')
# Visualise
theta <- seq(0, 1, length.out = 300)
plot(theta, dbeta(theta, alpha_post, beta_post), type = 'l', col = 'red', lwd = 2,
main = '95% Credible Interval', xlab = 'theta', ylab = 'Density')
abline(v = c(ci_lower, ci_upper), lty = 2, col = 'blue')Pembaruan Bayesian: Pembelajaran Berurutan
Pembaruan Bayesian bersifat berurutan: posterior hari ini menjadi prior untuk hari esok. Hal ini membuat inferensi Bayesian secara alami bersifat inkremental — Anda tidak perlu menyesuaikan ulang model dari awal ketika data baru tiba; cukup perbarui posterior yang sudah ada.
# Sequential Bayesian updating for a coin
# Start with uninformative prior Beta(1,1)
flips <- c(1, 0, 1, 1, 0, 1, 1, 1, 0, 1) # 1=H, 0=T
alpha <- 1; beta_p <- 1 # prior
cat('Prior: Beta(', alpha, ',', beta_p, ') mean =', round(alpha/(alpha+beta_p), 3), '\n')
for (i in seq_along(flips)) {
if (flips[i] == 1) alpha <- alpha + 1 else beta_p <- beta_p + 1
mean_post <- alpha / (alpha + beta_p)
cat('After flip', i, '(', flips[i], '): Beta(',
alpha, ',', beta_p, ') mean =', round(mean_post, 3), '\n')
}Estimasi MAP
Estimasi Maximum A Posteriori (MAP) adalah modus dari distribusi posterior. Untuk posterior Beta(α, β), MAP = (α−1)/(α+β−2). MAP menyeimbangkan pengaruh prior dengan pengaruh likelihood, sehingga estimasi untuk sampel kecil tertarik mendekati prior.
# Compare MLE vs MAP for small sample
heads <- 3; n <- 5
alpha_p <- 5; beta_p <- 5 # informative prior: believe p ~ 0.5
# MLE: ignores prior
mle <- heads / n
# MAP: mode of Beta posterior
alpha_post <- alpha_p + heads
beta_post <- beta_p + (n - heads)
map <- (alpha_post - 1) / (alpha_post + beta_post - 2)
# Posterior mean (alternative point estimate)
post_mean <- alpha_post / (alpha_post + beta_post)
cat('Data: 3 heads in 5 flips\n')
cat('MLE: ', round(mle, 3), '(ignores prior)\n')
cat('MAP: ', round(map, 3), '(mode of posterior)\n')
cat('Posterior mean:', round(post_mean, 3), '(mean of posterior)\n')
cat('Note: MAP and mean shrink toward prior (0.5) for small n\n')Kapan Menggunakan Metode Bayesian
Metode Bayesian sangat bermanfaat ketika: (1) Anda memiliki pengetahuan prior yang informatif, (2) ukuran sampel kecil, (3) Anda memerlukan kuantifikasi ketidakpastian secara menyeluruh, (4) Anda ingin membuat pernyataan probabilistik tentang parameter, atau (5) Anda melakukan analisis berurutan dengan prior yang diteruskan dari eksperimen sebelumnya.
# Comparison: when Bayesian vs frequentist is preferred
comparison <- data.frame(
Scenario = c(
'Small sample (n < 30)',
'Prior domain knowledge',
'Probability about parameter',
'Sequential updating',
'Large sample, no prior',
'Regulatory/simple inference'
),
Preferred = c(
'Bayesian', 'Bayesian', 'Bayesian',
'Bayesian', 'Either', 'Frequentist'
)
)
print(comparison, row.names = FALSE)
# Example: medical device testing with historical data
alpha_historical <- 15 # prior based on 20 historical tests
beta_historical <- 5
cat('\nHistorical prior: Beta(', alpha_historical, ',', beta_historical, ')\n')
cat('Prior mean:', round(alpha_historical/(alpha_historical+beta_historical), 3), '\n')Inferensi Bayesian dalam Praktik
Untuk model konjugat sederhana, inferensi dapat dilakukan secara analitis (seperti ditunjukkan di atas). Untuk model kompleks (hierarkis, nonkonjugat), kita menggunakan pengambilan sampel Markov Chain Monte Carlo (MCMC) melalui Stan (RStan), JAGS, atau BUGS untuk mendekati posterior secara numerik.
# Analytical vs MCMC approaches
approaches <- data.frame(
Method = c('Conjugate (exact)', 'Grid approximation',
'Laplace approx.', 'MCMC (Stan/JAGS)',
'Variational Bayes'),
When = c('Conjugate prior+likelihood', 'Low-dim, discrete',
'Unimodal posterior', 'General complex models',
'Large scale, approximate'),
Speed = c('Instant', 'Fast', 'Fast', 'Slow', 'Moderate'),
Exactness = c('Exact', 'Exact on grid', 'Approximate',
'Asymptotically exact', 'Approximate')
)
print(approaches, row.names = FALSE)Pemeriksaan Singkat
Anda mengamati 7 sisi kepala dalam 10 kali pelemparan koin. Prior Anda adalah Beta(2, 2). Apa distribusi posterior yang benar?
Ringkasan: Pemikiran Bayesian
Hal-hal penting:
- Teorema Bayes: P(θ|data) ∝ P(data|θ) × P(θ)
- Prior menyandikan keyakinan sebelum data; likelihood menyandikan dukungan data; posterior menggabungkan keduanya
- Prior konjugat menghasilkan posterior analitis (Beta-Binomial, Normal-Normal, Gamma-Poisson)
- Pembaruan Beta-Binomial: Beta(α, β) + (h sisi kepala, t sisi ekor) → Beta(α+h, β+t)
- Interval kredibel memiliki interpretasi probabilitas alami yang tidak dimiliki CI
- Pembaruan Bayesian bersifat berurutan — posterior hari ini adalah prior untuk hari esok
- Untuk model kompleks, gunakan pengambilan sampel MCMC (Stan, JAGS) untuk mendekati posterior
# Full Bayesian inference cycle for a proportion
alpha0 <- 2; beta0 <- 2 # prior
heads <- 12; total <- 20 # observed data
alpha_post <- alpha0 + heads
beta_post <- beta0 + (total - heads)
post_mean <- alpha_post / (alpha_post + beta_post)
ci <- qbeta(c(0.025, 0.975), alpha_post, beta_post)
cat('Prior: Beta(', alpha0, ',', beta0, ') mean =', round(alpha0/(alpha0+beta0), 2), '\n')
cat('Data:', heads, 'heads in', total, 'flips\n')
cat('Posterior: Beta(', alpha_post, ',', beta_post, ')\n')
cat('Posterior mean:', round(post_mean, 3), '\n')
cat('95% CI: [', round(ci[1],3), ',', round(ci[2],3), ']\n')Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengantar Pemikiran Bayesian” gratis?
Ya — teks lengkap “Pengantar Pemikiran Bayesian” 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 “Pengantar Pemikiran Bayesian”?
Pahami prior, likelihood, dan posterior dalam kerangka Bayesian. 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 1 dari 4.
Berapa lama pelajaran “Pengantar Pemikiran Bayesian” 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