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?
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
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. –
@Giacomo Verticale: 'p_i's sind normalerweise sehr klein. In einigen Fällen ist ein Poissonian viel besser als ein Gaussian. –