Wie kann ich die Summe der Bernoulli-Zufallsvariablen effizient modellieren?


38

Ich modelliere eine Zufallsvariable ( ), die die Summe einiger ~ 15-40k unabhängiger Bernoulli-Zufallsvariablen ( ) mit jeweils unterschiedlicher Erfolgswahrscheinlichkeit ( ) ist. Formal ist wobei und \ Pr (X_i = 0) = 1-p_i .YXipiY=XiPr(Xi=1)=piPr(Xi=0)=1pi

Ich bin daran interessiert, Anfragen wie Pr(Y<=k) (wobei k angegeben ist) schnell zu beantworten .

Momentan benutze ich Zufallssimulationen, um solche Fragen zu beantworten. Ich zeichne jedes X_i zufällig Xigemäß seinem pi und summiere dann alle Xi Werte, um Y . Ich wiederhole diesen Vorgang einige tausend Mal und gebe den Bruchteil der Male Pr(Yk) .

Offensichtlich ist dies nicht ganz genau (obwohl die Genauigkeit mit zunehmender Anzahl von Simulationen stark zunimmt). Außerdem habe ich anscheinend genügend Daten über die Distribution, um die Nutzungssimulationen zu vermeiden. Können Sie sich einen vernünftigen Weg vorstellen, um die genaue Wahrscheinlichkeit Pr(Yk) ?

ps

Ich benutze Perl & R.

BEARBEITEN

Im Anschluss an die Antworten dachte ich, dass einige Klarstellungen erforderlich sein könnten. Ich werde kurz die Einstellung meines Problems beschreiben. Gegeben ist ein kreisförmiges Genom mit Umfang cund einer Reihe von ihm zugeordneten nBereichen. Zum Beispiel c=3*10^9und ranges={[100,200],[50,1000],[3*10^9-1,1000],...}. Beachten Sie, dass alle Bereiche geschlossen sind (beide Enden sind inklusive). Beachten Sie auch, dass wir nur Ganzzahlen (ganze Einheiten) behandeln.

Ich suche nach Regionen im Kreis, die von den angegebenen nkartierten Bereichen nicht abgedeckt werden. Um zu testen, ob ein gegebener Längenbereich xauf dem Kreis nicht abgedeckt ist, teste ich die Hypothese, dass die nBereiche zufällig zugeordnet werden. Die Wahrscheinlichkeit, dass ein zugeordneter Längenbereich q>xden angegebenen Längenbereich vollständig abdeckt, xist (q-x)/c. Diese Wahrscheinlichkeit wird ziemlich klein, wenn sie cgroß und / oder qklein ist. Was mich interessiert, ist die Anzahl der Bereiche (außerhalb n), die abdecken x. So Yentsteht.

Ich teste meine Nullhypothese gegen eine einseitige Alternative (Unterdeckung). Beachten Sie auch, dass ich mehrere Hypothesen (unterschiedliche xLängen) teste und dies sicher korrigiere.


Sind Ihre p_i während der Modellierungsübung festgelegt oder können sie sich von einer Berechnung zur nächsten ändern?
whuber

Die p_is sind behoben.
David B

Können Sie in Anbetracht der aktuellen Antworten die Schätzungen von (a) der Summe der p und (b) der Summe ihrer Quadrate teilen? Diese Werte bestimmen Ihre Optionen.
whuber

@whuber: diese variieren stark zwischen den Fällen. Es ist kein einmaliges Modul, das ich (leider) erstelle.
David B

@David Kannst du dir aber keine Anleitung geben, wie zum Beispiel typische Bereiche? Wenn zum Beispiel die Summe der p zwischen 1 und 100 liegt, sind dies nützliche Informationen und Vorschläge für effiziente Lösungen. Wenn sie jedoch bis zu 10.000 erreichen, können einige Ansätze ausgeschlossen werden.
whuber

Antworten:


24

Wenn es oft einem Poisson ähnelt , haben Sie versucht, es durch ein Poisson mit dem Parameter approximieren ?λ=pi

EDIT : Ich habe ein theoretisches Ergebnis gefunden, um dies zu rechtfertigen, sowie einen Namen für die Verteilung von : Es heißt die Poisson-Binomialverteilung . Die Ungleichung von Le Cam gibt an , wie genau die Verteilung durch die Verteilung eines Poisson mit dem Parameter angenähert wird . Es sagt Ihnen, dass die Qualität dieser approx durch die Summe der Quadrate der s bestimmt wird, um Steele (1994) zu paraphrasieren . Wenn also alle Ihre relativ klein sind, wie es jetzt scheint, sollte es eine ziemlich gute Annäherung sein.λ = Σ p i p i p iYλ=pipipi

EDIT 2 : Wie klein ist "vernünftig klein"? Nun, das hängt davon ab, wie gut die Approximation sein muss! Der Wikipedia-Artikel zum Satz von Le Cam gibt die genaue Form des oben genannten Ergebnisses an: Die Summe der absoluten Differenzen zwischen der Wahrscheinlichkeitsmassenfunktion (pmf) von und der pmf der obigen Poisson-Verteilung ist nicht mehr als die doppelte Summe der Quadrate der s. Ein weiteres Ergebnis von Le Cam (1960) ist möglicherweise einfacher zu verwenden: Diese Summe ist auch nicht mehr als das 18-fache des größten . Es gibt noch eine ganze Reihe solcher Ergebnisse ... siehe Serfling (1978) für eine Übersicht.p i p iYpipi


1
+1 Keine schlechte Idee. Es ist wahrscheinlich, dass eine kleine Mischung aus Poissons gute Arbeit leistet, je nachdem, wie die Frage geklärt ist.
whuber

1
Ich habe darüber nachgedacht, eine negative Binomialverteilung vorzuschlagen, die als Gamma-Poisson-Mischung entsteht, aber eine Varianz aufweist, die größer als der Mittelwert ist, während dieses Problem eine Varianz aufweist, die kleiner als der Mittelwert ist. Aufgrund dessen bin ich mir nicht sicher, ob eine Mischung von Poissons funktioniert, da diese Mischung mit Sicherheit eine Varianz aufweist, die größer als der Mittelwert ist.
am

@onestop Wo wurde gesagt, dass die Varianz kleiner als der Mittelwert ist? Ich habe diese Aussage verpasst.
whuber

Sorry, aber das war ein bisschen kryptisch. mpiktas ' ist die Varianz, die kleiner ist als der Mittelwert . Nur etwas weniger, wenn die im Durchschnitt sehr klein sind. Vielleicht sollte ich meine Antwort oben erweitern ... aber dann wird der Gesprächsthread verwirrend. p i p iBn=pi(1pi)pipi
am

Was meinst du mit ? Wie erhalte ich Werte? X iXiXi
David B

11

Ich bin auf Ihre Frage gestoßen, als ich nach einer Lösung für dieses Problem gesucht habe. Ich war mit den Antworten hier nicht sonderlich zufrieden, aber ich denke, es gibt eine ziemlich einfache Lösung, die Ihnen die genaue Verteilung liefert und die ziemlich gut nachvollziehbar ist.

Die Verteilung der Summe zweier diskreter Zufallsvariablen ist die Faltung ihrer Dichte. Wenn Sie also und und , können Sie Folgendes berechnen:P ( X ) P ( Y )Z=X+YP(X)P(Y)

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

(Natürlich für Bernoulli - Zufallsvariablen brauchen Sie nicht zu gehen ganz bis ins Unendliche.)

Auf diese Weise können Sie die genaue Verteilung der Summe Ihrer Wohnmobile ermitteln. Summieren Sie zunächst zwei der RVs, indem Sie ihre PDFs zusammenfalten (z. B. [0,3, 0,7] * [0,6, 0,4] = [0,18, 0,54, 0,28]). Entwickeln Sie dann diese neue Verteilung mit Ihrem nächsten Bernoulli-PDF (z. B. [0,18, 0,54, 0,28] * [0,5, 0,5] = [0,09, 0,36, 0,41, 0,14]). Wiederholen Sie diesen Vorgang, bis alle Wohnmobile hinzugefügt wurden. Und voila, der resultierende Vektor ist das genaue PDF der Summe aller Ihrer Variablen.

Ich habe mit Simulationen überprüft, dass dies zu den richtigen Ergebnissen führt. Es beruht nicht auf asymptotischen Annahmen und es gibt keine Anforderungen, dass die Bernoulli-Probs klein sind.

Es kann auch einen Weg geben, dies effizienter zu tun als wiederholte Faltung, aber ich habe nicht sehr tief darüber nachgedacht. Ich hoffe das ist hilfreich für jemanden!


2
Haben Sie dies mit 40K Variablen versucht? (Ich frage mich, wie viele Stunden oder Tage der Berechnung es dauert ...)
whuber

5
(+1) Ich habe einen Weg gefunden, diese Idee umzusetzen. Es sind zwei Techniken erforderlich: Erstens FFT für die Windungen verwenden; zweitens, mach sie nicht nacheinander, sondern teile und erobere: mach sie in disjunkten Paaren, dann mach die Ergebnisse in disjunkten Paaren usw. Der Algorithmus skaliert jetzt als anstatt als für Wahrscheinlichkeiten. Beispielsweise kann Mathematica die gesamte Verteilung für 40.000 Wahrscheinlichkeiten in nur 0,4 Sekunden berechnen . (1.000.000 werden in 10,5 Sekunden berechnet.) Ich werde Code in einem nachfolgenden Kommentar bereitstellen. O ( n 2 ) nO(nlogn)O(n2)n
whuber

7
Hier ist der Mathematica- Code: 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 &]]] Um ihn anzuwenden, machen Sie so etwas wie p = RandomReal[{0, 1}, 40000]; pp = multinomial[p];. Dies erzeugt die Wahrscheinlichkeiten pund berechnet dann die genaue Verteilung pp. NB Wenn der Mittelwert von pnicht extrem ist, ist die Verteilung sehr nahe am Normalwert: Das führt zu einem viel schnelleren Algorithmus.
whuber

9

@onestop bietet gute Referenzen. Der Wikipedia-Artikel über die Poisson-Binomialverteilung enthält eine rekursive Formel zur Berechnung der genauen Wahrscheinlichkeitsverteilung. es erfordert Aufwand. Leider ist es eine alternierende Summe, daher wird es numerisch instabil: Es ist hoffnungslos, diese Berechnung mit Gleitkomma-Arithmetik durchzuführen. Glücklicherweise müssen Sie, wenn die klein sind, nur eine kleine Anzahl von Wahrscheinlichkeiten berechnen, sodass der Aufwand wirklich proportional zu . Die Genauigkeit, die erforderlich ist, um die Berechnung mit rationaler Arithmetik durchzuführen ( dh genau, damit die numerische Instabilität kein Problem darstellt), wächst langsam genug, dass das Gesamttiming immer noch ungefährp i O ( n log ( i p i ) ) O ( n 2 )O(n2)piO(nlog(ipi))O(n2). Das ist machbar.

Als Test habe ich ein Array von Wahrscheinlichkeiten für verschiedene Werte von bis , was der Größe dieses Problems entspricht. Für kleine Werte von (bis zu ) wurde der Zeitpunkt für die genaue Berechnung der Wahrscheinlichkeiten in Sekunden angegeben und quadratisch skaliert. Daher habe ich eine Berechnung für auf drei SDs oberhalb von gewagt Mittelwert (Wahrscheinlichkeiten für 0, 1, ..., 22 Erfolge). Es dauerte 80 Minuten (mit Mathematica 8), entsprechend der vorhergesagten Zeit. (Die sich ergebenden Wahrscheinlichkeiten sind Brüche, deren Zähler und Nenner jeweils etwa 75.000 Stellen haben!) Dies zeigt, dass die Berechnung durchgeführt werden kann.n n = 2 16 n n = 2 12 n = 2 16pi=1/(i+1)nn=216nn=212n=216

Eine Alternative ist die Durchführung einer langen Simulation (eine Million Versuche sollten durchgeführt werden). Es muss nur einmal gemacht werden, da sich das nicht ändert.pi


9

(Da dieser Ansatz unabhängig von den anderen veröffentlichten Lösungen ist, einschließlich der von mir veröffentlichten, biete ich ihn als separate Antwort an.)

Sie können die genaue Verteilung in Sekunden (oder weniger) berechnen, sofern die Summe der ps klein ist.

Wir haben bereits Vorschläge gesehen, dass die Verteilung ungefähr Gauß (unter bestimmten Szenarien) oder Poisson (unter anderen Szenarien) sein könnte. In beiden Fällen wissen wir, dass der Mittelwert die Summe von und die Varianz die Summe von . Daher wird sich die Verteilung auf einige Standardabweichungen ihres Mittelwerts konzentrieren, beispielsweise auf SDs mit zwischen 4 und 6 oder so ungefähr . Daher müssen wir nur die Wahrscheinlichkeit berechnen, dass die Summe gleich (eine ganze Zahl) für bis . Wenn die meisten derp 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σpisind klein, ist ungefähr gleich (aber etwas kleiner als) . Um konservativ zu sein, können wir die Berechnung für im Intervall . Wenn zum Beispiel die Summe von gleich und gewählt wird, um die Schwänze gut abzudecken, müsste die Berechnung in abdecken = , das sind nur 28 Werte.σ2μkpi9z=6k[9-6[μzμ,μ+zμ]pi9z=6k[0,27][969,9+69][0,27]

Die Verteilung wird rekursiv berechnet . Sei die Verteilung der Summe der ersten dieser Bernoulli-Variablen. Für jedes von bis kann die Summe der ersten Variablen auf zwei sich gegenseitig ausschließende Arten gleich sein: Die Summe der ersten Variablen ist gleich und das ist oder die Summe der ersten Variablen ist gleich und das ist . Deshalb 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.

Wir müssen diese Berechnung nur für das Integral im Intervall von bismax ( 0 , μ - z j μ+zmax(0,μzμ) μ+zμ.

Wenn die meisten winzig sind (aber die immer noch mit angemessener Genauigkeit von unterscheidbar sind ), ist dieser Ansatz nicht von der großen Anhäufung von Gleitkomma-Rundungsfehlern geplagt, die in der zuvor veröffentlichten Lösung verwendet wurden. Daher ist keine Berechnung mit erweiterter Genauigkeit erforderlich. Beispiel: Eine Berechnung mit doppelter Genauigkeit für ein Array von Wahrscheinlichkeiten ( ) erfordert Berechnungen für Wahrscheinlichkeiten von Summen zwischen und 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) dauerte 0,1 Sekunden mit Mathematica 8 und 1-2 Sekunden mit Excel 2002 (beide erhielten die gleichen Antworten). Das Wiederholen mit vierfacher Genauigkeit (in Mathematica) dauerte ungefähr 2 Sekunden, änderte jedoch keine Antwort um mehr als das . Das Beenden der Verteilung bei SDs in den oberen Schwanz verlor nur der Gesamtwahrscheinlichkeit.3×1015z=63.6×108

Eine weitere Berechnung für ein Array von 40.000 Zufallswerten mit doppelter Genauigkeit zwischen 0 und 0,001 ( ) dauerte mit Mathematica 0,08 Sekunden.μ=19.9093

Dieser Algorithmus ist parallelisierbar. Teilen Sie die Menge von einfach in disjunkte Teilmengen von ungefähr gleicher Größe auf, eine pro Prozessor. Berechnen Sie die Verteilung für jede Teilmenge und falten Sie dann die Ergebnisse zusammen (verwenden Sie FFT, wenn Sie möchten, obwohl diese Beschleunigung wahrscheinlich nicht erforderlich ist), um die vollständige Antwort zu erhalten. Dies macht es praktisch, auch zu verwenden, wenn groß wird, wenn Sie weit in die Schwänze schauen müssen ( groß) und / oder groß ist. μ z npiμzn

Das Timing für ein Array von Variablen mit Prozessoren skaliert als . Die Geschwindigkeit von Mathematica liegt in der Größenordnung von einer Million pro Sekunde. Zum Beispiel mit Prozessor, Variationen, eine Gesamtwahrscheinlichkeit von und Ausgehen zu Standardabweichungen in den oberen Schwanz, Millionen: einige Sekunden Rechenzeit. Wenn Sie dies kompilieren, können Sie die Leistung um zwei Größenordnungen beschleunigen.m O ( n ( μ + z nmm=1n=20000μ=100z=6n(μ+zO(n(μ+zμ)/m)m=1n=20000μ=100z=6n(μ+zμ)/m=3.2

Übrigens zeigten in diesen Testfällen Diagramme der Verteilung eindeutig eine positive Schiefe: Sie sind nicht normal.

Für das Protokoll ist hier eine Mathematica-Lösung:

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

( Hinweis: Die Farbcodierung, die von dieser Site angewendet wird, ist für Mathematica-Code bedeutungslos. Insbesondere sind die grauen Elemente keine Kommentare: Hier wird die gesamte Arbeit erledigt!)

Ein Beispiel für seine Verwendung ist

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

Bearbeiten

Eine RLösung ist in diesem Testfall zehnmal langsamer als Mathematica - vielleicht habe ich sie nicht optimal codiert - aber sie wird trotzdem schnell ausgeführt (ungefähr eine Sekunde):

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)

Plot von PDF


8

Mit verschiedenen Ihre beste Wette, denke ich, die normale Annäherung. Sei . DannB n = n i = 1 p i ( 1 - p i )piBn=i=1npi(1pi)

Bn1/2(i=1nXii=1npi)N(0,1),
als , vorausgesetzt, dass für jedesnε>0

Bn1i=1nE((Xipi)21{|Xipi|>εBn1/2})0,
as , was für Bernoulli-Variablen gilt, wenn . Dies ist die sogenannte Lindeberg-Bedingung, die ausreicht und für die Konvergenz zur Normnormalität erforderlich ist.nBn

Update: Der Approximationsfehler kann aus folgender Ungleichung berechnet werden:

supx|Fn(x)Φ(x)|ALn,
wobei und ist der cdf der skalierten und zentrierten Summe von .
Ln=Bn3/2i=1nE|Xipi|3
FnXi

Wie bereits erwähnt, kann die Konvergenz bei schlecht verhaltenem langsam sein . Für wir und . Wenn wir dann wir, dass die maximale Abweichung von der normalen Standard-cdf satte 0,3 beträgt.pipi=11+iBnlnnLn(lnn)1/2n=216


3
Dies ist nicht wahr, wenn sich p_i mit zunehmendem i Null nähert. Ansonsten haben Sie gerade bewiesen, dass die Poisson-Verteilung Normal ist!
whuber

1
Deshalb muss es . Wenn schneller als Null geht , ist . Bnpi1/ilimBn<
mpiktas

@mpiktas ist richtig. Die Analogie zur Poisson-Verteilung passt hier nicht ganz.

Übrigens habe ich diesen monströsen Zustand im zweiten Absatz nicht wirklich überprüft.

@G. Jay Kerns Ich stimme zu, dass die Analogie zum Poisson nicht perfekt ist, aber ich denke, dass sie eine gute Anleitung gibt. Stellen Sie sich eine Folge von ps vor, p_i = 10 ^ {- j}, wobei j die Größenordnung von i ist (gleich 1 für i <= 10, bis 2 für i <= 100 usw.). Wenn n = 10 ^ k ist, sind 90% der p gleich 10 ^ {- k} und ihre Summe sieht mit der Erwartung 0,9 nach Poisson aus. Weitere 9% entsprechen 10 ^ {1-k} und ihre Summe sieht aus wie Poisson (mit der gleichen Erwartung). Somit sieht die Verteilung ungefähr aus wie eine Summe von k Poissonvariablen. Es ist offensichtlich bei weitem nicht normal. Woher kommt das Bedürfnis nach dem "monströsen Zustand"?
Whuber

4

Nun, basierend auf Ihrer Beschreibung und der Diskussion in den Kommentaren ist klar, dass Mittelwert und Varianz . Die Form der Verteilung von hängt letztendlich vom Verhalten von . Für ein geeignetes "nettes" (in dem Sinne, dass nicht zu viele von ihnen wirklich nahe bei Null sind) ist die Verteilung von ungefähr normal (zentriert rechts bei ). Aber wenn in Richtung Null geht, wird die Verteilung nach links verschoben und wenn sie sich gegen dasi p iYipiipi(1pi)p i p i Y p i i p i yYpipiYpiipiy-Achse es wird viel weniger normal aussehen und viel mehr Poisson, wie @whuber und @onestop erwähnt haben.

Von Ihrem Kommentar „die Verteilung sieht Poisson“ Ich vermute , dass dieser letzteren Fall ist das, was passiert ist , aber ohne irgendeine Art von visueller Anzeige oder zusammenfassenden Statistiken über die nicht wirklich sicher sein ‚s. Beachten Sie jedoch, wie @whuber tat, dass mit ausreichend pathologische Verhalten des ‚s können Sie alle Arten von spooky Dinge passieren, wie Grenzen , die Mischungsverteilungen sind. Ich bezweifle , dass hier der Fall ist, aber wieder, es hängt wirklich davon ab , was Ihre ‚s tun.p pppp

In Bezug auf die ursprüngliche Frage „wie effizient zu modellieren“, werde ich für Sie ein hierarchisches Modell vorschlagen , aber es ist nicht wirklich sinnvoll, wenn die ‚s Konstanten festgelegt sind. Kurz gesagt, werfen Sie einen Blick auf ein Histogramm der ‚s und eine erste Vermutung auf Basis machen , was Sie sehen. Ich würde die Antwort von @mpiktas (und durch Erweiterung @csgillespie) , wenn Ihr empfehlen ‚s auch nicht nach links gedrängt, und ich würde die Antwort von @onestop empfehlen , wenn sie überfüllt links-ly sind.p pppp

Übrigens, hier ist der R-Code, den ich beim Herumspielen mit diesem Problem verwendet habe: Der Code ist nicht wirklich angemessen, wenn Ihre zu klein sind, aber es sollte einfach sein, verschiedene Modelle für (einschließlich Spuk- Verrückte), um zu sehen, was mit der endgültigen Verteilung von passiert .p yppY

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

Schauen Sie sich nun die Ergebnisse an.

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

Habe Spaß; Ich habe es wirklich getan.


Warum sagen Sie „der Code nicht wirklich angemessen ist, wenn Ihr s zu klein sind“? Scheint für mich in Ordnung zu sein, zB mit shape1 = 1, shape2 = 999, was einen Mittelwert von 0,001 ergibt . pp
am

@onestop, was ich meinte, war die spezielle Auswahl von (1,10), die oben geschrieben wurde, gibt keine Werte von , die sehr klein sind, bis zu dem Punkt, dass die normale Annäherung ziemlich gut aussieht. Wenn jemand wollte, dass der Poisson herauskommt, müsste er etwas anderes ausprobieren; es hört sich so an, als ob Ihre Wahl (1.999) einen guten Job macht, ja? Ich hatte auch darüber nachgedacht, zu machen , sagen wir mal 0,25, aber das habe ich nicht versucht. pα<1

2

Ich denke, andere Antworten sind großartig, aber ich habe keine Bayes'schen Methoden gesehen, um Ihre Wahrscheinlichkeit abzuschätzen. Die Antwort hat keine explizite Form, aber die Wahrscheinlichkeit kann mit R simuliert werden.

Hier ist der Versuch:

Xi|piBer(pi)

piBeta(α,β)

Mithilfe von Wikipedia können wir Schätzungen von und (siehe Abschnitt Parameterschätzung).α^β^

Jetzt können Sie Draws für den -Schritt generieren, aus generieren und dann aus generieren . Nachdem Sie dies mal getan haben, können Sie . Dies ist ein einziger Zyklus zur Erzeugung von Y. Mache dies (groß), und das Histogramm für Ys ist die Schätzung der Dichte von Y.ithpiBeta(α^,β^)XiBer(pi)NY=XiMM

Prob[Yy]=#YyM

Diese Analyse ist nur gültig, wenn nicht festgelegt ist. piDies ist hier nicht der Fall. Aber ich werde es hier lassen, falls jemand eine ähnliche Frage hat.


1
Für einige Puristen ist dies möglicherweise nicht bayesianisch. Dies ist eigentlich ein empirischer Bayesianer, aber es ist eine schnelle Methode, um Ihre Wahrscheinlichkeiten in R zu simulieren, ohne auf hyperpriores Mumbo-Jumbo zurückzugreifen.
Suncoolsu

1
Warum brauchen Sie Priors, wenn die p_i gegeben sind?
whuber

@whuber. Danke, du hast recht. Ich habe den festen Teil verpasst. Ich dachte, David verwendet nur den Wert als (qx) / c und ist nicht festgelegt. Ich werde meine Antwort bearbeiten. pi
Suncoolsu

@suncoolsu - Beachten Sie, dass eine "Beta-Bernoulli" -Distribution nur eine andere Bernoulli-Distribution ist, die jedoch . Dies ist der Fall, weil . Sie also über mischen, wenden Sie hier die binomische Approximation an: . piαα+β(1xi)B(α+xi,β+1xi)B(α,β)=αxiβ1xiα+βpip1=p2==pn
Wahrscheinlichkeit

2

Wie bereits in anderen Antworten erwähnt, ist die von Ihnen beschriebene Wahrscheinlichkeitsverteilung die Poisson-Binomialverteilung. Eine effiziente Methode zur Berechnung der CDF ist in Hong, Yili, angegeben. Bei der Berechnung der Verteilungsfunktion für die Poisson-Binomialverteilung .

Der Ansatz besteht darin, die DFT (diskrete Fourier-Transformation) der charakteristischen Funktion effizient zu berechnen.

Die charakteristische Funktion der Poisson-Binomialverteilung ergibt sich aus ( ).ϕ(t)=jn[(1pj)+pjeit]i=1

Der Algorithmus ist:

  1. Sei , für .zj(k)=1pj+pjcos(ωk)+ipjsin(ωk)ω=2πn+1
  2. Definiere , definiere .xk=exp{jnlog(zj(k))}x0=1
  3. Berechne für . Verwenden Sie Symmetrie , um den Rest zu erhalten.xkk=1,,[n/2]x¯k=xn+1k
  4. Wenden Sie die FFT auf den Vektor .1n+1<x0,x1,,xn>
  5. Nimm die kumulative Summe der Ergebnisse, um die CDF zu erhalten.

Der Algorithmus ist im Paket poibin R enthalten.

Dieser Ansatz liefert viel bessere Ergebnisse als die rekursiven Formulierungen, da ihnen die numerische Stabilität fehlt.


3
Ich habe nur Zugriff auf die Zusammenfassung dieses Dokuments , aber es hört sich so an, als würde die unter stats.stackexchange.com/questions/41247/… verwendete Methode implementiert, und es wird erläutert, wie sie im Vergleich zu den anderen in diesem Thread angegebenen Methoden funktioniert. Wenn Sie mehr darüber wissen, was der Artikel geleistet hat, lesen Sie bitte eine Zusammenfassung.
whuber

1

Ich würde vorschlagen, Poisson-Näherung anzuwenden. Es ist allgemein bekannt (siehe AD Barbour, L. Holst und S. Janson: Poisson Approximation), dass die zwischen und einem rv mit Poisson-Verteilung mit dem Parameter klein ist: Es gibt auch Grenzen in Bezug auf Informationsdivergenz (die Kullback-Leibler-Distanz, wie Sie P. Harremos sehen können: Konvergenz zur Poisson-Verteilung in Informationsdivergenz. Preprint Nr. 2, Feb. 2003, Mathematische Fakultät, Universität Kopenhagen. Http: //www.harremoes.dk/Peter/poisprep.pdfYZipi

supA|P(YA)P(ZA)|min{1,1ipi}ipi2.
und andere Veröffentlichungen von P.Harremoёs), Chi-Quadrat-Abstand (siehe Borisov und Vorozheikin https://link.springer.com/article/10.1007%2Fs11202-008-0002-3 ) und einige andere Abstände.

Für die Genauigkeit der Approximation für unbeschränkte Funktionen können Sie Borisov und Ruzankin sehen https://projecteuclid.org/euclid.aop/1039548369 . Außerdem enthält dieses Papier eine einfache Schranke für Wahrscheinlichkeiten: Für alle haben wir |Ef(Y)Ef(Z)|fA

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


1
+1 Vielen Dank für die nützlichen quantitativen Informationen zu den Approximationsgrenzen. Willkommen auf unserer Webseite!
whuber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.