Gdybym chciał uzyskać prawdopodobieństwo 9 sukcesów w 16 próbach z prawdopodobieństwem 0,6 każdej próby, mógłbym zastosować rozkład dwumianowy. Czego mogę użyć, jeśli każda z 16 prób ma inne prawdopodobieństwo sukcesu?
Gdybym chciał uzyskać prawdopodobieństwo 9 sukcesów w 16 próbach z prawdopodobieństwem 0,6 każdej próby, mógłbym zastosować rozkład dwumianowy. Czego mogę użyć, jeśli każda z 16 prób ma inne prawdopodobieństwo sukcesu?
Odpowiedzi:
Jest to suma 16 (prawdopodobnie niezależnych) prób dwumianowych. Założenie niezależności pozwala nam pomnożyć prawdopodobieństwa. Stąd po dwóch próbach z prawdopodobieństwem sukcesu i szansa na sukces w obu próbach wynosi , szansa na brak sukcesu wynosi , a szansa na jeden sukces wynosi . To ostatnie wyrażenie jest ważne ze względu na fakt, że dwa sposoby osiągnięcia dokładnie jednego sukcesu wykluczają się wzajemnie: co najwyżej jeden może się zdarzyć. Oznacza to, że dodają ich prawdopodobieństwa .p 2 p 1 p 2 ( 1 - p 1 ) ( 1 - p 2 ) p 1 ( 1 - p 2 ) + ( 1 - p 1 ) p 2
Za pomocą tych dwóch zasad - mnożą się niezależne prawdopodobieństwa i wzajemnie się wykluczają - możesz wypracować odpowiedzi dla, powiedzmy, 16 prób z prawdopodobieństwami . Aby to zrobić, musisz wziąć pod uwagę wszystkie sposoby uzyskania każdej podanej liczby sukcesów (np. 9). Istnieje sposobów na osiągnięcie 9 sukcesów. Jeden z nich występuje na przykład, gdy próby 1, 2, 4, 5, 6, 11, 12, 14 i 15 są sukcesami, a inne porażkami. Sukcesy miały prawdopodobieństwa i a awarie miały prawdopodobieństwa . Pomnożenie tych 16 liczb daje szansęp 15 1 - p 3 , 1 - p 7 , … , 1 - p 13 , 1 - p 16tej konkretnej sekwencji wyników. Sumowanie tej liczby wraz z 11 439 pozostałymi takimi liczbami daje odpowiedź.
Oczywiście użyłbyś komputera.
Przy wielu ponad 16 próbach konieczne jest przybliżenie dystrybucji. Pod warunkiem, że żadne z prawdopodobieństw i stają się zbyt małe, normalne przybliżenie zwykle działa dobrze. Za pomocą tej metody można zauważyć, że oczekiwanie na sumę prób wynosi i (ponieważ próby są niezależne) wariancja wynosi . Udajesz, że rozkład sum jest normalny ze średnią i odchyleniem standardowym . Odpowiedzi wydają się być dobre do obliczania prawdopodobieństw odpowiadających odsetkowi sukcesów, który różni się 1 - p i n μ = p 1 + p 2 + ⋯ + p n σ 2 = p 1 ( 1 - p 1 ) + p 2 ( 1 - p 2 ) + ⋯ + p n ( 1 - p n ) μ σ μ σ n σ μ przez nie więcej niż kilka wielokrotności . Gdy rośnie, to przybliżenie staje się coraz bardziej dokładne i działa dla jeszcze większych wielokrotności z dala od .
Jedną alternatywą dla normalnego przybliżenia @ whubera jest użycie prawdopodobieństwa „mieszania” lub modelu hierarchicznego. Miałoby to zastosowanie, gdy są w pewien sposób podobne i można to modelować za pomocą rozkładu prawdopodobieństwa z funkcją gęstości indeksowaną przez jakiś parametr . otrzymujesz równanie całkowe:p i ∼ D i s t ( θ ) g ( p | θ ) θ
Prawdopodobieństwo dwumianowe pochodzi z ustawienia , normalne przybliżenie pochodzi z (myślę) ustawienia (z i zgodnie z definicją w odpowiedzi @ whubera), a następnie odnotowując „ ogony ”tego pliku PDF gwałtownie opadają wokół szczytu.g ( p | θ ) = g ( p | μ , σ ) = 1μσ
Można również użyć rozkładu wersji beta, który prowadziłby do prostej formy analitycznej i który nie musi cierpieć z powodu problemu „małego p”, jaki wykonuje normalne przybliżenie - ponieważ beta jest dość elastyczny. Przy użyciu rozkładu z ustawionymi przez rozwiązania następujących równań (jest to oszacowanie „minimalnej dywergencji KL”):α , β
ψ(β)-ψ(α+β)=1
Gdzie To funkcja digamma - ściśle związana z szeregami harmonicznymi.
Otrzymujemy rozkład związku „dwumianowego”:
Rozkład ten jest zbliżony do rozkładu normalnego w przypadku, gdy @whuber wskazuje - ale powinien dać rozsądne odpowiedzi dla małego i pochylonego - ale nie dla multimodalnego , ponieważ rozkład beta ma tylko jeden pik. Ale możesz to łatwo naprawić, po prostu używając dystrybucji beta dla trybówDzielimy całkę z na części, aby każdy element miał unikalny tryb (i wystarczającą ilość danych do oszacowania parametrów) i dopasował rozkład beta w każdym kawałku. następnie zsumuj wyniki, zauważając, że dokonanie zmiany zmiennych dlap i p i M M 0 < p < 1 M p = x - L L<x<U całka beta przekształca się w:
Niech ~ z funkcją generującą prawdopodobieństwo (pgf): B e r n o u l l i ( p i )
Niech oznacza sumę takich niezależnych zmiennych losowych. Następnie PGF dla sumy z takich zmiennych jest: n S n = 16
Szukamy , czyli:
WSZYSTKIE GOTOWE. Daje to dokładne rozwiązanie symboliczne jako funkcję . Odpowiedź jest dość długa, aby wydrukować ją na ekranie, ale jest całkowicie wykonalna i zajmuje mniej niż sekundy do oceny za pomocą Mathematiki na moim komputerze.1
Przykłady
Jeśli , to: P(S=9)=9647941854334808184
Jeśli , to: P(S=9)=0,000228613…
Ponad 16 prób?
Przy ponad 16 próbach nie ma potrzeby przybliżania dystrybucji. Powyższa dokładna metoda działa równie łatwo dla przykładów z powiedzmy lub . Na przykład, gdy , zajmuje mniej niż sekundy do oceny całego pmf ( tj. Przy każdej wartości ) przy użyciu poniższego kodu.n = 100 n = 50 1 s=0,1,…,50
Kod matematyczny
Biorąc pod uwagę wektor wartości , powiedz:
n = 16; pvals = Table[Subscript[p, i] -> i/(n+1), {i, n}];
... oto kod Mathematica, aby zrobić wszystko, co konieczne:
pgfS = Expand[ Product[1-(1-t)Subscript[p,i], {i, n}] /. pvals];
D[pgfS, {t, 9}]/9! /. t -> 0 // N
0,198268
Aby uzyskać cały pmf:
Table[D[pgfS, {t,s}]/s! /. t -> 0 // N, {s, 0, n}]
... lub użyj jeszcze ładniejszego i szybszego (dzięki sugestii Raya Koopmana poniżej):
CoefficientList[pgfS, t] // N
Na przykład przy , obliczenie zajmuje tylko 1 sekundę , a następnie 0,002 sekundy, aby uzyskać cały pmf przy użyciu , więc jest to niezwykle wydajne.pgfS
CoefficientList
With[{p = Range@16/17}, N@Coefficient[Times@@(1-p+p*t),t,9]]
daje prawdopodobieństwo 9 sukcesów i With[{p = Range@16/17}, N@CoefficientList[Times@@(1-p+p*t),t]]
daje prawdopodobieństwo 0, ... 16 sukcesów.
Table
Dla -values jest celowe, aby pozwolić na bardziej ogólne formy, które nie nadają się . Twoje użycie jest bardzo miłe! Dodałem kod powyżej, który ogromnie przyspiesza bezpośrednie podejście. Mimo to jest nawet szybszy niż . Nie ma to dużej różnicy dla poniżej 50 (oba podejścia zajmują tylko ułamek sekundy w obu kierunkach, aby wygenerować cały pmf), ale Twoja rzeczywista przewaga będzie również praktyczna, gdy n będzie naprawdę duże. nRange
CoefficientList
Expand
CoefficientList
ParallelTable
CoefficientList
Komentarz @wolfies, a moja próba odpowiedzi na to pytanie ujawniła ważny problem z moją drugą odpowiedzią, o której omówię później.
Przypadek szczególny (n = 16)
Istnieje dość skuteczny sposób na zakodowanie pełnej dystrybucji przy użyciu „sztuczki” polegającej na użyciu liczb podstawowych (binarnych) w obliczeniach. Wymaga tylko 4 wierszy kodu R, aby uzyskać pełny rozkład gdzie . Zasadniczo istnieją w sumie wyborów wektora które mogą przyjąć zmienne binarne . Teraz załóżmy, że każdy z osobnych wyborów numerujemy od do . To samo w sobie nie jest niczym specjalnym, ale teraz załóżmy, że reprezentujemy „liczbę wyboru” za pomocą arytmetyki podstawy 2. Teraz weź , abym mógł zapisać wszystkie opcje, aby były P r ( Z i = 1 ) = p i 2 n z = ( z 1 , … , z n ) Z i 1 2 n n = 3 2 3 = 8 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 1wybory Następnie w „liczbach zwykłych” staje się w „liczbach binarnych”. Załóżmy teraz, że zapisujemy je jako liczby czterocyfrowe, a następnie mamy . Teraz spójrz na ostatnie cyfry każdej liczby - można traktować jako itd. Liczenie w postaci binarnej zapewnia skuteczny sposób organizacji sumowania . Na szczęście istnieje funkcja R, która może wykonać dla nas tę konwersję binarną, wywołana i przekonwertujemy surową formę binarną na liczbę za pomocą , wtedy otrzymamy wektor z0001 , 0010 , 0011 , 0100 , 0101 , 0110 , 0111 , 1000 3 001 ( Z 1 = 0 , Z 2 = 0 , Z 3 = 1 )32 y = 9intToBits(x)
as.numeric(intToBits(x))
elementy, przy czym każdy element jest cyfrą podstawowej wersji 2 naszego numeru (czytany od prawej do lewej, nie od lewej do prawej). Używając tej sztuczki w połączeniu z innymi wektoryzacjami R, możemy obliczyć prawdopodobieństwo, że w 4 liniach kodu R:
exact_calc <- function(y,p){
n <- length(p)
z <- t(matrix(as.numeric(intToBits(1:2^n)),ncol=2^n))[,1:n] #don't need columns n+1,...,32 as these are always 0
pz <- z%*%log(p/(1-p))+sum(log(1-p))
ydist <- rowsum(exp(pz),rowSums(z))
return(ydist[y+1])
}
Podłączenie jednolitego przypadku i przypadek root sqrt daje pełną dystrybucję dla y jako: p ( 2 ) i = √
Tak dla specyficznego problemu z sukcesów w próbach, dokładne obliczenia są prosto do przodu. Działa to również dla wielu prawdopodobieństw do około - poza tym prawdopodobnie zaczniesz mieć problemy z pamięcią i potrzebne są różne sztuczki obliczeniowe.16 n = 20
Zauważ, że stosując mój sugerowany „rozkład beta” otrzymujemy oszacowania parametrów a to daje oszacowanie prawdopodobieństwa, które jest prawie równomierne w , dając przybliżoną wartość . Wydaje się to dziwne, biorąc pod uwagę, że gęstość rozkładu beta z ściśle zbliża się do histogramu wartości . Co poszło nie tak?y p r ( y = 9 ) = 0,06799 ≈ 1 α=β=1,3206pi
Ogólna sprawa
Omówię teraz bardziej ogólny przypadek i dlaczego moje proste przybliżenie wersji beta nie powiodło się. Zasadniczo, pisząc a następnie mieszając nad z innym rozkładem faktycznie przyjmuje ważne założenie - że możemy oszacować rzeczywiste prawdopodobieństwo za pomocą jedno prawdopodobieństwo dwumianowe - jedynym problemem, który pozostaje, jest to, której wartości użyć. Jednym ze sposobów na to jest użycie gęstości mieszania, która jest dyskretnie jednorodna w stosunku do rzeczywistego . Zastępujemy więc rozkład beta gęstością dyskretnąp p ∼ f ( θ ) p p i p ∼ B e t a ( a , b ) p ∼ ∑ 16 i = 1 w i δ ( p - p i ) p i w i p i. Następnie za pomocą aproksymacji mieszania można wyrazić słowami, wybierając wartość z prawdopodobieństwem i zakładając, że wszystkie próby mają to prawdopodobieństwo . Oczywiście, aby takie przybliżenie działało dobrze, większość wartości powinna być do siebie podobna. Zasadniczo oznacza to, że dla równomiernego rozkładu wartości @wolfies, powoduje bardzo złe przybliżenie przy użyciu rozkładu mieszania beta. To wyjaśnia również, dlaczego przybliżenie jest znacznie lepsze dla - są one mniej rozłożone. pi= √
Mieszanie wykorzystuje następnie zaobserwowane do uśrednienia wszystkich możliwych wyborów pojedynczego . Ponieważ „miksowanie” jest jak średnia ważona, nie może być nic lepszego niż użycie pojedynczego najlepszego . Jeśli więc są wystarczająco rozłożone, nie może istnieć pojedynczy który mógłby zapewnić dobre przybliżenie wszystkich . p p p i p p i
Jedną rzeczą, którą powiedziałem w mojej drugiej odpowiedzi było to, że może być lepiej użyć mieszanki rozkładów beta w ograniczonym zakresie - ale to nadal nie pomoże tutaj, ponieważ wciąż miesza się w jednym . Bardziej sensowny jest podział przedziału na kawałki i dwumian w każdym kawałku. Na przykład możemy wybrać jako nasze podziały i dopasować dziewięć dwumianów w każdym zakresie prawdopodobieństwa . Zasadniczo w ramach każdego podziału pasowalibyśmy do prostego przybliżenia, takiego jak użycie dwumianu z prawdopodobieństwem równym średniej( 0 , 1 ) ( 0 , 0,1 , 0,2 , … , 0,9 , 1 ) 0,1 p iw tym zakresie. Jeśli zmniejszymy odstępy, przybliżenie staje się arbitralnie dobre. Ale zauważ, że wszystko to sprawia, że mamy do czynienia z sumą niezależnych prób dwumianowych z różnymi prawdopodobieństwami, zamiast prób Bernoulliego . Jednak poprzednia część tej odpowiedzi pokazała, że możemy wykonać dokładne obliczenia pod warunkiem, że liczba dwumianów jest wystarczająco mała, powiedzmy 10-15 lub więcej.
Aby rozszerzyć odpowiedź opartą na bernoulli na odpowiedź dwumianową, po prostu „ponownie interpretujemy” zmienne . Po prostu stwierdzamy, że - redukuje to do pierwotnego opartego na ale teraz mówi, z których dwumianów odnoszą sukcesy. Tak więc przypadek oznacza teraz, że wszystkie „sukcesy” pochodzą z trzeciego dwumianu, a żaden z pierwszych dwóch.Z i = I ( X i > 0 ) Z i ( Z 1 = 0 , Z 2 = 0 , Z 3 = 1 )
Zauważ, że wciąż jest to „wykładnicze”, ponieważ liczba obliczeń jest podobna do gdzie jest liczbą dwumianów, a jest wielkością grupy - więc masz gdzie . Jest to jednak lepsze niż , z którymi miałbyś do czynienia przy użyciu losowych zmiennych bernoulli. Załóżmy na przykład, że podzieliliśmy prawdopodobieństw na grupy z prawdopodobieństwami w każdej grupie. Daje to obliczeń, w porównaniu do
Wybierając grup i zauważając, że limit wynosił około czyli około komórek, możemy skutecznie zastosować tę metodę, aby zwiększyć maksimum do .
Jeśli dokonamy przybliżenia crudera, obniżając , zwiększymy „możliwy” rozmiar dla . oznacza, że można mieć efektywną około . Poza tym normalne przybliżenie powinno być niezwykle dokładne.
R
które jest niezwykle wydajne i obsługuje znacznie, znacznie większe wartości , zobacz stats.stackexchange.com/a/41263 . Na przykład rozwiązał ten problem dla , dając pełny rozkład w czasie krótszym niż trzy sekundy. (Porównywalne rozwiązanie Mathematica 9 - patrz odpowiedź @wolfies - działa również dobrze dla mniejszego ale nie mogło ukończyć wykonania z tak dużą wartością .)n = 10 4 n n
(Na ogół trudny do wyodrębnienia) pmf to Kod R:
p <- seq(1, 16) / 17
cat(p, "\n")
n <- length(p)
k <- 9
S <- seq(1, n)
A <- combn(S, k)
pr <- 0
for (i in 1:choose(n, k)) {
pr <- pr + exp(sum(log(p[A[,i]])) + sum(log(1 - p[setdiff(S, A[,i])])))
}
cat("Pr(S = ", k, ") = ", pr, "\n", sep = "")
Dla używanych w odpowiedzi na wilki mamy:
Pr(S = 9) = 0.1982677
Kiedy rośnie, użyj splotu .
R
kod w rozwiązaniu tego samego problemu (z różnymi wartościami ) na stronie stats.stackexchange.com/a/41263 . Problem rozwiązano tutaj w całkowitym czasie obliczeń 0,00012 sekund (oszacowanym przez rozwiązanie go 1000 razy) w porównaniu do 0,53 sekundy (oszacowanym przez rozwiązanie go raz) dla tego kodu i 0,00058 sekund za pomocą kodu Matematyki Wolfiesa (oszacowanego przez rozwiązanie go 1000 razy). R