3

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

我有兴趣快速回答诸如Pr(Y<=k)(在哪里k给出)之类的问题。

目前,我使用随机模拟来回答此类查询。X_i我根据它随机绘制每个p_i,然后将所有X_i值相加得到Y'。我重复这个过程几千次,然后返回一小部分时间Pr(Y'<=k)

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

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

4

3 回答 3

3

首先,我会避免rand为此目的使用内置函数,因为它过于依赖底层 C 库实现而不是可靠的(例如,请参阅我的博客文章,指出randWindows 上的范围具有基数 32,768)。

要使用 Monte-Carlo 方法,我将从已知的良好随机生成器开始,例如Rand::MersenneTwister或仅使用Random.org的服务之一并预先计算 CDF 以Y假设Y它非常稳定。如果每个Y都只使用一次,那么预先计算 CDF 显然是没有意义的。

引用维基百科

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

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

泊松二项式概率密度函数的封闭式表达式可能很有趣。这篇文章在付费墙后面:

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

于 2010-12-10T16:15:55.680 回答
1

为了获得精确的解决方案,您可以利用这样一个事实,即两个或多个独立随机变量之和的概率分布是它们各自分布的卷积。 卷积有点昂贵,但只有在p_i发生变化时才必须计算。

获得概率分布后,您可以通过计算概率的累积和轻松获得 CDF。

于 2010-12-10T16:43:56.260 回答
1

据我记得,这不应该渐近地成为正态分布吗?另请参阅此新闻组线程: http: //newsgroups.derkeiler.com/Archive/Sci/sci.stat.consult/2008-05/msg00146.html

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

于 2010-12-10T11:42:51.173 回答