0Pricing
R Academy · درس

فحوصات التنبؤ البعدي

تحقق من ملاءمة النموذج بمقارنة توزيعات البيانات المحاكاة بالبيانات المرصودة

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

ما فحوصات التنبؤ اللاحق؟

بعد ملاءمة نموذج بايزي، يجب أن نسأل: هل يولّد هذا النموذج بيانات تشبه البيانات التي لاحظناها؟ تجيب فحوصات التنبؤ اللاحق (PPCs) عن ذلك بمحاكاة مجموعات بيانات مكررة yrep من التوزيع اللاحق، ثم مقارنتها بيانيًا بالبيانات المرصودة y.

استخراج العينات اللاحقة

يعيد extract(fit, pars='mu') قائمة مُسمّاة؛ أما $mu فهو متجه عددي يضم جميع العينات بعد الإحماء لتلك المعلمة. ومع 4 سلاسل × 1000 تكرار بعد الإحماء، تحصلون على 4000 عينة.

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

توليد yrep من العينات اللاحقة

لكل سحب لاحق (mu_s, sigma_s)، حاكوا مجموعة بيانات مكررة بالحجم نفسه للبيانات الأصلية. خزّنوا هذه المجموعات في مصفوفة yrep، بحيث يمثل كل صف مجموعة بيانات محاكاة واحدة.

# 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() — مقارنة الكثافات

تضع bayesplot::ppc_dens_overlay(y, yrep[1:50,]) كثافة النواة للبيانات المرصودة (خط داكن) فوق كثافات 50 مجموعة بيانات محاكاة مختارة عشوائيًا (خطوط فاتحة). وتعني الملاءمة الجيدة للنموذج أن يقع الخط الداكن داخل سحابة الخطوط الفاتحة.

# 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() — فحص إحصاء الاختبار

يعرض ppc_stat(y, yrep, stat = 'mean') مدرجًا تكراريًا لإحصاء الاختبار (مثل المتوسط) المحسوب على كل مجموعة بيانات محاكاة، مع خط رأسي عند الإحصاء المرصود. وإذا وقعت القيمة المرصودة ضمن الجزء الأكبر من المدرج التكراري، فهذا يعني أن النموذج يلتقط ذلك الجانب من البيانات.

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

القيمة الاحتمالية البايزية

تمثل القيمة الاحتمالية البايزية (القيمة الاحتمالية للتنبؤ اللاحق) نسبة مجموعات البيانات المحاكاة التي يكون إحصاء اختبارها أكثر تطرفًا من القيمة المرصودة. وتشير القيم القريبة من 0.5 إلى معايرة جيدة، بينما تشير القيم القريبة من 0 أو 1 إلى سوء ملاءمة النموذج لذلك الإحصاء.

# 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

دوال PPC إضافية في bayesplot

يوفر bayesplot العديد من تصورات PPC إلى جانب تراكبات الكثافة:

  • ppc_hist(y, yrep[1:8,]) — شبكة مدرجات تكرارية
  • ppc_scatter_avg(y, yrep) — مخطط تبعثر للقيم المرصودة مقابل متوسط yrep
  • ppc_intervals(y, yrep) — فواصل عدم اليقين حول كل مشاهدة
  • ppc_rootogram(y, yrep) — لبيانات العد
# 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)

تفسير مخططات PPC — سوء ملاءمة النموذج

أنماط سوء الملاءمة الشائعة وأسبابها:

  • yrep واسع جدًا — التوزيع السابق واسع أكثر من اللازم أو النموذج مفرط التشتت
  • yrep منزاح — عائلة دالة الإمكان غير صحيحة (مثل استخدام التوزيع الطبيعي لبيانات ملتوية)
  • yrep لا يلتقط التعدد النمطي — هناك حاجة إلى نموذج خليط
  • yrep يفشل في القيم القصوى — هناك حاجة إلى توزيع ذي ذيول ثقيلة
# 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
')

PPCs في كتلة نموذج Stan

يمكنكم توليد yrep مباشرةً في Stan باستخدام كتلة generated quantities. ويجنبكم ذلك إعادة استخراج المعلمات في R، وهو مكافئ حسابيًا.

# 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

التحقق المتقاطع مع ترك مشاهدة واحدة

إضافةً إلى PPCs، تحسب loo::loo(fit) التحقق المتقاطع مع ترك مشاهدة واحدة لمقارنة النماذج المتنافسة. ويُفضَّل النموذج ذو قيمة ELPD (كثافة التنبؤ اللوغاريتمية المتوقعة) الأعلى. استخدموا loo::loo_compare(loo1, loo2) لترتيب النماذج.

# 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

أفضل ممارسات PPC

اتبعوا هذه الممارسات لإجراء فحص صارم للتنبؤ اللاحق:

  • ابدؤوا دائمًا باستخدام ppc_dens_overlay() كفحص عام للسلامة
  • تابعوا بإحصاءات خاصة بالمجال (ppc_stat()) وذات صلة بأهداف تحليلكم
  • استخدموا 50 سحبًا على الأقل من yrep للفحوصات البصرية، وجميع السحوبات البالغ عددها 4000 لحساب القيم الاحتمالية البايزية
  • تساعد فحوصات PPC الفاشلة في تحسين النموذج؛ فهي تشخيصية وليست إخفاقًا
# 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

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

ماذا تعني قيمة احتمالية بايزية مقدارها 0.03 لإحصاء القيمة العظمى بالنسبة إلى النموذج؟

مراجعة فحوصات التنبؤ اللاحق

سير عمل PPC في RStan وbayesplot:

  • استخراج العينات: extract(fit, pars='mu')$mu
  • توليد yrep: التكرار عبر السحوبات اللاحقة واستدعاء rnorm(n, mu_s, sigma_s)
  • الفحص العام: ppc_dens_overlay(y, yrep[1:50,])
  • فحوصات الإحصاءات: ppc_stat(y, yrep, stat='mean')
  • القيمة الاحتمالية البايزية: mean(apply(yrep,1,stat) >= stat(y)) — الاقتراب من 0.5 جيد
  • لمقارنة النماذج استخدموا loo::loo_compare()

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

هل درس «فحوصات التنبؤ البعدي» مجاني؟

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

ماذا ستتعلم في «فحوصات التنبؤ البعدي»؟

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

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

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

كم من الوقت يستغرق درس «فحوصات التنبؤ البعدي»؟

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

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

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

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

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