R Academy · درس

مقدمة إلى التفكير البايزي

افهم التوزيع القبلي ودالة الإمكان والتوزيع البعدي ضمن الإطار البايزي

الدرس 1 من 413 خطوة

مقدمة إلى التفكير البايزي درس مجاني في R Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

التكرارية مقابل البايزية

في الإحصاء التكراري، يمثّل الاحتمال التكرار طويل الأمد لحدث ما. أما في الإحصاء البايزي، فيمثّل الاحتمال درجة اعتقاد. والفرق الأساسي هو أن التكراريين يتعاملون مع المعلمات بوصفها ثوابت ثابتة (مجهولة)، بينما يتعامل معها البايزيون بوصفها متغيرات عشوائية ذات توزيعات احتمالية.

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

مبرهنة بايز

تربط مبرهنة بايز بين الاعتقاد السابق حول معلمة ما، واحتمالية البيانات بالنظر إلى تلك المعلمة، والاعتقاد اللاحق بعد ملاحظة البيانات:

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

يمثّل المقام P(data) ثابتًا للتطبيع، إذ يجعل التوزيع اللاحق توزيعًا احتماليًا صحيحًا.

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

التوزيعات السابقة

يعبّر التوزيع السابق عن اعتقادك بشأن معلمة ما قبل رؤية البيانات. وقد تكون التوزيعات السابقة غير معلوماتية (مسطّحة، تعبّر عن حد أدنى من المعرفة) أو معلوماتية (ذات قمة حادة، تعبّر عن خبرة بالمجال). ومن التوزيعات السابقة الشائعة: Beta(1,1) = منتظم، وNormal(0, 10) = معلوماتي ضعيفًا.

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

دوال الإمكان

يقيس الإمكان P(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')

التوزيع اللاحق = السابق × الإمكان

يتناسب التوزيع اللاحق مع حاصل ضرب التوزيع السابق في الإمكان. وبالنسبة إلى نموذج Beta-Binomial، يمكن حسابه تحليليًا: إذا كان التوزيع السابق Beta(α, β)، ولاحظت h من النتائج «وجه» في n رمية، فإن التوزيع اللاحق هو 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)

التوزيعات السابقة المترافقة

التوزيع السابق المترافق هو التوزيع الذي ينتمي فيه التوزيع اللاحق إلى العائلة نفسها التي ينتمي إليها التوزيع السابق. وهذا يجعل الاستدلال قابلًا للحساب تحليليًا. ومن أزواج التوزيعات المترافقة الشائعة: Beta-Binomial (النسب)، وNormal-Normal (المتوسطات ذات التباين المعروف)، وGamma-Poisson (المعدلات).

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

فترات المصداقية

فترة المصداقية (CI) هي النظير البايزي لفترة الثقة: تعني فترة المصداقية 95% أن هناك احتمالًا لاحقًا قدره 95% بأن تقع θ ضمن الفترة. وهذا هو التفسير البديهي الذي ينسبه معظم الناس خطأً إلى فترات الثقة التكرارية.

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

التحديث البايزي: التعلّم التتابعي

يحدث التحديث البايزي تتابعيًا: يصبح التوزيع اللاحق لليوم هو التوزيع السابق للغد. ويجعل ذلك الاستدلال البايزي تزايديًا بطبيعته — فلا تحتاج إلى إعادة الملاءمة من البداية عند وصول بيانات جديدة، بل يكفي تحديث التوزيع اللاحق الحالي.

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

تقدير MAP

تقدير Maximum A Posteriori (MAP) هو منوال التوزيع اللاحق. وبالنسبة إلى توزيع لاحق من نوع Beta(α, β)، فإن MAP = (α−1)/(α+β−2). يوازن MAP بين تأثير التوزيع السابق وتأثير الإمكان، ويدفع التقديرات نحو التوزيع السابق عند صغر العينات.

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

متى تُستخدم الأساليب البايزية؟

تكون الأساليب البايزية مفيدة خصوصًا عندما: (1) تتوفر لديك معرفة سابقة معلوماتية، (2) تكون أحجام العينات صغيرة، (3) تحتاج إلى توصيف كامل لعدم اليقين، (4) ترغب في صياغة عبارات احتمالية حول المعلمات، أو (5) تجري تحليلًا تتابعيًا تنتقل فيه التوزيعات السابقة من التجارب السابقة.

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

الاستدلال البايزي عمليًا

بالنسبة إلى النماذج المترافقة البسيطة، يكون الاستدلال تحليليًا (كما سبق توضيحه). أما بالنسبة إلى النماذج المعقدة (الهرمية وغير المترافقة)، فنستخدم أخذ عينات مونتِ كارلو بسلاسل ماركوف (MCMC) عبر Stan (RStan) أو JAGS أو BUGS لتقريب التوزيع اللاحق عدديًا.

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

تحقّق سريع

لاحظت 7 نتائج «وجه» في 10 رميات لقطعة نقدية. وكان توزيعك السابق Beta(2, 2). ما التوزيع اللاحق الصحيح؟

مراجعة: التفكير البايزي

أهم النقاط:

  • مبرهنة بايز: P(θ|data) ∝ P(data|θ) × P(θ)
  • يعبّر التوزيع السابق عن الاعتقاد قبل البيانات، ويمثّل الإمكان دعم البيانات، بينما يجمع التوزيع اللاحق بينهما
  • تنتج التوزيعات السابقة المترافقة توزيعات لاحقة تحليلية (Beta-Binomial وNormal-Normal وGamma-Poisson)
  • تحديث Beta-Binomial: Beta(α, β) + (h من نتائج «وجه»، t من نتائج «كتابة») → Beta(α+h, β+t)
  • تتميز فترات المصداقية بالتفسير الاحتمالي الطبيعي الذي لا تتمتع به فترات الثقة
  • يحدث التحديث البايزي تتابعيًا — فالتوزيع اللاحق لليوم هو التوزيع السابق للغد
  • بالنسبة إلى النماذج المعقدة، استخدم أخذ عينات MCMC (Stan وJAGS) لتقريب التوزيعات اللاحقة
# 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')
البدء مجانًا

تعلم R مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
43
الدروس
159

الأسئلة الشائعة

هل درس «مقدمة إلى التفكير البايزي» مجاني؟

نعم — نص درس «مقدمة إلى التفكير البايزي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «مقدمة إلى التفكير البايزي»؟

افهم التوزيع القبلي ودالة الإمكان والتوزيع البعدي ضمن الإطار البايزي تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «مقدمة إلى التفكير البايزي»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مقدمة إلى التفكير البايزي
  2. كتابة نماذج Stan في R
  3. أخذ عينات MCMC وتشخيصها
  4. فحوصات التنبؤ البعدي
← العودة إلى R Academy