Bootstrap - mechanizm, składniki i przykłady

LUTY 2023| LJK | ~2 000 słów

Mówi się, że rozkład normalny jest najważniejszym rozkładem w statystyce tak ze względów zarówno historycznych, jak i praktycznych. Rozkład normalny został odkryty jako pierwszy (w 1733 r.), a ponadto leży u podstaw wielu metod i narzędzi statystycznych statystyki klasycznej. Przykłady? Na pewno pamiętacie przedział ufności średniej. Jego interpretacja jest nieco zawiła, ale jest to zakres, który mówi nam o precyzji naszego estymatora populacyjnej, teoretycznej średniej, jakim jest średnia arytmetyczna. W budowie przedziału ufności wykorzystuje się kwantyle rozkładu normalnego a to sugeruje, że badana zmienna ma rozkład normalny. W klasycznych testach statystycznych przyjmuje się normalność rozkładu badanej cechy (zmiennej zależnej). Widzieliśmy to w metodach badających równość średnich: w teście t-Studenta i w analizie wariancji ANOVA. Nawet w regresji liniowej jest założenie o normalności rozkładu (reszt regresji). Jak widać, rozkład normalny leży u podstaw wielu technik statystycznych, ale założenie o tym, że wiele cech ma rozkład normalny jest nadmiarowe. Do takiego stopnia, że niektórzy porównują rozkład normalny do jednorożca.

Co możemy zrobić, gdybyśmy chcieli obejść założenie o rozkładzie normalnym? Jednym z tradycyjnych rozwiązań jest zastosowanie Centralnego Twierdzenia Granicznego. CTG mówi, że dla odpowiednio licznych prób rozkład średnich jest rozkładem normalnym. W ten sposób możemy procedować z testami t-Studenta lub ANOVA, nawet gdy cecha nie ma rozkładu normalnego. Problem z nim jest taki – nigdy nie wiadomo, czy już przekroczyliśmy próg liczebności próby, od którego ono działa. Zresztą nie do wszystkiego można CTG przyłożyć – tylko tam, gdzie mamy do czynienia ze średnią, więc przedział ufności dla średniej, testy t-Studenta i ANOVA – tak, ale już nie reszty regresji. Mamy więc teoretyczne narzędzie, które jest w teorii dobre, ale bywa, że w praktyce nie zadziała. I tu jest miejsce, w którym przydaje się bootstrap.

Bootstrap (lub w rzeczowniku odsłownym: bootstrapping) to jedna z technik statystycznych oparta na repróbkowaniu, której celem jest uzyskanie rozkładu próbkowego statystyk opisowej lub testowej. Pozwala to ominąć założenia klasycznych narzędzi i testów statystycznych, aby uzyskać bardziej wiarygodne oszacowania tych statystyk.

Słowo bootstrap oznacza pętlę z tyłu wysokiego buta, która pomaga nałożyć go na stopę. To jednak za mało, aby skojarzyć samą pętlę z techniką statystyczną, która pozwala poradzić sobie z niewygodnym, czasem niemożliwym do spełnienia, założeniem. Idea nazwania bootstrapu bootstrapem wywodzi się z frazy oznaczającej wyciągnięcie się własnymi siłami z opresji. Po angielsku fraza brzmi: to pull oneself up by one's bootstraps i nawiązuje do postaci literackiej – barona Munchhausena, który, siedząc po konia w błocie, wydobył się (i swojego konia też) z tej opresji, ciągnąc właśnie za pętelki z tyłu butów. Zawsze, gdy tym myślę, to podejrzewam, że baron musiał albo mocno ścisnąć brzuch konia nogami, albo mocno trzymać za grzywę, choć to nie najbardziej nieprawdopodobna rzecz w tej opowieści.

Próbowano przełożyć bootstrap na język polski. Dowody tych prób można znaleźć w polskim piśmiennictwie: ”metody sznurowadłowe”, „metody samowsporne”. Wysiłki spełzły na niczym. Podobnie jak mamy smartfon, a nie sprytnodźwięk, tak upowszechniło się słowo bootstrap zamiast polskojęzycznych odpowiedników. Nie wiem, od czego to zależy, ale czasami udaje się zgrabnie przełożyć pojęcia naukowe na nasz język, np. integralcałka, derivativepochodna, ale nie w tym przypadku. Ktoś albo miał trochę szczęścia, albo odrobinę poezji, albo jedno i drugie. Sznurowadło? Samowsporność? Cóż, w języku polskim bootstrap chyba pozostanie bootstrapem ewentualnie boostrappingiem.

Żeby zrozumieć mechanizm bootstrapu, musisz wiedzieć o dwóch rzeczach. Po pierwsze o jednym z rodzajów losowania, po drugie o zasadzie wtyczki. Te dwa składniki pozwolą Ci bootstrapować wszystko, co bootstrapować wolno, bo nie wszystko boostrapować się daje. Rozpracujemy teraz oba te składniki, a następnie poznamy sam bootstrap.

LOSOWANIE ZE ZWRACANIEM jest jednym z rodzajów pobierania próby. Wykorzystując schemat losowanie ze zwracaniem do utworzenia nowych prób z oryginalnej, bootstrap podpada pod metody repróbkowania (resamplingowe). W takim razie omówmy, czym są te schematy losowania elementów.

Losowanie kul z urny – Wyobraź sobie pudełko z kulami oznaczonymi liczbami. Twoim zadaniem będzie wylosować kulę z pudła i zapisać numer. Nie będziesz mogła (mógł) wyciągnąć uprzednio wybranej kuli. Pudełko ma nieprzezroczyste ścianki i okrągły otwór na górze ledwo mieszczący dłoń. Ewentualnie możesz zamknąć oczy. Tak na marginesie – czy to możliwe wyobrazić sobie, że ma się zamknięte oczy? Proces wyciągania kuli z pudła jest losowy. I właśnie w ten sposób poznałaś (poznałeś) jeden ze sposobów tworzenia prób – losowanie kuli z pudła: albo urny. W podręcznikach zamiast o pudełku częściej mówi się o urnie, zwłaszcza w starszych podręcznikach. Dzisiaj słowo urna źle kojarzy się – wklep w Google ‘urna’ a prawie na pewno pierwszy wynik dotyczy ceny urn do przechowywania prochów zmarłych. Tymczasem kiedyś to słowo nie miało tak negatywnego wydźwięku i mówiono o losowaniu kul z urny. Prawdopodobnie w zadaniach w szkole funkcjonuje słowo urna w znaczeniu pojemnik. Uspokajam, na wypadek, gdyby ktoś pomyślał, że matematycy mają zwyczaj grzebania paluchami w spopielonych zwłokach. To tylko kwestia zmiany znaczenia słów. Dalej zresztą nie będzie lepiej, ponieważ są dwa rodzaje losowania kul z urny – ze zwracaniem i bez zwracania. I znów nazwy są nie są apetyczne.

LOSOWANIE KULI ZE ZWRACANIEM z powrotem do urny to takie losowanie, w którym po wyciągnięciu kuli z urny zapisujemy jej numer, po czym z powrotem wkładamy ją do urny. Losowanie kuli bez zwracania różni się od losowania kuli ze zwracaniem tylko tym, że w tym pierwszym przypadku wylosowanej kuli nie wkładamy do urny, zaś w drugim (jak sama nazwa wskazuje) zwracamy wylosowaną kulę do urny. Różnica między rodzajami losowań nie jest tylko czymś, czym można męczyć studentów, ale przekłada się na to, że podczas powtórzenia czynności losowania w przypadku losowania ze zwracaniem mamy pełen zbiór do wylosowania, a w przypadku losowania bez zwracania podczas drugiego podejścia zbiór jest już nieco zubożony (o jedną wyciągniętą kulę). Ma to ogromny wpływ na bootstrap.

Zadajmy klasyczne pytanie z rachunku prawdopodobieństwa: na ile sposobów można wyciągnąć kilka kul z urny zawierającej ileś kul. W przypadku losowania bez zwracania odpowiedź brzmi: dużo, a w przypadku losowania ze zwracaniem: cholernie dużo. Ten drugi typ losowania (ze zwracaniem) po prostu daje dużo więcej możliwości. Zauważ, że gdybyśmy chcieli losować tyle kul, ile wynosi ich liczba w urnie, to wszystkie kule wyciągniemy tylko w podczas losowaniu bez zwracania, gdzie z każdym powtórzeniem czynności liczba kul w urnie systematycznie spada (za każdym razem o jedną).

ZASADA WTYCZKI – to jest coś, co każdy robi za każdym, gdy oblicza średnią arytmetyczną. O co chodzi z tym „wtykaniem”? Wtykanie oznacza podstawianie. To jest wykorzystanie wzoru danej statystyki (opisową lub testową), np. średniej arytmetycznej z udziałem wartości z próby zamiast z populacji. Możecie teraz się zdziwić, że dlaczego wspominam o tym, jak o doniosłym fakcie. Przecież piszę o zwykłym podstawianiu wartości z próby do jakiegoś wzrostu. To, czego nie wiecie, to to, że wszystkie wzory jakie widzieliście do tej pory, zostały skonstruowane z myślą o rozkładzie teoretycznym. Sens zasady wtyczki jest uchwycony w takim dialogu:
– Chcesz znać średnią jakiejś zmiennej w populacji?
– Tak!
– To wstaw do wzoru na średnią arytmetyczną wartości z populacji.
– No, ale nie mam wszystkich wartości w populacji. Nie da się mieć całej populacji.
– To w takim razie podstaw tylko te, które masz w próbie.
I to cała zasada wtyczki opowiedziana bez używania przekleństw w stylu funkcjonały, itd.

Mając te dwa filary możemy wreszcie przejść do mechanizmu działania bootstrapu. Będzie on polegał na wielokrotnym losowaniu (ze zwracaniem) obserwacji i stosowaniu zasady wtyczki. Pozostało tylko pytanie o jakie obserwacje chodzi.

Wyobraźmy sobie, że jesteśmy w standardowej sytuacji badacza na etapie zakończenia zbierania odpowiedzi osób badanych. Nie mamy pełnego dostępu do wszystkich obserwacji – mamy jedynie pewną porcję całej populacji. Wierzymy, że jest reprezentatywną próbką, że nikt nie zrobił nam jakiegoś głupiego dowcipu i że dobór był losowy. Inaczej mówiąc, dysponujemy próbą. Od tej pory będziemy nazywać ją oryginalną próbą.
Najważniejszy moment w bootstrappingu polega na tym, aby teraz oryginalną próbę potraktować jak populację (choć jasną rzeczą nie jest ona populacją) i to na niej dokonywać operacji bootstrapowych (losowanie ze zwracaniem i zasada wtyczki).

Z oryginalnej próby będziemy losować (ze zwracaniem) kolejną próbę, którą nazwiemy próbą bootstrapową lub realizacją bootstrapową. A ponieważ w tym momencie czynimy to po raz pierwszy, to ta próba będzie miała numer jeden. Siłą rzeczy, numeracja sugeruje istnienie kolejnych prób. Możesz o tym procesie myśleć, jak o recyklingu oryginalnej próby. Przy czym, zrecyklingowana próba nie będzie identycznym klonem oryginalnej próby. Ze względu na losowanie ze zwracaniem oryginalna próba oraz bootstrapowa próba pokrywają się w 60%. Z grubsza. Z cieńsza, czyli w małych próbach nie widać takiego stopnia pokrycia.

Ile obserwacji powinna zawierać bootstrapowa próba? Tyle, ile oryginalna. A więc, jeśli zgromadziłaś/-łeś n = 56 osób badanych w oryginalnej próbie, to do jednej bootstrapowej próby trzeba będzie wykonać tyle samo, czyli n = 56 losowań ze zwracaniem. Ta czynność czasu zajęłaby trochę czasu, więc robią to za nas komputery. To jednak warunek sin equa non boostrapu. Jedna bootstrapowa próba zawiera tyle obserwacji, ile oryginalna.

Mamy bootstrapową próbę numer jeden. Zgadnij co teraz? Tak! Teraz na wartościach tej bootstrapowej próby numer jeden zastosujemy zasadę wtyczki i obliczymy wartość wybranej statystyki opisowej lub testowej. Ale to nam nie wystarczy. Aby bootstrapowanie statystyki zadziałało, należy mieć co najmniej tysiąc bootstrapowych prób. Tak więc generowanie i wtykanie odbędzie się jeszcze wiele razy. Za każdym razem będziemy losować ze zwracaniem obserwacje z oryginalnej próby, tworząc boostrapową próbę, a następnie dokonując doniosłego aktu podstawiania do wzoru.

Mając tysiąc bootstrapowych prób, a za sprawą zasady wtyczki – jeszcze tysiąc odpowiadających im rezultatów stosowania wzoru na tych bootstrapowych próbach, mamy duży zbiór zupełnie nowych wartości. Są to wartości wybranej statystyki (opisowej lub testowej) obliczone w bootstrapowych próbach. Rysując histogram częstości tych wartości, uzyskamy obraz rozkładu statystyki opisowej lub testowej - tej, do której ten wzór z zasady wtyczki należał. Tym samym, osiągniemy ostateczny cel bootstrappingu, czyli boostrapowy rozkład statystyki.

Tak, celem bootstrappingu nie jest uzyskanie pojedynczej wartości w zrecyklingowanej próbie. Celem bootstrappingu statystyki opisowej lub testowej jest uzyskanie rozkładu statystyki opisowej lub testowej. Nie jest to oczywiście idealny rozkład teoretyczny, ale jego przybliżenie.

CIEKAWOSTKA (fun fact) — Bootstrapowych prób jest wiele i siłą rzeczy część będzie taka sama, ale liczymy na to, że takich będzie niewiele. Że większość boostrapowych prób będzie różna od siebie. Każda unikalna, niepowtarzalna bootstrapowa próba nazywa się atomem. Im więcej atomów, tym lepiej.

Jest jeszcze jedna rzecz, o jakiej trzeba wiedzieć, stosując bootstrap. Wyniki będą różnić się, gdy przeprowadzisz bootstrap wielokrotnie. To dlatego, że bootstrap jest oparty na schemacie losowania ze zwracaniem. Nie ma gwarancji, że przebiegnie ono tak samo za każdym razem (w zasadzie jest gwarancja, że nie przebiegnie). To spowoduje, że gdy przeprowadzisz bootstrap drugi raz, otrzymasz nieco różny rezultat - nieco inny bootstrapowy rozkład badanej statystyki (opisowej i testowej), a co za tym idzie nieco inne wyniki analiz.

Za pomocą symulacji komputerowych zobaczymy, jak wygląda bootstrapping najbardziej podstawowej statystyki opisowej, czyli średniej arytmetycznej. Co prawda, średnia to sztandarowy przykład bootstrappingu, ale wszystkie pozostałe będą sprowadzać się do jednego – do uzyskanie bootstrapowego rozkładu statystyki opisowej lub testowej. Tutaj tą statystyką opisową jest średnia arytmetyczna. W następnym kroku boostrapowy rozkład średniej pozwoli na obliczenie przedziału ufności średniej bez korzystania z kwantyli rozkładu normalnego, Centralnego Twierdzenia Granicznego czy jakichkolwiek założeń odnośnie populacji.

W przykładzie wykorzystamy próbę złożoną z n = 30 osób. Oto wartości próby:

163.48 166.2 166.68 166.82 166.98 167.24 167.39 167.41 167.67 168.01 168.01 168.17 168.65 169.27 169.28 169.76 170.03 170.25 170.33 170.48 170.65 170.98 170.99 171.41 172.12 173.06 173.37 173.69 174.64 176.18

Są to hipotetyczne wyniki hipotetycznych osób, które hipotetycznie zmierzono pod kątem wzrostu. Nasza oryginalna próba liczy zatem trzydzieści pomiarów wzrostu (w metrach i centymetrach).

Przystępujemy zatem do bootstrappingu. To, co teraz wykonamy krok po kroku, wykonuje za nas program czy aplikacja, więc wykonamy to tylko raz. Stosując schemat losowania ze zwracaniem, tworzymy bootstrapową próbę numer 1. Oto ona:

166.2 166.68 166.82 166.82 166.98 167.24 167.24 167.39 167.39 167.41 168.17 168.65 169.27 169.28 169.76 170.25 170.33 170.33 170.33 170.48 170.48 170.48 170.98 172.12 173.37 173.69 174.64 174.64 176.18 176.18

Nic w tym, dziwnego, że obserwacje powtarzają się – w końcu jest to recyklingowana wersja oryginalnej próby. Część obserwacji jednak pozostała niewylosowana. Z udziałem wartości zmiennej Wzrost w bootstrapowej próbie, obliczymy średnią arytmetyczną – tym samym zastosujemy zasadę wtyczki.

Średnia arytmetyczna w pierwszej próbie bootstrapowej wynosi 169,99 m.

To jest pierwsza bootstrapowa średnia arytmetyczna, obliczona na podstawie bootstrapowej próby. Teraz ten krok powtórzymy jeszcze 999 razy, aby uzyskać tysiąc bootstrapowych prób, a potem tysiąc bootstrapowych średnich arytmetycznych. A oto bootstrapowy rozkład średnich.

Histogram, jaki tu widzicie, nie jest histogramem ani cechy w populacji (do niej nie mamy dostępu), ani cechy w próbie (jeśli chcesz, narysuj sobie rozkład z oryginalnej próby).

Powiecie, że jest on podobny do histogramu rozkładu normalnego. To prawda. Przewagą symulacji jest to, że dokładnie wiesz, z jakiego teoretycznego rozkładu pochodzi próba (ta oryginalna, wyjściowa). Nasza oryginalna próba – zestaw trzydziestu pomiarów wzrostu – była próbą, której wartościami rządził rozkład normalny. W tym przypadku bootstrapping średniej teoretycznie nie jest potrzebny.

Pozwól teraz, że pokażę Ci, jak wygląda bootstrapowy rozkład średnich, gdy wartościami zmiennej rządzi nie rozkład normalny, a jakiś rozkład prawostronnie skośny. Niech to będzie rozkład skośny-normalny. Jest to rozszerzenie rozkładu normalnego o skośność (tak, tak, takie rzeczy tylko w statystyce). Jeśli badana cecha ma w populacji rozkład normalny, to wygląda on tak:

Inaczej niż w symetrycznym rozkładzie normalnym, prawe ramię tego rozkładu jest dłuższe niż lewe. Oto n = 30 próba wyników pochodząca właśnie z tego rozkładu.

174.35 172.41 175.23 173.02 170.15 171.23 172.13 177.24 170.28 170.18 170.16 172.81 174.35 170.90 172.66 170.56 174.30 171.17 171.85 173.14 173.57 170.64 171.61 169.56 170.77 175.15 172.74 170.28 171.55 169.66

Sprawdźmy teraz, jak wyglądałby histogram tysiąca średnich arytmetycznych obliczonych dla tysiąca bootstrapowych prób wygenerowanych na podstawie jednej, oryginalnej, nieco skośnej próby (jej skośność wynosi 0.6).

Bootstrapowy rozkład średnich nie jest tak skośny, jak teoretyczny rozkład samej zmiennej.

Mając właśnie ten rozkład (bootstrapowy rozkład statystyki średniej), użyjemy kwantyli  boostrapowego rozkładu średnich, zamiast tradycyjnie kwantyli rozkładu normalnego. A zatem odrzucimy 2,5% obserwacji z każdej strony rozkładu i otrzymamy 95% boostrapowy przedział ufności średniej. Voila!

Przedział zwykły i bootstrapowy różnią się. Ten zwykły, korzystający z kwantyli rozkładu normalnego, przedział ufności dla średniej wynosi [171,41; 172,84]. Bootstrapowy przedział ufności dla średniej w próbie wynosi [171,48; 172,86] - jest więc nieco węższy niż ten tradycyjny. W tym przykładzie nie ma to dużego znaczenia, ale pomyśl teraz jak to może wyglądać przy testowaniu hipotez.

Ściślej rzecz ujmując, nazywa się on percentylowym bootstrapowym przedziałem ufności i nie jest jedynym sposobem wyznaczania przedziału ufności. Jest ich jeszcze kilka, ale w SPSS oprócz percentylowego dostępny jest tylko taki, który nazywa się BCa – przyspieszony skorygowany o obciążenie (bias corrected and accelerated). Nie wnikając w szczegóły, chodzi o to, że niektóre cechy są naprawdę skośne. Wówczas przedział ufności dla średniej obliczany metodą BCa jest efektywniejszy. Czyni to z niego domyślną opcję obliczania przedziałów ufności.

1 komentarz:

minus pisze...

Super,
dzięki za wpis - sporo wyjaśnia.
Polecasz jakąś polską literaturą, która definiuje Bootstrap, Boostrap Aggregation (bagging) i Boosting (w statystyce)?

Pozdrawiam!