2010-12-10 13 views
3

Ich benutze Perl, um eine Zufallsvariable zu modellieren (Y), die die Summe einiger ~ 15-40k unabhängiger Bernoulli zufälliger Variablen (X_i) ist, jedes mit einer anderen Erfolgswahrscheinlichkeit (p_i). Formal Y=Sum{X_i} wo Pr(X_i=1)=p_i und Pr(X_i=0)=1-p_i.Wie kann ich die Summe der Bernoullischen Zufallsvariablen effizient modellieren?

Ich bin interessiert an Abfragen schnell wie Pr(Y<=k) beantworten (wo k angegeben ist).

Momentan verwende ich zufällige Simulationen, um solche Anfragen zu beantworten. Ich zeichne zufällig jede X_i entsprechend ihrer p_i, dann summiere alle X_i Werte, um Y' zu erhalten. Ich wiederhole diesen Vorgang ein paar tausend Mal und gebe den Bruchteil der Zeiten Pr(Y'<=k) zurück.

Offensichtlich ist dies nicht vollständig genau, obwohl die Genauigkeit stark zunimmt, da die Anzahl der Simulationen, die ich verwende, zunimmt.

Können Sie sich einen vernünftigen Weg vorstellen, um die genaue Wahrscheinlichkeit zu erhalten?

+0

Interessante Frage, aber für die _exact_ Wahrscheinlichkeit müssen Sie entweder die Formel in einem Statistikbuch finden oder sie selbst mit Kalkül ableiten. Mit anderen Worten, das ist nicht wirklich eine Programmierfrage. Auf der anderen Seite, wenn Sie eine Formel finden, die vorgibt, die Antwort zu geben, sollten Sie sicherstellen, dass die Formel mit der besten Simulation übereinstimmt, die Sie programmieren konnten. – Narveson

+0

Bei so vielen Variablen sollte es sicher sein, eine Gauß-Approximation zu verwenden. Es sei denn, Sie haben pathologische Fälle (wie eine Menge p_i = 0) und brauchen eine extrem hohe Genauigkeit. –

+0

@Giacomo Verticale: 'p_i's sind normalerweise sehr klein. In einigen Fällen ist ein Poissonian viel besser als ein Gaussian. –

Antwort

3

Zuerst möchte ich mit der Vermeidung von rand für diesen Zweck eingebaut, die auf der zugrunde liegenden C-Bibliothek Implementierung zu abhängig ist zuverlässig ist (siehe zum Beispiel meine blog post Hinweis darauf, dass der Bereich von rand auf Windows Kardinalität 32.768).

den Monte-Carlo-Ansatz zu verwenden, würde ich mit einem bekannten guten Zufallsgenerator, wie Rand::MersenneTwister oder nur eine von Random.org ‚s Dienstleistungen und Pre-Berechnung eine CDF für YY vorausgesetzt ziemlich stabil verwenden beginnen soll. Wenn jeder Y nur einmal verwendet wird, ist die Vorberechnung der CDF offensichtlich sinnlos.

Wikipedia zu zitieren:

In der Wahrscheinlichkeitstheorie und Statistik, die Poisson Binomialverteilung ist die diskrete Wahrscheinlichkeitsverteilung einer Summe von unabhängigen Bernoulli-Versuchen.

Mit anderen Worten, es ist die Wahrscheinlichkeitsverteilung der Anzahl der Erfolge in einer Folge von n unabhängig ja/keine Experimente mit Erfolg Wahrscheinlichkeiten p1, & hellip ;, pn. (Schwerpunkt meins)

Closed-Form Expression for the Poisson-Binomial Probability Density Function könnte von Interesse sein. Der Artikel ist hinter einem paywall:

und wir diskutieren einige ihrer Vorteile in Bezug auf Rechengeschwindigkeit und Umsetzung und bei der Vereinfachung der Analyse mit Beispielen des letzteren einschließlich der Berechnung der Momente und die Entwicklung neuer trigonometrischen Identitäten für die binomische Koeffizient und die binomiale kumulative Verteilungsfunktion (cdf).

+0

+1 für die Benennung dieser Familie von Distributionen. –

Verwandte Themen