Bootstrap, Monte Carlo

12

W ramach pracy domowej postawiono mi następujące pytanie:

Zaprojektuj i zaimplementuj badanie symulacyjne w celu zbadania wydajności bootstrapu w celu uzyskania 95% przedziałów ufności na podstawie średniej próbki danych. Twoja implementacja może być w języku R lub SAS.

Aspekty wydajności, na które możesz chcieć spojrzeć, to pokrycie przedziału ufności (tj. Jaka część razy przedział ufności zawiera prawdziwą średnią) i zmienność Monte Carlo (tj. Jak różne są górne i dolne granice ufności między symulacjami) ”

Czy ktoś wie, jak przejść do tego aspektu wariacji Monte Carlo? Nie mogę nawet opracować algorytmu ani niczego takiego. Czy ma to związek z integracją z Monte Carlo? Dzięki!

Sarah
źródło

Odpowiedzi:

18

To zamieszanie między procedurami ładowania początkowego a procedurami Monte Carlo powtarza się, więc być może jest to tak dobre miejsce, jak każde inne, aby je rozwiązać. (Przykłady Rkodu mogą również pomóc w odrabianiu lekcji.)

Rozważ tę implementację bootstrap w R:

boot <- function(x, t) { # Exact bootstrap of procedure t on data x
    n <- length(x)       # Must lie between 2 and 7 inclusive.
    if (n > 7) {
        stop("Sample size exceeds 7; use an approximate method instead.")
    }
    p <- c(n, 1:(n-1))
    a <- rep(x, n^(n-1))
    dim(a) <- rep(n, n)
    y <- as.vector(a)
    while (n > 1) {
        n <- n-1
        a <- aperm(a, p)
        y <- cbind(as.vector(a), y)
    }
    apply(y, 1, t)
}

Szybkie spojrzenie potwierdzi, że jest to obliczenie deterministyczne : nie są generowane ani używane żadne losowe wartości. (Zostawię szczegóły jego wewnętrznego funkcjonowania zainteresowanym czytelnikom, aby sami się zorientowali).

Argumenty bootto partia danych liczbowych w tablicy xi odwołanie tdo funkcji (którą można zastosować do tablic dokładnie tak samo x), aby zwrócić pojedynczą wartość liczbową; innymi słowy, tjest statystyką . Generuje wszystkie możliwe próbki z zamianą xi stosuje się tdo każdej z nich, tworząc w ten sposób jedną liczbę dla każdej takiej próbki: to jest bootstrap w pigułce. Wartość powrotna jest tablicą reprezentujący dokładnej dystrybucji startowej z tdla próbki x.

Jako mały przykład , załóżmy średnią dla próbki x= c(1,3):

> boot(c(1,3), mean)
> [1] 1 2 2 3

Istnieją rzeczywiście cztery możliwe próbki wielkości z zamiennikiem z ; mianowicie , , i . generuje je wszystkie (w podanej kolejności) i stosuje się do każdego z nich. W tym przypadku oblicza średnią, a te okazują się odpowiednio , , i , jak pokazano na wyjściu.( 1 , 3 ) ( 1 , 1 ) ( 1 , 3 ) ( 3 , 1 ) ( 3 , 3 ) 1 2 2 32(1,3)(1,1)(1,3)(3,1)(3,3)boottt1223

To, dokąd się wybierasz, zależy od tego, jak chcesz użyć bootstrap. Pełne informacje o bootstrap jest zawarte w tej tablicy wyjściowej, więc jest to zwykle dobry pomysł, aby go wyświetlić. Oto przykład, w którym standardowe odchylenie jest z próbki :(1,3,3,4,7)

hist(boot(c(1,3,3,4,7), sd))

Histogram SD

Teraz jesteśmy przygotowani do rozmowy o symulacji Monte Carlo. Załóżmy, powiedzmy, że zamierzamy załadować 95% górny limit ufności dla SD z próbki , używając górnego 95. percentyla jego rozkładu ładowania. Jakie właściwości miałaby ta procedura? Jednym ze sposobów na to jest założenie, że próbka została uzyskana losowo z, powiedzmy, jednolitego rozkładu. (Aplikacja często wskazuje, jakie może być rozsądne założenie dystrybucyjne; tutaj arbitralnie wybrałem takie, które jest proste do obliczeń, ale nie jest łatwe do rozwiązania analitycznego.) Możemy symulować, co się stanie, pobierając taką próbkę i obliczając UCL:5

> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
     95% 
3.835870 

Wynik dla tej konkretnej próby losowej wynosi 3,83587. Jest to określone: ​​gdybyś zadzwonił bootponownie z tym samym zestawem danych, odpowiedź byłaby dokładnie taka sama. Ale jak odpowiedź może się zmienić w przypadku różnych losowych próbek? Dowiedz się, powtarzając ten proces kilka razy i rysując histogram wyników:

> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)

Histogram symulacji

Gdybyśmy mieli wykonać inny zestaw symulacji, losowe losowania byłyby inne, tworząc (nieco) inny histogram - ale nie bardzo różny od tego. Możemy go używać z pewną pewnością, aby zrozumieć, jak działa bootstrap UCL SD. Dla porównania, zauważ, że odchylenie standardowe rozkładu równomiernego (obejmującego zakres od do jak tu określono) wynosi . Jak można się spodziewać, że każdy UCL warty swojej soli, większość (trzy czwarte lub 0,75) wartości na histogramie przekracza to:10 10 / 01010/122.887

> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75

Ale to nie jest blisko nominalnego 95%, które podaliśmy (i mieliśmy nadzieję)! To jedna z wartości symulacji: porównuje nasze nadzieje z tym, co naprawdę się dzieje. (Dlaczego ta rozbieżność? Myślę, że dzieje się tak, ponieważ ładowanie SD nie działa dobrze z naprawdę małymi próbkami.)

Przejrzeć

  • Statystyki bootstrap są koncepcyjnie takie same jak każda inna statystyka, jak średnia lub odchylenie standardowe; obliczenia zajmują dużo czasu. (Zobacz komunikat ostrzegawczy w bootkodzie!)

  • Symulacja Monte-Carlo może być przydatna do badania, jak zmienia się statystyka bootstrap ze względu na losowość w uzyskiwaniu próbek. Zmienność zaobserwowana w takiej symulacji jest spowodowana zmianami w próbkach, a nie zmianami paska ładującego.

  • (Nie pokazano tutaj) Ponieważ statystyki ładowania początkowego mogą wymagać wielu obliczeń (najwyraźniej do obliczeń dla próbek o rozmiarze ), wygodne jest przybliżenie rozkładu ładowania początkowego. Zwykle odbywa się to poprzez utworzenie programu „czarnej skrzynki” w celu uzyskania losowo jednej wartości z prawdziwej dystrybucji bootstrap i wielokrotne wywoływanie tego programu. Łączna produkcja zbliżona jest do dokładnego rozkładu. Przybliżenie może się różnić ze względu na losowość w czarnej skrzynce - ale ta odmiana jest artefaktem procedury zbliżenia. Nie jest (koncepcyjnie) nierozerwalnie związany z samą procedurą ładowania początkowego. nnnn

Whuber
źródło
+1 To jest bardzo miłe. Nie sądzę, bym mógł zrobić to lepiej! Chciałbym tylko dodać, że mam kilka dokumentów na temat wydajności bootstrapu w szacowaniu poziomu błędu i przedziałach ufności przy szacowaniu wariancji. Te wyniki można znaleźć w drugim wydaniu mojej książki metod ładowania początkowego i mojej książki o ładowaniu aplikacji za pomocą aplikacji do R.
Michael R. Chernick
Łącza Amazon do książek znajdują się tutaj: amazon.com/… amazon.com/Introduction-Bootstrap-Methods-Applications/dp/…
Michael R. Chernick
Powiedziałbym tylko, że chodzi o symulację danych ze znanych rozkładów, zastosowanie interesującej procedury ładowania początkowego (np. Przedziały ufności dla parametru lub oszacowanie poziomu błędu klasyfikatora) i można ocenić, jak dobrze to robi, ponieważ znacie prawdę.
Michael R. Chernick
5

Bootstrap jest techniką Monte Carlo, ponieważ polega na losowym próbkowaniu. Jeśli uruchomisz bootstrap dwa razy na tym samym zestawie danych, otrzymasz różne odpowiedzi. Im więcej próbek użyjesz w swoim bootstrapie, tym mniej zmian otrzymasz.

Zakres odnosi się do zmienności wyników dla różnych zestawów danych z tego samego hipotetycznego rozkładu próbkowania.

Simon Byrne
źródło
dzięki, zakładam, że oznacza to po prostu wymyślenie kodu, aby sprawdzić, czy limity ufności różnią się między symulacjami!
Sarah
7
Aby być precyzyjnym (pedantycznym?), Powinniśmy wyjaśnić, że bootstrap nie jest per se techniką Monte Carlo. Jednak zwykle przybliża się ją za pomocą symulacji Monte Carlo, ponieważ często nie jest możliwe obliczenie poszczególnych interesujących ilości. Uważam również, że sformułowanie problemu jest bardzo podatne na błędną interpretację! Należy uważać, aby odróżnić błąd próbkowania od błędu przybliżenia Monte Carlo . To ostatnie jest rozsądnie oszacowane jedynie poprzez wielokrotne powtórzenie przybliżenia paska startowego MC na tej samej próbce, jak wskazałeś. :)
kardynał
1

Nie jestem też pewien, co dokładnie oznacza „ odmiana Monte Carlo ” jako taka. Z pewnością powinno być możliwe sprawdzenie, jak duża jest zmienność między iteracjami w takich rzeczach, jak wartość górnej (lub dolnej) granicy, na przykład (podpowiedź). Być może chcą tylko, abyś zrobił to dla Monte Carlo, a nie bootstrap? Nie jest to jednak wymóg, który powinienem wykonywać. Najlepiej zapytać, co oznacza to wyrażenie.

gung - Przywróć Monikę
źródło
Dzięki za pomoc! Być może na razie popatrzę na różnice między górną i dolną granicą i później zapytam o Monte Carlo. Teraz po prostu ustalę, jak sobie z tym poradzę ...
Sarah,
Jest tu kilka możliwości. Jeden jest wyższy-niższy (tj. Różnica). Moja interpretacja frazowania w pytaniu to wariacja na górze i wariacja na dole (tj. 2 różne wariacje), ale chyba nie jestem pewien. Z innej nuty, czy jest częścią twojego pytania, jak przeprowadzić symulację MC w R?
Gung - Przywróć Monikę
Doszedłem do wniosku, że szukałem również 2 różnych odmian, więc pomyśl, że spróbuję!
Sarah,
1
W porządku, zastanawiam się teraz, czy dobrze jest przejść w tym momencie, czy potrzebujesz dodatkowych wskazówek, jak podejść do tego, o co, jak sądzę, pytamy?
Gung - Przywróć Monikę
1
Czy na każdej iteracji przechowujesz górną i dolną granicę (wskazówkę)?
Gung - Przywróć Monikę
1

Rozumiem to zadanie domowe, ponieważ wymaga ono wykonania symulacji Monte Carlo dla określonej techniki statystycznej. Oznacza to, że symulujesz kilka losowych zestawów danych, stosujesz tę technikę do tych zestawów danych i przechowujesz liczby w celu późniejszego podsumowania w wygodny sposób (oznacza symulowane prawdopodobieństwa itp.)

Obecnie omawianą techniką jest bootstrap, który obejmuje symulację Monte Carlo (chyba że, jak pokazał Whuber, zostaniesz poproszony o wykonanie dokładnie bootstrapu, co jest bardzo mało prawdopodobne). Więc jako wyniki twoich symulacji, możesz przechowywać średnią próbki, odchylenie standardowe próbki i granice przedziału ufności dla średniej uzyskanej przez bootstrap.

n=10

StasK
źródło
3
Jednej rzeczy, której nauczyłem się podczas pracy z dokładnym bootstrapem, jest to, że standardowa normalna teoria CI często działa znacznie lepiej z małymi próbkami, nawet gdy są one wypaczone. Bootstrap sprawdza się w przypadku dużych próbek: teoria jest asymptotyczna, a nie dokładna.
whuber
2
@ Whuber, to ciekawa obserwacja. Zazwyczaj podkreślam asymptotyczną naturę bootstrapu (zobacz książkę Bootstrap i Edgeworth Expansions Petera Halla, aby zrozumieć dlaczego), ale tym razem nie udało się tego zrobić.
StasK,