R Academy · Pelajaran

Pengenalan kepada Pemikiran Bayesian

Fahami prior, kebolehjadian dan posterior dalam kerangka Bayesian.

Pelajaran 1 daripada 413 langkah

Pengenalan kepada Pemikiran Bayesian ialah pelajaran R Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran R Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Frequentis berbanding Bayesian

Dalam statistik frequentis, kebarangkalian ialah kekerapan jangka panjang sesuatu peristiwa. Dalam statistik Bayesian, kebarangkalian mewakili darjah kepercayaan. Perbezaan utama: frequentis menganggap parameter sebagai pemalar tetap yang tidak diketahui; Bayesian menganggap parameter sebagai pemboleh ubah rawak dengan taburan kebarangkalian.

# 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')

Teorem Bayes

Teorem Bayes menghubungkan kepercayaan terdahulu tentang sesuatu parameter, kebolehjadian data berdasarkan parameter tersebut dan kepercayaan posterior selepas data diperhatikan:

P(θ|data) = P(data|θ) × P(θ) / P(data)

Penyebut P(data) ialah pemalar penormalan — pemalar ini menjadikan posterior suatu taburan kebarangkalian 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')

Taburan Terdahulu

Prior mengekodkan kepercayaan anda tentang sesuatu parameter sebelum melihat data. Prior boleh jadi tidak bermaklumat (rata, menunjukkan pengetahuan minimum) atau bermaklumat (berpuncak tajam, menunjukkan kepakaran domain). Prior yang biasa: Beta(1,1) = seragam, Normal(0, 10) = bermaklumat lemah.

# 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 Kebolehjadian

Kebolehjadian P(data|θ) mengukur sejauh mana data yang diperhatikan berkemungkinan berlaku bagi nilai parameter tertentu. Untuk lambungan syiling, kebolehjadiannya ialah Binomial. Untuk data berterusan, kebiasaannya Gaussian. Kami menilai kebolehjadian pada banyak nilai θ untuk mencari 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 × Kebolehjadian

Posterior berkadar dengan hasil darab prior dan kebolehjadian. Bagi model Beta-Binomial, pengiraan ini boleh diselesaikan secara analitik: jika prior ialah Beta(α, β) dan anda memerhatikan h kepala dalam n lambungan, posterior ialah 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 ialah prior yang posteri­ornya tergolong dalam keluarga yang sama seperti prior tersebut. Ini menjadikan inferens boleh dikira secara analitik. Pasangan konjugat yang biasa: Beta-Binomial (perkadaran), Normal-Normal (min dengan varians yang diketahui), Gamma-Poisson (kadar).

# 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')

Selang Kredibel

Selang kredibel (CI) ialah analog Bayesian bagi selang keyakinan: CI 95% bermaksud terdapat kebarangkalian posterior 95% bahawa θ terletak dalam selang tersebut. Inilah tafsiran intuitif yang kebanyakan orang tersilap berikan kepada selang keyakinan frequentis.

# 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')

Pengemaskinian Bayesian: Pembelajaran Berjujukan

Pengemaskinian Bayesian bersifat berjujukan: posterior hari ini menjadi prior hari esok. Ini menjadikan inferens Bayesian semula jadi secara berperingkat — anda tidak perlu memadankan semula model dari awal apabila data baharu tiba; kemas kini sahaja posterior sedia 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')
}

Anggaran MAP

Anggaran Maximum A Posteriori (MAP) ialah mod taburan posterior. Bagi posterior Beta(α, β), MAP = (α−1)/(α+β−2). MAP mengimbangi tarikan prior dengan tarikan kebolehjadian, lalu mengecilkan anggaran ke arah prior untuk sampel kecil.

# 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')

Bila Menggunakan Kaedah Bayesian

Kaedah Bayesian amat berguna apabila: (1) anda mempunyai pengetahuan terdahulu yang bermaklumat, (2) saiz sampel kecil, (3) anda memerlukan pengkuantitian ketidakpastian yang lengkap, (4) anda ingin membuat pernyataan kebarangkalian tentang parameter atau (5) anda menjalankan analisis berjujukan yang menggunakan semula prior daripada eksperimen terdahulu.

# 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')

Inferens Bayesian dalam Amalan

Bagi model konjugat yang mudah, inferens adalah analitik (seperti yang ditunjukkan di atas). Bagi model kompleks (berhierarki, bukan konjugat), kami menggunakan pensampelan Markov Chain Monte Carlo (MCMC) melalui Stan (RStan), JAGS atau BUGS untuk menghampiri posterior secara berangka.

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

Semakan Pantas

Anda memerhatikan 7 kepala dalam 10 lambungan syiling. Prior anda ialah Beta(2, 2). Apakah taburan posterior yang betul?

Ringkasan: Pemikiran Bayesian

Perkara utama:

  • Teorem Bayes: P(θ|data) ∝ P(data|θ) × P(θ)
  • Prior mengekodkan kepercayaan sebelum data; kebolehjadian mengekodkan sokongan data; posterior menggabungkan kedua-duanya
  • Prior konjugat menghasilkan posterior analitik (Beta-Binomial, Normal-Normal, Gamma-Poisson)
  • Pengemaskinian Beta-Binomial: Beta(α, β) + (h kepala, t ekor) → Beta(α+h, β+t)
  • Selang kredibel mempunyai tafsiran kebarangkalian semula jadi yang tidak dimiliki oleh CI
  • Pengemaskinian Bayesian bersifat berjujukan — posterior hari ini ialah prior hari esok
  • Bagi model kompleks, gunakan pensampelan MCMC (Stan, JAGS) untuk menghampiri 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')
Percuma untuk bermula

Pelajari R dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
43
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Pengenalan kepada Pemikiran Bayesian” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran R Academy, termasuk “Pengenalan kepada Pemikiran Bayesian”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengenalan kepada Pemikiran Bayesian”?

Fahami prior, kebolehjadian dan posterior dalam kerangka Bayesian. Anda berlatih R Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan R Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran R Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Pengenalan kepada Pemikiran Bayesian” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pengenalan kepada Pemikiran Bayesian
  2. Menulis Model Stan dalam R
  3. Persampelan MCMC dan Diagnostik
  4. Semakan Ramalan Posterior
← Kembali ke R Academy