Jak mogę skutecznie modelować sumę zmiennych losowych Bernoulliego?


38

Modeluję zmienną losową ( ), która jest sumą około 15-40k niezależnych zmiennych losowych Bernoulliego ( ), z których każda ma inne prawdopodobieństwo powodzenia ( ). Formalnie gdzie i \ Pr (X_i = 0) = 1-p_i .YXipiY=XiPr(Xi=1)=piPr(Xi=0)=1pi

Interesuje mnie szybkie odpowiadanie na zapytania, takie jak Pr(Y<=k) (gdzie podano k ).

Obecnie używam losowych symulacji, aby odpowiedzieć na takie pytania. Losowo rysuję każdy Xi zgodnie z jego pi , a następnie sumuję wszystkie Xiwartości X_i , aby uzyskać Y . Powtarzam ten proces kilka tysięcy razy i zwracam ułamek razy Pr(Yk) .

Oczywiście nie jest to całkowicie dokładne (chociaż dokładność znacznie wzrasta wraz ze wzrostem liczby symulacji). Wydaje się również, że mam wystarczającą ilość danych na temat dystrybucji, aby uniknąć symulacji użytkowania. Czy możesz wymyślić rozsądny sposób, aby uzyskać dokładne prawdopodobieństwo Pr(Yk) ?

ps

Używam Perla i R.

EDYTOWAĆ

Po odpowiedziach pomyślałem, że mogą być potrzebne pewne wyjaśnienia. Wkrótce opiszę ustawienie mojego problemu. Podano genom kołowy z obwodem ci nmapowanym do niego zestawem zakresów. Na przykład c=3*10^9i ranges={[100,200],[50,1000],[3*10^9-1,1000],...}. Uwaga: wszystkie zakresy są zamknięte (oba końce są włącznie). Pamiętaj również, że mamy do czynienia tylko z liczbami całkowitymi (całe jednostki).

Szukam regionów na okręgu, które są niedokryte przez podane nzakresy mapowane. Aby sprawdzić, czy dany zakres długości xna okręgu jest ukryty, testuję hipotezę, że nzakresy są mapowane losowo. Prawdopodobieństwo, że mapowany zakres długości w q>xpełni obejmie podany zakres długości, xwynosi (q-x)/c. Prawdopodobieństwo to staje się dość małe, gdy cjest duże i / lub qjest małe. Interesuje mnie liczba zakresów (poza n), które obejmują x. Tak Ypowstaje.

Testuję moją hipotezę zerową w porównaniu z jednostronną alternatywą (tajność). Zauważ też, że testuję wiele hipotez (różne xdługości) i na pewno to poprawię.


Czy twoje p_i jest stałe w trakcie ćwiczenia modelowania, czy może zmieniać się z jednego obliczenia do następnego?
whuber

Te p_isą naprawione.
David B,

Czy w świetle bieżących odpowiedzi można podzielić szacunki (a) sumy punktów p i (b) sumy ich kwadratów? Te wartości określają opcje.
whuber

@ whuber: różnią się one znacznie w zależności od przypadku. To nie jest jednorazowy moduł, który tworzę (niestety).
David B,

@David Ale czy nie możesz podać wskazówek, takich jak typowe zakresy? Na przykład, jeśli suma wartości p waha się między 1 a 100, to jest użyteczna informacja i sugeruje pewne wydajne rozwiązania, ale jeśli można uzyskać do 10 000, może to wykluczyć niektóre podejścia.
whuber

Odpowiedzi:


24

Jeśli często przypomina Poissona , czy próbowałeś przybliżyć go do Poissona za pomocą parametru ?λ=pi

EDYCJA : Znalazłem teoretyczny wynik, który to uzasadnia, a także nazwę dla rozkładu : nazywa się to rozkładem dwumianowym Poissona . Nierówność Le Cam mówi ci, jak blisko jej rozkład jest aproksymowany rozkładem Poissona z parametrem . Mówi ci, że jakość tego ok jest regulowana przez sumę kwadratów , parafrazując Steele (1994) . Więc jeśli wszystkie twoje są dość małe, tak jak się teraz wydaje, powinny być całkiem dobrym przybliżeniem.Yλ=pipipi

EDYCJA 2 : Jak mały jest „dość mały”? To zależy od tego, jak dobre jest to przybliżenie! Artykuł w Wikipedii na temat twierdzenia Le Cam podaje dokładną formę wyniku, o którym wspomniałem powyżej: suma bezwzględnych różnic między funkcją masy prawdopodobieństwa (pmf) i pmf powyższego rozkładu Poissona jest nie większa niż dwukrotność sumy kwadratów s. Kolejny wynik z Le Cam (1960) może być łatwiejszy w użyciu: suma ta jest również nie więcej niż 18 razy większa od . Jest jeszcze kilka takich wyników ... patrz Serfling (1978) dla jednej recenzji.Ypipi


1
+1 Niezły pomysł. Jest prawdopodobne, że niewielka mieszanka Poissonów wykonałaby dobrą robotę, w zależności od wyjaśnienia pytania.
whuber

1
Zastanawiałem się nad zasugerowaniem ujemnego rozkładu dwumianowego, który powstaje jako mieszanina Gamma-Poissona, ale który ma wariancję większą niż jego średnia, podczas gdy ten problem ma wariancję mniejszą niż jego średnia. W związku z tym nie jestem pewien, czy jakakolwiek mieszanina Poissonów będzie działać, ponieważ na pewno każda taka mieszanina będzie miała wariancję większą niż jej średnia?
onestop

@onestop Gdzie powiedziano, że wariancja jest mniejsza niż średnia? Brakowało mi tego oświadczenia.
whuber

Przepraszam, co tam, to było trochę tajemnicze, ale te komentarze nie pozwalają na tak szczegółowe opracowanie. mpiktas męska jest wariancją, która jest mniejsza niż średnia, . Tylko nieznacznie mniej, jeśli są średnio bardzo małe, więc standardowy Poisson może być wystarczająco dobry. Może powinienem rozwinąć moją odpowiedź powyżej ... ale wtedy wątek konwersacyjny staje się mylący. Bn=pi(1pi)pipi
onestop

Co rozumiesz przez ? Jak uzyskać wartości ? XiXi
David B,

11

Natknąłem się na twoje pytanie, szukając rozwiązania tego bardzo problemu. Odpowiedzi tutaj nie były do ​​końca satysfakcjonujące, ale wydaje mi się, że istnieje dość proste rozwiązanie, które zapewnia dokładną dystrybucję i jest całkiem łatwe do wykonania.

Rozkład sumy dwóch dyskretnych zmiennych losowych jest splotem ich gęstości. Więc jeśli masz gdzie znasz i , możesz obliczyć:Z=X+YP(X)P(Y)

P(Z=z)=k=P(X=k)P(Y=zk)

(Oczywiście dla Bernoulliego zmiennych losowych nie trzeba iść dość do nieskończoności).

Możesz użyć tego, aby znaleźć dokładny rozkład sumy RV. Najpierw zsumuj dwa RV razem, zwijając ich pliki PDF (np. [0,3, 0,7] * [0,6, 0,4] = [0,18, 0,54, 0,28]). Następnie przekonaj tę nową dystrybucję do następnego pliku PDF Bernoulli (np. [0,18, 0,54, 0,28] * [0,5, 0,5] = [0,09, 0,36, 0,41, 0,14]). Powtarzaj tę czynność, aż wszystkie RV zostaną dodane. I voila, wynikowy wektor jest dokładnym plikiem PDF sumy wszystkich twoich zmiennych.

Za pomocą symulacji zweryfikowałem, że daje to prawidłowe wyniki. Nie opiera się na żadnych asymptotycznych założeniach i nie ma wymagań, aby sondy Bernoulliego były małe.

Może być też jakiś sposób, aby to zrobić bardziej efektywnie niż powtarzane splot, ale nie myślałem o tym zbyt głęboko. Mam nadzieję, że to komuś pomoże!


2
Czy próbowałeś tego ze zmiennymi 40K? (Zastanawiam się, ile godzin lub dni obliczeń potrzeba ...)
whuber

5
(+1) Znalazłem sposób, aby ten pomysł zadziałał. Wymaga dwóch technik: po pierwsze, użyj FFT do zwojów; po drugie, nie rób ich sekwencyjnie, ale dziel i rządź: rób je w rozłącznych parach, a następnie rób wyniki w rozłącznych parach itp. Algorytm skaluje się teraz jako zamiast dla prawdopodobieństw. Na przykład Mathematica może obliczyć cały rozkład dla 40 000 prawdopodobieństw w zaledwie 0,4 sekundy. (1 000 000 jest obliczanych w 10,5 sekundy). Podam kod w komentarzu uzupełniającym. O(nlogn)O(n2)n
whuber

7
Oto kod Mathematica : multinomial[p_] := Module[{lc, condense}, lc = Function[{s}, ListConvolve[s[[1]], s[[2]], {1, -1}, 0]]; condense = Function[{s}, Map[lc, Partition[s, 2, 2, {1, 1}, {{1}}]]]; Flatten[NestWhile[condense, Transpose[{1 - p, p}], Length[#] > 1 &]]] Aby go zastosować, zrób coś takiego p = RandomReal[{0, 1}, 40000]; pp = multinomial[p];. Stwarza to prawdopodobieństwa, pa następnie oblicza dokładny rozkład pp. Uwaga: Kiedy średnia pnie jest ekstremalna, rozkład jest bardzo zbliżony do normalnego: prowadzi to do znacznie szybszego algorytmu.
whuber

9

@onestop zapewnia dobre referencje. Artykuł w Wikipedii o rozkładzie dwumianowym Poissona podaje rekurencyjną formułę obliczania dokładnego rozkładu prawdopodobieństwa; wymaga wysiłku . Niestety, jest to suma naprzemienna, więc będzie niestabilna numerycznie: obliczenia z arytmetyką zmiennoprzecinkową są beznadziejne. Na szczęście, gdy są małe, wystarczy obliczyć niewielką liczbę prawdopodobieństw, więc wysiłek jest naprawdę proporcjonalny do . Precyzja niezbędna do przeprowadzenia obliczeń za pomocą racjonalnej arytmetyki ( tj. Dokładnie tak , aby niestabilność numeryczna nie stanowiła problemu) rośnie na tyle wolno, że całkowity czas może nadal wynosić w przybliżeniup i O ( n log ( i p i ) ) O ( n 2 )O(n2)piO(nlog(ipi))O(n2). To wykonalne.

Jako test stworzyłem tablicę prawdopodobieństw dla różnych wartości od do , co jest rozmiarem tego problemu. Dla małych wartości (do ) czas do dokładnego obliczenia prawdopodobieństwa był w sekundach i skalowany kwadratowo, więc zaryzykowałem obliczenie dla do trzech SD powyżej średnia (prawdopodobieństwa 0, 1, ..., 22 sukcesów). Zajęło to 80 minut (z Mathematica 8), zgodnie z przewidywanym czasem. (Wynikowe prawdopodobieństwa to ułamki, których liczniki i mianowniki mają około 75 000 cyfr na sztukę!) To pokazuje, że można wykonać obliczenia.n n = 2 16 n n = 2 12 n = 2 16pi=1/(i+1)nn=216nn=212n=216

Alternatywą jest przeprowadzenie długiej symulacji (należy wykonać milion prób). Należy to zrobić tylko raz, ponieważ się nie zmieniają.pi


9

(Ponieważ takie podejście jest niezależne od innych opublikowanych rozwiązań, w tym jednego, które opublikowałem, oferuję je jako osobną odpowiedź).

Możesz obliczyć dokładny rozkład w sekundach (lub mniej), pod warunkiem, że suma wartości p jest niewielka.

Widzieliśmy już sugestie, że rozkład może być w przybliżeniu Gaussa (w niektórych scenariuszach) lub Poissona (w innych scenariuszach). W każdym razie wiemy, że jego średnia jest sumą a jej wariancja jest sumą . Dlatego rozkład będzie skoncentrowany w obrębie kilku standardowych odchyleń jego średniej, powiedzmy SD między 4 a 6 lub więcej. Dlatego musimy tylko obliczyć prawdopodobieństwo, że suma jest równa (liczba całkowita) dla do . Kiedy większośćp i σ 2 p i ( 1 - p i ) z z X k k = μ - z σ k = μ + z σ p i σ 2 μ k [ μ - z μpiσ2pi(1pi)zzXkk=μzσk=μ+zσpisą małe, jest w przybliżeniu równa (ale nieco mniejsza niż) , więc aby zachować ostrożność, możemy wykonać obliczenia dla w przedziale . Na przykład, gdy suma wynosi i wybranie aby dobrze pokryć ogony, potrzebowalibyśmy obliczeń, aby pokryć w = , czyli tylko 28 wartości.σ2μkpi9z=6K[9-6[μzμ,μ+zμ]pi9z=6k[0,27][969,9+69][0,27]

Rozkład jest obliczany rekurencyjnie . Niech będzie rozkładem sumy pierwszego tych zmiennych Bernoulliego. Dla dowolnego od do suma pierwszych zmiennych może być równa na dwa wzajemnie wykluczające się sposoby: suma pierwszych zmiennych jest równa a wynosi w przeciwnym razie suma pierwszych zmiennych jest równa a wynosi . W związku z tym i j 0 i + 1 i + 1 j i j i + 1 st 0 i j - 1 i + 1 st 1fiij0i+1i+1jiji+1st0ij1i+1st1

fi+1(j)=fi(j)(1pi+1)+fi(j1)pi+1.

Musimy przeprowadzić to obliczenie dla całki w przedziale od domax ( 0 , μ - z j μ+zmax(0,μzμ) μ+zμ.

Kiedy większość jest niewielkich (ale są nadal odróżnialne od z rozsądną precyzją), podejście to nie jest nękane ogromną kumulacją błędów zaokrągleń zmiennoprzecinkowych używanych w rozwiązaniu, które wcześniej opublikowałem. Dlatego obliczenia o zwiększonej precyzji nie są wymagane. Na przykład obliczenia o podwójnej precyzji dla tablicy prawdopodobieństw ( , wymagające obliczeń dla prawdopodobieństw sum od do 1 - p i 1 2 16 p i = 1 / ( i + 1 ) μ = 10,6676 0 31 3 × 10 - 15 z = 6 3,6 × 10 - 8pi1pi1216pi=1/(i+1)μ=10.6676031) zajęło 0,1 sekundy w przypadku Mathematica 8 i 1-2 sekundy w programie Excel 2002 (oba uzyskały te same odpowiedzi). Powtarzanie go z poczwórną precyzją (w Mathematica) zajęło około 2 sekund, ale nie zmieniło żadnej odpowiedzi więcej niż . Zakończenie rozkładu przy SD w górny ogon straciło tylko całkowitego prawdopodobieństwa.3×1015z=63.6×108

Kolejne obliczenia dla tablicy 40 000 losowych wartości podwójnej precyzji od 0 do 0,001 ( ) zajęło 0,08 sekundy dla Mathematica.μ=19.9093

Ten algorytm można zrównoleglać. Po prostu podziel zestaw na rozłączne podzbiory o mniej więcej równej wielkości, po jednym na procesor. Oblicz rozkład dla każdego podzbioru, a następnie zbierz wyniki (używając FFT, jeśli chcesz, chociaż to przyspieszenie prawdopodobnie nie jest konieczne), aby uzyskać pełną odpowiedź. To sprawia, że ​​jest praktyczny w użyciu, nawet gdy staje się duży, gdy trzeba patrzeć daleko w ogony ( duże) i / lub jest duży. μ z npiμzn

Czas dla tablicy zmiennych z procesorami jest skalowany jako . Prędkość Mathematiki jest rzędu miliona na sekundę. Na przykład, przy procesorze, zmienia się, całkowite prawdopodobieństwo wynosi , a wychodząc na standardowych odchyleń w górnym ogonie, miliona: oblicz kilka sekund czasu obliczeniowego. Jeśli to skompilujesz, możesz przyspieszyć działanie o dwa rzędy wielkości.m O ( n ( μ + z nmm=1n=20000μ=100z=6n(μ+zO(n(μ+zμ)/m)m=1n=20000μ=100z=6n(μ+zμ)/m=3.2

Nawiasem mówiąc, w tych przypadkach testowych wykresy rozkładu wyraźnie pokazały pewną dodatnią skośność: nie są one normalne.

Dla przypomnienia, oto rozwiązanie Mathematica:

pb[p_, z_] := Module[
  {\[Mu] = Total[p]},
  Fold[#1 - #2 Differences[Prepend[#1, 0]] &, 
   Prepend[ConstantArray[0, Ceiling[\[Mu] + Sqrt[\[Mu]] z]], 1], p]
  ]

( Uwaga: kodowanie kolorami stosowane przez tę stronę nie ma znaczenia dla kodu Mathematica. W szczególności szare elementy nie są komentarzami: tam cała praca jest wykonywana!)

Przykładem jego zastosowania jest

pb[RandomReal[{0, 0.001}, 40000], 8]

Edytować

RRozwiązaniem jest dziesięć razy wolniej niż Mathematica w tym przypadku testowego - być może nie zostały zakodowane go optymalnie - ale nadal wykonuje szybko (około jednej sekundy):

pb <- function(p, z) {
  mu <- sum(p)
  x <- c(1, rep(0, ceiling(mu + sqrt(mu) * z)))
  f <- function(v) {x <<- x - v * diff(c(0, x));}
  sapply(p, f); x  
}
y <- pb(runif(40000, 0, 0.001), 8)
plot(y)

Wykres PDF


8

Z innym najlepszym moim zdaniem jest normalne przybliżeniem. Niech B n = n i = 1 p i ( 1 - p i ) . NastępniepiBn=i=1npi(1pi)

an, pod warunkiem, że dla każdegoε>0

Bn1/2(i=1nXii=1npi)N(0,1),
nε>0

an, co zmiennych Bernoulliego zostanie przytrzymaj, jeśliBn

Bn1i=1nE((Xipi)21{|Xipi|>εBn1/2})0,
nBn. Jest to tak zwany warunek Lindeberga, który jest wystarczający i niezbędny do konwergencji do standardowej normy.

Aktualizacja: błąd aproksymacji można obliczyć na podstawie następujących nierówności:

w którym L N = B - 3 / 2 n n Σ i = 1 E | X i - p i | 3 iMnjest ED skalowanego ześrodkowany sumaXı.

supx|Fn(x)Φ(x)|ALn,
Ln=Bn3/2i=1nE|Xipi|3
FnXi

pipi=11+iBnlnnLn(lnn)1/2n=216


3
Nie jest to prawdą, gdy p_i zbliża się do zera, gdy rośnie. W przeciwnym razie właśnie udowodniono, że rozkład Poissona jest normalny!
whuber

1
Bnpi1/ilimBn<

@mpiktas ma rację. Tutaj analogia do rozkładu Poissona nie do końca pasuje.

Nawiasem mówiąc, tak naprawdę nie sprawdziłem tego monstrualnego stanu w drugim akapicie.

@SOL. Jay Kerns Zgadzam się, że analogia do Poissona jest niedoskonała, ale myślę, że daje dobre wskazówki. Wyobraź sobie sekwencję p, p_i = 10 ^ {- j}, gdzie j jest rzędem wielkości i (równym 1 dla i <= 10, 2 dla i <= 100 itd.). Gdy n = 10 ^ k, 90% p jest równe 10 ^ {- k}, a ich suma wygląda na Poissona z oczekiwaniem 0,9. Kolejne 9% równa się 10 ^ {1-k}, a ich suma wygląda na Poissona (z takimi samymi oczekiwaniami). Zatem rozkład wygląda w przybliżeniu jak suma zmienności k Poissona. To oczywiście nigdzie w pobliżu Normalnego. Stąd potrzeba „monstrualnego stanu”.
whuber

4

Yipiipi(1pi)YpipiYpiipiy

ppp

ppp

ppY

set.seed(1)
M <- 5000
N <- 15000
p <- rbeta(N, shape1 = 1, shape2 = 10)
Y <- replicate(M, sum(rbinom(N, size = 1, prob = p)))

Teraz spójrz na wyniki.

hist(Y)
mean(Y)
sum(p)
var(Y)
sum(p*(1 - p))

Baw się dobrze; Oczywiście zrobiłem.


pp

pα<1

2

Myślę, że inne odpowiedzi są świetne, ale nie widziałem żadnych bayesowskich metod szacowania prawdopodobieństwa. Odpowiedź nie ma jednoznacznej formy, ale prawdopodobieństwo można zasymulować za pomocą R.

Oto próba:

Xi|piBer(pi)

piBeta(α,β)

α^β^

ithpiBeta(α^,β^)XiBer(pi)NY=XiMM Ys będzie oszacowaniem gęstości Y.

Prob[Yy]=#YyM

pi


1
Dla niektórych purystów może to nie być Bayesian. W rzeczywistości jest to empiryczny Bayesian, ale jest to szybki sposób na symulację prawdopodobieństwa w R, bez uciekania się do hiper-wcześniejszego mumbo jumbo.
suncoolsu,

1
Dlaczego potrzebujesz priors, gdy podane są p_i?
whuber

pi

piαα+β(1xi)B(α+xi,β+1xi)B(α,β)=αxiβ1xiα+βpip1=p2==pn

2

Jak wspomniano w innych odpowiedziach, rozkład prawdopodobieństwa, który opisujesz, jest rozkładem dwumianowym Poissona. Wydajną metodę obliczania CDF podano w Hong, Yili. Przy obliczaniu funkcji rozkładu dla rozkładu dwumianowego Poissona .

Podejście polega na wydajnym obliczeniu DFT (dyskretnej transformaty Fouriera) funkcji charakterystycznej.

ϕ(t)=jn[(1pj)+pjeit]i=1

Algorytm to:

  1. zj(k)=1pj+pjcos(ωk)+ipjsin(ωk)ω=2πn+1
  2. xk=exp{jnlog(zj(k))}x0=1
  3. xkk=1,,[n/2]x¯k=xn+1k
  4. 1n+1<x0,x1,,xn>
  5. Weź łączną sumę wyniku, aby uzyskać CDF.

Algorytm jest dostępny w pakiecie poibin R.

Takie podejście daje znacznie lepsze wyniki niż preparaty rekurencyjne, ponieważ mają tendencję do braku stabilności numerycznej.


3
Mam dostęp tylko do streszczenia tego artykułu, ale wygląda na to, że implementuje metodę, której użyłem na stronie stats.stackexchange.com/questions/41247/... i omawia, jak działa w porównaniu z innymi metodami podanymi w tym wątku. Jeśli wiesz więcej o tym, co udało się osiągnąć w pracy, chętnie przeczytamy streszczenie.
whuber

1

YZipi

supA|P(YA)P(ZA)|min{1,1ipi}ipi2.

|Ef(Y)Ef(Z)|fA

P(YA)1(1maxipi)2P(ZA).


1
+1 Dziękujemy za przydatne informacje ilościowe na temat granic aproksymacji. Witamy na naszej stronie!
whuber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.