Ймовірність · Статистичний висновок
📅 Липень 2026 ⏱ ≈ 13 хв читання 🎯 Середній рівень

Вибіркові методи: Bootstrap і Jackknife

Яка невизначеність медіани 40 вимірювань, коли підручникової формули для її стандартної похибки не існує? Перевибірка дає відповідь без жодних припущень про розподіл: перевибираємо самі дані. Ми розглянемо непараметричний bootstrap, персентильні довірчі інтервали, jackknife «залиш-один-геть» та повну реалізацію обох методів на JavaScript.

Коротко: Щоб оцінити невизначеність статистики на кшталт медіани, тисячі разів перевибирайте власні дані з поверненням (bootstrap) і дивіться на розкид результатів, або систематично виключайте по одному спостереженню (jackknife), щоб оцінити зміщення й дисперсію. Bootstrap краще працює зі скошеними чи негладкими статистиками; jackknife дешевший, але не годиться для медіани.

1. Навіщо перевибирати? Принцип підстановки

Класична статистика дає формули у замкнутому вигляді для стандартних похибок простих статистик, як-от середнє (σ/√n), але для медіани, усіченого середнього, коефіцієнта кореляції чи відношення двох статистик такої формули загалом не існує — або вона залежить від невідомих властивостей розподілу генеральної сукупності.

Принцип підстановки Бредлі Ефрона (1979) вирішує цю проблему: оскільки ми не знаємо справжнього розподілу генеральної сукупності F, ми підставляємо емпіричний розподіл F̂ — саму вибірку, вважаючи кожне спостережене значення однаково ймовірним — і оцінюємо мінливість вибірки статистики шляхом повторної перевибірки з F̂ замість F.

2. Алгоритм bootstrap

Маючи вихідну вибірку x₁, …, xₙ і статистику θ̂ = T(x₁,…,xₙ) (наприклад, середнє, медіану чи стандартне відхилення), непараметричний bootstrap працює так:

  1. Витягуємо bootstrap-вибірку x₁*, …, xₙ* розміром n, вибираючи з поверненням із вихідних даних.
  2. Обчислюємо статистику на перевибірці: θ̂* = T(x₁*, …, xₙ*).
  3. Повторюємо кроки 1–2 B разів (зазвичай B = 1 000–10 000), отримуючи bootstrap-розподіл θ̂*₁, …, θ̂*ᴮ.
  4. Використовуємо розкид bootstrap-розподілу як оцінку вибіркового розподілу θ̂.
Bootstrap стандартна похибка: SE*(θ̂) = √[ (1/(B−1)) · Σᵦ (θ̂*ᵦ − θ̄*)² ]
// θ̄* — середнє B bootstrap-реплікацій
Ключова ідея: оскільки кожна bootstrap-перевибірка витягує n елементів з поверненням із n вихідних елементів, в середньому близько 63.2% вихідних спостережень з'являються хоча б один раз у кожній перевибірці (решта — дублікати) — це випливає з 1 − (1 − 1/n)ⁿ → 1 − e⁻¹ ≈ 0.632 при зростанні n.

3. Довірчі інтервали bootstrap

Найпростіший і найпоширеніший інтервал — персентильний метод: сортуємо B bootstrap-реплікацій і беремо емпіричні 2.5-й та 97.5-й персентилі як 95% довірчий інтервал:

ДІ₉₅% = [ θ̂*₍₀.₀₂₅ᴮ₎ , θ̂*₍₀.₉₇₅ᴮ₎ ]

Цей метод не робить жодних припущень про нормальність і працює навіть для скошених вибіркових розподілів (наприклад, медіани чи відношення). Існують уточнені варіанти для випадків, коли персентильний метод зміщений:

Для порівняння, класичний параметричний ДІ для середнього за припущення нормальної генеральної сукупності використовує t-розподіл: X̄ ± tn−1,0.975·s/√n. Коли дані справді близькі до нормальних, цей інтервал і персентильний bootstrap-ДІ майже збігаються; коли дані скошені або статистика нелінійна (наприклад, медіана), вони розходяться, і bootstrap заслуговує більше довіри.

4. Jackknife: залиш-один-геть

Jackknife (Кенуй 1949, Тьюкі 1958) передує bootstrap і використовує детермінований спосіб перевибірки: обчислює статистику n разів, кожного разу виключаючи рівно одне спостереження.

θ̂₍ᵢ₎ = T(x₁, …, xᵢ₋₁, xᵢ₊₁, …, xₙ)   для i = 1, …, n

Jackknife-середнє: θ̄₍·₎ = (1/n) Σᵢ θ̂₍ᵢ₎

Оцінка зміщення

Зміщенняjack(θ̂) = (n − 1) · ( θ̄₍·₎ − θ̂ )

Оцінка дисперсії / стандартної похибки

Дисперсіяjack(θ̂) = [ (n − 1) / n ] · Σᵢ ( θ̂₍ᵢ₎ − θ̄₍·₎ )²

Множник (n−1) роздуває сиру дисперсію оцінок «залиш-один-геть», оскільки кожна θ̂₍ᵢ₎ обчислюється з n−1 точок і тому варіюється менше, ніж це робила б незалежна реплікація — формула jackknife компенсує це.

Jackknife не працює для негладких статистик. Для медіани виключення одного спостереження зазвичай змінює оцінку на 0 або на повний крок відстані між даними, ніколи плавно — оцінка дисперсії jackknife доведено є неспроможною для медіани. Для негладких статистик, як-от медіана чи інші квантилі, використовуйте bootstrap.

5. Bootstrap проти jackknife

ВластивістьBootstrapJackknife
ПеревибіркиB випадкових, з поверненнямn детермінованих, залиш-один-геть
Обчислювальна вартістьO(B·n) — B часто 1 000+O(n²) у гіршому разі — лише n реплікацій
Працює для медіаниТакНі (неспроможний)
Довірчі інтервалиПерсентильний, BCa, пивотальний — напрямуПотребує нормальної апроксимації додатково
Історична рольУніверсальний, стандарт сьогодніПростіший попередник, досі використовується для зміщення/дисперсії гладких статистик

У сучасній практиці bootstrap значною мірою витіснив jackknife для довірчих інтервалів, але jackknife залишається корисним як дешевий детермінований інструмент корекції зміщення, а також лежить в основі крос-валідації та діагностики jackknife-after-bootstrap.

6. Реалізація на JavaScript

function mean(arr) { return arr.reduce((a,b) => a+b, 0) / arr.length; }

function median(arr) {
  const s = [...arr].sort((a,b) => a-b);
  const mid = Math.floor(s.length / 2);
  return s.length % 2 ? s[mid] : (s[mid-1] + s[mid]) / 2;
}

// ── Bootstrap: перевибірка з поверненням, B разів ───────────────
function bootstrap(data, statFn, B = 2000) {
  const n = data.length;
  const replicates = new Array(B);
  for (let b = 0; b < B; b++) {
    const sample = new Array(n);
    for (let i = 0; i < n; i++) sample[i] = data[Math.floor(Math.random() * n)];
    replicates[b] = statFn(sample);
  }
  return replicates;
}

// ── Персентильний довірчий інтервал з bootstrap-реплікацій ──────
function percentileCI(replicates, alpha = 0.05) {
  const sorted = [...replicates].sort((a,b) => a-b);
  const lo = sorted[Math.floor((alpha/2) * sorted.length)];
  const hi = sorted[Math.ceil((1 - alpha/2) * sorted.length) - 1];
  return [lo, hi];
}

// ── Jackknife: зміщення та дисперсія «залиш-один-геть» ──────────
function jackknife(data, statFn) {
  const n = data.length;
  const full = statFn(data);
  const looEstimates = new Array(n);
  for (let i = 0; i < n; i++) {
    const leaveOneOut = data.slice(0, i).concat(data.slice(i + 1));
    looEstimates[i] = statFn(leaveOneOut);
  }
  const jackMean = mean(looEstimates);
  const bias = (n - 1) * (jackMean - full);
  const variance = ((n - 1) / n) *
    looEstimates.reduce((s, v) => s + (v - jackMean) ** 2, 0);
  return { estimate: full, bias, se: Math.sqrt(variance) };
}

// ── Приклад: bootstrap і jackknife для медіани ──────────────────
const data = [12, 15, 14, 10, 50, 13, 11, 16, 9, 14]; // скошено викидом 50
const replicates = bootstrap(data, median, 5000);
console.log('bootstrap SE', Math.sqrt(bootstrap(data, median, 5000).reduce(
  (s,x,_,a) => s + (x - mean(a))**2, 0) / (replicates.length - 1)));
console.log('95% персентильний ДІ', percentileCI(replicates));
console.log('jackknife (середнє, не медіана!)', jackknife(data, mean));

7. Підводні камені

🎯 Дослідіть симуляції Монте-Карло

Побачте випадковість у стилі перевибірки в дії: тисячі випробувань, що збігаються до стабільної оцінки.

Відкрити симуляцію →

🔗 Пов'язані симуляції

🎯Монте-Карло 📈Нормальний розподіл 🎯Баєсівський висновок 🃏Ланцюг Маркова