الفكرة الجريئة
الاستدلال الكلاسيكي — فترات z وt — بيشتغل بإنه يشتق الـ sampling distribution المظبوط أو التقريبي لإحصاءة معيّنة تحت افتراضات model محددة. بس تعمل إيه لما الإحصاءة تبقى median، أو نسبة بين two variances، أو correlation coefficient، أو حاجة أعقد؟ اشتقاق الـ sampling distribution بإيدك بيبقى بسرعة صعب جدًا أو محتاج افتراضات مش هتقدر تتأكد منها.
في سنة 1979، الإحصائي برادلي إيفرون اقترح فكرة بسيطة بشكل مذهل: لو مش عارف الـ distribution بتاع الـ population، استخدم الـ sample نفسها بديل عنه. اعمل resampling من بياناتك with replacement (مع الإرجاع)، واحسب الإحصاءة على كل sample جديدة، وسيب الـ distribution اللي طالع من الإحصاءات دي يقرّب الـ sampling distribution الحقيقي. وسمّى ده الـ bootstrap (البوتستراب) — من التعبير الإنجليزي «إنك ترفع نفسك من رباط جزمتك»، يعني إنك تقوم بنفسك من بياناتك بس.
الدرس ده بيغطّي خوارزمية الـ bootstrap، وإزاي بتطلّع confidence intervals، وليه بتنطبق على أي إحصاءة تقريبًا، والفرق بين الـ parametric والـ nonparametric bootstrap، والحالات المعروفة اللي الطريقة بتفشل فيها.
خوارزمية الـ bootstrap
افترض إن عندنا sample x = (x1, x2, …, xn) من distribution مش معروف F، وعايزين confidence interval لـ parameter θ متقدّر بإحصاءة T(x) (زي الـ mean أو الـ median أو الـ correlation).
الخطوة 1: اسحب bootstrap sample x* = (x*1, …, x*n) بإنك تاخد n مشاهدة من x مع الإرجاع.
الخطوة 2: احسب إحصاءة الـ bootstrap T* = T(x*).
الخطوة 3: كرّر الخطوتين 1 و2 عدد كبير من المرات B (عادةً B = 1,000 لـ 10,000).
الخطوة 4: استخدم الـ B قيمة T*1، T*2، …، T*B عشان تقدّر الـ sampling distribution بتاع T.
ولأن كل bootstrap sample بتتسحب مع الإرجاع من n مشاهدة، فيه مشاهدات أصلية بتظهر كذا مرة وتانية مش بتظهر خالص. في المتوسط، أي bootstrap sample فيها حوالي 63.2% من المشاهدات المختلفة (والباقي نسخ متكررة).
الـ bootstrap standard error
الاستخدام الأساسي للـ bootstrap samples هو إنك تقدّر الـ standard error لأي إحصاءة — الكمية اللي عادةً محتاجة اشتقاق تحليلي في الإحصاء الكلاسيكي.
وده بيحرّرك: لأي إحصاءة — مهما كانت غريبة — الـ standard error هو مجرد الـ standard deviation بتاع الـ bootstrap distribution بتاعها. مش هتحتاج تشتق معادلة أبدًا.
الـ bootstrap confidence intervals
فيه كذا طريقة تحوّل بيها الـ bootstrap samples لـ confidence intervals. وأشهرهم طريقة الـ percentile (الشريحة المئوية) والطريقة الـ basic (المحورية).
فترة الـ percentile: ببساطة، خد الـ percentiles α/2 و1 − α/2 من الـ bootstrap distribution كحدود للفترة:
الفترة الـ basic (طريقة الانعكاس): بدل ما تستخدم الـ percentiles بتاعة T* على طول، استخدمها عشان تصحّح الـ bias وتعمل فترة معكوسة:
ومن النسخ الأكثر تقدّمًا فترة BCa (bias-corrected and accelerated)، اللي بتصحّح الـ bias والـ skew الاتنين في الـ bootstrap distribution، وهي الطريقة الأكتر توصية في الممارسة الحديثة.
الـ bootstrap لأي إحصاءة
أقوى ميزة في الـ bootstrap إنه عام. الطرق الـ parametric الكلاسيكية بتدّي معادلات للـ mean والنسبة، بس لأي حاجة تانية تقريبًا، الـ bootstrap هو الطريقة الأنسب. ودي أمثلة أساسية:
الـ median: مفيش معادلة مقفولة للـ standard error للـ distributions اللي مش normal — والـ bootstrap بيدّيهولك بسهولة.
الـ correlation coefficient: الـ bootstrap أمتن من Fisher's z transformation للبيانات اللي مش normal والـ samples الصغيرة.
نسبة المتوسطات: مفيش معادلة بسيطة؛ والـ bootstrap بيشتغل على طول.
الـ regression coefficients: فترات الـ bootstrap أمتن من الـ confidence intervals الكلاسيكية لما الـ residuals (البواقي) تبقى مش normal أو الـ variance بتاعها مش ثابت.
مقاييس models الـ machine learning: الـ AUC (المساحة تحت المنحنى)، والـ accuracy، والـ F1 — الـ bootstrap هو الطريقة القياسية لتقدير عدم اليقين في المقاييس دي.
الـ parametric bootstrap قصاد الـ nonparametric
الخوارزمية اللي فوق هي الـ nonparametric bootstrap (البوتستراب اللامعلمي) — مش بتفترض أي حاجة عن شكل الـ distribution الأساسي F، وبتعمل resampling على طول من الـ empirical distribution بتاع البيانات. والنسخة دي هي الأكتر استخدامًا.
الـ parametric bootstrap (البوتستراب المعلمي) بيعمل fit لـ parametric model على البيانات (مثلًا بيفترض إن البيانات normal بـ mean وvariance متقدّرين)، وبعدين بيطلّع bootstrap samples بالسحب من الـ model المتظبّط بدل الـ resampling من البيانات الأصلية. بيبقى مفيد لما:
• يبقى عندك معرفة مسبقة قوية بعيلة الـ distribution.
• الـ sample بتاعتك صغيرة والـ empirical distribution تقريب ضعيف لـ F.
• تكون محتاج bootstrap samples تعدّي مدى البيانات اللي شفتها (الـ nonparametric bootstrap عمره ما يقدر يطلّع قيم برّه الـ sample الأصلية).
الـ nonparametric: بيعمل resampling من البيانات. مفيش افتراض عن الـ distribution. بينفع في كل حتة. محتاج n كبير كفاية عشان الـ empirical distribution يمثّل F كويس.
الـ parametric: بيعمل resampling من model متظبّط. بيستغل المعرفة بالـ distribution عشان كفاءة أعلى. وبيفشل وحش لما الـ model المفترض يبقى غلط.
ليه الـ bootstrap بيشتغل؟
المبرّر النظري قايم على الـ plug-in principle (مبدأ التعويض): بدّل الـ distribution المجهول F بالـ empirical distribution F̂ (اللي بيدّي احتمال 1/n لكل نقطة بيانات اتشافت). وأي دالة في F ممكن تتقدّر بنفس الدالة في F̂.
لما n → ∞، F̂ بيتقارب لـ F بـ Glivenko–Cantelli theorem (نظرية جليفنكو–كانتيلي). والـ bootstrap distribution بتاع T* − T بيتقارب للـ sampling distribution الحقيقي بتاع T − θ. فالـ bootstrap confidence intervals صالحة asymptotically — بتحقق الـ coverage probability الصح لما n يكبر.
وللـ samples المحدودة، جودة تقريب الـ bootstrap معتمدة على F̂ بيمثّل F كويس قد إيه. وعشان كده الـ samples الصغيرة بتفضل تحدي: مع n = 10 مفيش غير حوالي 10 مشاهدات مختلفة في الـ empirical distribution، وده ممكن يبقى بديل ضعيف للـ continuous distribution الحقيقي.
الـ bootstrap بيفشل إمتى؟
الـ bootstrap مش عصاية سحرية. فيه حالات فشل معروفة:
الـ percentiles المتطرفة والـ max/min: تقدير الحد الأقصى للـ distribution بيفشل — الـ maximum في الـ bootstrap مستحيل يعدّي الـ maximum اللي اتشاف.
الـ distributions اللي ليها heavy tails: لما الـ variance يبقى لا نهائي (زي Cauchy distribution)، الـ bootstrap ممكن ميتقاربش صح.
الـ samples الصغيرة جدًا (n < 15): الـ empirical distribution تقريب خشن لـ F؛ والـ coverage ممكن تبقى مش موثوقة.
البيانات اللي مش مستقلة: الـ time series والبيانات المكانية والـ clustered محتاجة نسخ bootstrap متخصصة (الـ block bootstrap، والـ cluster bootstrap).
الـ model selection والـ sparsity: تطبيق الـ bootstrap على طريقة model selection (زي LASSO) ممكن يدّي نتايج مضلّلة.
التطبيق بالكمبيوتر
التكلفة الأساسية للـ bootstrap حسابية: لازم تحسب الإحصاءة B مرة. مع B = 1,000 وإحصاءة سريعة (زي median لـ n = 100 مشاهدة)، ده بياخد milliseconds على كمبيوتر حديث. ومع B = 10,000 وإحصاءة تقيلة في الحساب (زي AUC محسوبة بالـ cross-validation لـ neural network)، ممكن ياخد ساعات.
في Python، الـ bootstrap confidence interval لأي إحصاءة سهل تنفّذه:
import numpy as np
rng = np.random.default_rng(42)
B = 5000
boot_stats = [np.median(rng.choice(x, n, replace=True)) for _ in range(B)]
ci = np.percentile(boot_stats, [2.5, 97.5])
SciPy 1.7+ فيها الدالة scipy.stats.bootstrap اللي بتطبّق طرق الـ percentile والـ basic والـ BCa بنداء دالة واحد. وحزمة boot في R هي التطبيق المرجعي، وبتدعم كل النسخ الأساسية والحساب المتسرّع.
- الفكرة الجوهرية: اعتبر الـ sample بديل عن الـ population؛ واسحب B bootstrap sample عشان تقرّب الـ sampling distribution لأي إحصاءة.
- الـ bootstrap standard error: الـ standard deviation بتاع الـ B إحصاءة bootstrap — مش محتاج أي معادلة تحليلية.
- فترة الـ percentile: [T*(α/2)، T*(1−α/2)] — الأبسط والأكتر استخدامًا.
- العمومية: بتشتغل للـ median والـ correlation والـ regression coefficients والـ AUC وتقريبًا أي كمية ينفع تتقدّر.
- الـ nonparametric bootstrap: بيعمل resampling من الـ empirical distribution؛ مش محتاج افتراض model؛ صالح asymptotically.
- الـ parametric bootstrap: بيعمل resampling من model متظبّط؛ أكفأ لما الـ model يبقى صح؛ ومضلّل لما يبقى غلط.
- حالات الفشل المعروفة: الـ order statistics المتطرفة، والـ heavy tails، والـ n الصغير جدًا، والبيانات اللي مش مستقلة (استخدم الـ block bootstrap للـ time series).