Oferty statystyczne Tutoriale Opinie Kontakt

Bootstrap w statystyce – błąd standardowy i przedział ufności

Bootstrap to metoda szacowania błędu standardowego i przedziału ufności przez wielokrotne losowanie ze zwracaniem z Twojej własnej próby. Typowe pytanie z pracy dyplomowej lub artykułu: jak policzyć przedział ufności dla mediany, korelacji albo efektu pośredniego w mediacji, gdy nie ma na to prostego wzoru?

W prostych słowachNie możesz zbadać populacji jeszcze sto razy, więc udajesz, że Twoja próba jest populacją w miniaturze. Losujesz z niej nowe próby tej samej wielkości, pozwalając, by ta sama osoba trafiła kilka razy. W każdej liczysz statystykę. To, jak bardzo wyniki „skaczą” między losowaniami, mówi, jak niepewne jest Twoje oszacowanie.

Kiedy stosować bootstrap?

  • chcesz przedziału ufności dla statystyki bez prostego wzoru: mediany, różnicy median, korelacji, efektu pośredniego w mediacji, ścieżek w modelowaniu PLS-SEM;
  • wątpisz w założenia klasycznego wzoru (np. rozkład jest skośny, a próba niezbyt duża);
  • obserwacje są niezależne i pochodzą z losowej, reprezentatywnej próby.

Dla zwykłej średniej z niewielką skośnością wystarczy klasyczny przedział ufności z rozkładem t i błąd standardowy s/√n. Bootstrap nie naprawia małej próby. Przy pięciu osobach jego przedziały wychodzą za wąskie, co zobaczysz w przykładzie.

Wzory bootstrapu

$$ SE_{\text{boot}} = \sqrt{\frac{1}{B-1}\sum_{b=1}^{B}\left(\hat{\theta}^{*}_{b} - \bar{\theta}^{*}\right)^2} \qquad 95\%\ \text{CI} = \left[\hat{\theta}^{*}_{(2{,}5\%)};\ \hat{\theta}^{*}_{(97{,}5\%)}\right] \qquad \text{obciążenie} = \bar{\theta}^{*} - \hat{\theta} $$
\(\hat{\theta}\)
statystyka policzona z oryginalnej próby (tu: średnia); to ona jest Twoim oszacowaniem
\(\hat{\theta}^{*}_{b}\)
ta sama statystyka w b-tej próbie bootstrapowej (replikacji)
\(B\)
liczba replikacji, w praktyce co najmniej 1000
\(\bar{\theta}^{*}\)
średnia ze wszystkich replikacji
\(\hat{\theta}^{*}_{(2{,}5\%)},\ \hat{\theta}^{*}_{(97{,}5\%)}\)
wartości, poniżej których leży 2,5% i 97,5% replikacji – granice przedziału percentylowego

Przykład krok po kroku

Pięcioro studentów spało przed kolokwium 6, 2, 7, 4 i 6 godzin (średnia 5 h). Najpierw zróbmy bootstrap „ręcznie” z pięcioma replikacjami.

Tabela 1. Pięć prób bootstrapowych wylosowanych ze zwracaniem
ReplikacjaWylosowane wynikiŚrednia M*M* − 5(M* − 5)²
16, 4, 6, 2, 64,8−0,20,04
27, 2, 7, 7, 65,80,80,64
36, 6, 2, 2, 64,4−0,60,36
46, 6, 6, 6, 66,01,01,00
56, 2, 2, 6, 44,0−1,01,00
Σ = 25,003,04
  1. Losowanie. Z pięciu wyników losujesz pięć, za każdym razem „oddając” wylosowany wynik z powrotem. Liczysz średnią i powtarzasz B razy.
  2. Średnia replikacji. 25,0 / 5 = 5,0. Obciążenie: 5,0 − 5 = 0.
  3. Błąd standardowy. \(SE_{\text{boot}} = \sqrt{3{,}04 / (5 - 1)} = \sqrt{0{,}76} = 0{,}87\).
  4. Więcej replikacji. Pięć to za mało. Przy 10 000 replikacjach (R, set.seed(2026)) wychodzi SEboot = 0,80, a obciążenie ≈ 0,00.
  5. Przedział percentylowy. Odcinamy 2,5% najmniejszych i 2,5% największych średnich: 95% CI [3,2; 6,4]. Poprawiony przedział BCa: [2,8; 6,2].
  6. Porównanie. Klasyczny błąd standardowy to 2 / √5 = 0,89, a przedział z rozkładu t: [2,52; 7,48]. Bootstrap daje mniej, bo traktuje próbę jak całą populację i dzieli przez n zamiast n − 1: \(\sqrt{16/5}/\sqrt{5} = 0{,}80\). Przy tak małej próbie niedoszacowuje niepewności.
Próba oryginalna 2, 4, 6, 6, 7 i pięć prób bootstrapowych z tabeli jako kropki na osi godzin snu; czerwone trójkąty pokazują średnie 5,0; 4,8; 5,8; 4,4; 6,0 i 4,0
Rys. 1. Tabela 1 na obrazku. Niebieskie kropki to oryginalna próba, szare – próby bootstrapowe. W próbie 4 pięć razy wylosowano wynik 6 h, a wynik 2 h nie trafił wcale. Średnie (czerwone trójkąty) wahają się od 4,0 do 6,0 – to właśnie ich rozrzut mierzy SEboot.
Histogram 10 000 średnich bootstrapowych z modułu eksploracji danych aplikacji SZTOS; wartości od około 2 do 7, czerwona linia średniej i zielona mediany przy 5
Rys. 2. 10 000 średnich bootstrapowych wczytanych do modułu eksploracji aplikacji SZTOS. Czerwona (średnia) i zielona (mediana) linia leżą przy 5 h i nakładają się na siebie. Granic przedziału percentylowego (3,2 i 6,4) na wykresie nie zaznaczono – poza nimi zostaje po około 2,5% średnich z każdej strony. Nierówne słupki wynikają z tego, że średnia z pięciu liczb całkowitych zmienia się skokami co 0,2 h.
Wykres punktowy błędów standardowych z 30 powtórzeń bootstrapu dla B równego 20, 100, 1000 i 10 000; rozrzut maleje wraz z B i skupia się wokół 0,80
Rys. 3. Dlaczego potrzeba wielu replikacji? Każdy bootstrap powtórzyliśmy 30 razy. Przy B = 20 błąd standardowy wahał się od 0,57 do 1,09, przy B = 10 000 – tylko od 0,79 do 0,81.

Jak zinterpretować i opisać wynik?

Twoim oszacowaniem pozostaje statystyka z oryginalnej próby, tu średnia 5 h. Bootstrap nie „poprawia” średniej, tylko mówi, jak bardzo jest niepewna. W opisie podaj liczbę replikacji, rodzaj przedziału (percentylowy, BCa) i to, że wynik zależy od ziarna losowania. Przy skośnych rozkładach i do mediacji częściej poleca się przedział BCa, który koryguje obciążenie i skośność (Efron i Tibshirani, 1993).

Zapis w stylu APA: Studenci spali przed kolokwium średnio M = 5,00 godziny; błąd standardowy oszacowany metodą bootstrap (B = 10 000) wyniósł SE = 0,80; 95% przedział percentylowy [3,20; 6,40].

Jak policzyć bootstrap w R?

library(boot)
sen <- c(6, 2, 7, 4, 6)

# 1) „ręcznie”: 5 prób bootstrapowych jak w tabeli (losowanie ze zwracaniem)
set.seed(1)
proby   <- replicate(5, sample(sen, replace = TRUE))  # kolumna = jedna próba
srednie <- colMeans(proby)
srednie
sd(srednie)                       # SE_boot z 5 replikacji (dzielenie przez B - 1)

# 2) pakiet boot: 10 000 replikacji
set.seed(2026)
b <- boot(sen, statistic = function(d, i) mean(d[i]), R = 10000)
c(srednia = b$t0, SE_boot = sd(b$t), obciazenie = mean(b$t) - b$t0)
quantile(b$t, c(0.025, 0.975))    # przedział percentylowy 95%
boot.ci(b, type = "bca")$bca[4:5] # przedział BCa 95%

# 3) dla porównania: klasyczny błąd standardowy s / sqrt(n)
sd(sen) / sqrt(5)

Wynik w konsoli R:

[1] 4.8 5.8 4.4 6.0 4.0
[1] 0.8717798
   srednia    SE_boot obciazenie 
 5.0000000  0.8000338 -0.0013600 
 2.5% 97.5% 
  3.2   6.4 
[1] 2.8 6.2
[1] 0.8944272

Ile replikacji bootstrapu wybrać?

Do samego błędu standardowego wystarczy zwykle kilkaset replikacji. Do przedziału ufności Efron i Tibshirani (1993) zalecali co najmniej 1000. Przy dzisiejszych komputerach nic nie stoi na przeszkodzie, by użyć 5000 lub 10 000 – rysunek 3 pokazuje, że wynik przestaje wtedy „skakać”. Zawsze ustaw ziarno losowania (set.seed()), żeby promotor albo recenzent mógł odtworzyć Twoje liczby.

Najczęstsze błędy

  • Przekonanie, że bootstrap ratuje bardzo małą próbę – przy kilku osobach przedziały są za wąskie.
  • Za mało replikacji i brak set.seed().
  • Losowanie bez zwracania – to tylko przetasowanie wyników, średnia się nie zmienia.
  • Bootstrapowanie danych zależnych (pomiary powtarzane, uczniowie w klasach) jak niezależnych; potrzebny jest wtedy bootstrap blokowy lub klastrowy.
  • Podawanie średniej z replikacji jako „lepszego” wyniku zamiast statystyki z oryginalnej próby.

Bibliografia

  1. Efron, B. (1979). Bootstrap methods: Another look at the jackknife. The Annals of Statistics, 7(1), 1–26. https://doi.org/10.1214/aos/1176344552
  2. Efron, B., & Tibshirani, R. J. (1993). An introduction to the bootstrap. Chapman & Hall.
  3. Davison, A. C., & Hinkley, D. V. (1997). Bootstrap methods and their application. Cambridge University Press. https://doi.org/10.1017/CBO9780511802843
  4. Canty, A., & Ripley, B. D. (2025). boot: Bootstrap functions (R package version 1.3-32) [Oprogramowanie]. https://doi.org/10.32614/CRAN.package.boot
  5. Field, A., Miles, J., & Field, Z. (2012). Discovering statistics using R. SAGE.
  6. Hryniewicz, K., & Milewska, A. (2023). SZTOS: System Zautomatyzowanego Tworzenia Opisu Statystycznego [Oprogramowanie]. SZTOS IT. https://sztos-it.com/

Zobacz też

Przygotowujesz artykuł, doktorat lub grant?

Zaplanujemy i wykonamy analizy, przygotujemy raport z tabelami, wykresami i kodem R oraz pomożemy odpowiedzieć na uwagi recenzentów dotyczące statystyki.

Na skróty