如何有效地模拟伯努利随机变量的总和?

时间:2010-12-10 11:00:53

标签: perl statistics simulation montecarlo

我使用Perl来建模一个随机变量(Y),它是一些~15-40k个独立伯努利随机变量(X_i)的总和,每个变量具有不同的成功概率{{{ 1}})。形式上,p_i Y=Sum{X_i}Pr(X_i=1)=p_i

我有兴趣快速回答Pr(X_i=0)=1-p_i(其中Pr(Y<=k)已提供)等问题。

目前,我使用随机模拟来回答此类查询。我根据k随机抽取每个X_i,然后将所有p_i值相加得到X_i。我重复这个过程几千次并返回Y'次的分数。

显然,这并不完全准确,但随着我使用的模拟数量的增加,准确度会大大提高。

你能想出一个合理的方法来获得确切的概率吗?

3 个答案:

答案 0 :(得分:3)

首先,为了达到这个目的,我会避免使用rand内置过于依赖底层C库实现是可靠的(例如,请参阅我的blog post指出Windows上rand的范围具有基数32,768)。

要使用蒙特卡罗方法,我将从一个已知良好的随机生成器开始,例如Rand::MersenneTwister或者只使用Random.org的一个服务并为{{预先计算CDF 1}}假设Y非常稳定。如果每个Y仅使用一次,那么预先计算CDF显然是毫无意义的。

引用Wikipedia

  

在概率论和统计学中, 泊松二项分布 是独立伯努利试验总和的离散概率分布。

     

换句话说,它是 n 序列中成功次数的概率分布,独立的是/否实验,成功概率 p1,...,pn 。 (强调我的)

Closed-Form Expression for the Poisson-Binomial Probability Density Function可能会引起人们的兴趣。这篇文章是付费墙的背后:

  

我们讨论了它在计算速度和实现以及简化分析方面的几个优点,后者的例子包括矩的计算和二项式系数和二项式累积分布函数(cdf)的新三角恒等式的开发。

答案 1 :(得分:1)

据我所知,这不应该像正态分布一样渐渐渐近吗?另请参阅此新闻组主题:http://newsgroups.derkeiler.com/Archive/Sci/sci.stat.consult/2008-05/msg00146.html

如果是,您可以使用Statistics::Distrib::Normal

答案 2 :(得分:1)

要获得准确的解决方案,您可以利用the probability distribution of the sum of two or more independent random variables is the convolution of their individual distributions. Convolution有点贵的事实,但只有在p_i更改时才必须计算。

一旦获得概率分布,就可以通过计算概率的累积和来轻松获得CDF。