【发布时间】:2011-05-23 10:18:37
【问题描述】:
我正在使用 Perl 来建模一个随机变量 (Y),它是一些 ~15-40k 独立伯努利随机变量 (X_i) 的总和,每个变量都有不同的成功概率 (p_i)。正式地,Y=Sum{X_i} 其中Pr(X_i=1)=p_i 和Pr(X_i=0)=1-p_i。
我有兴趣快速回答诸如Pr(Y<=k) 之类的查询(其中给出了k)。
目前,我使用随机模拟来回答此类查询。我根据p_i随机抽取每个X_i,然后将所有X_i值相加得到Y'。我重复这个过程几千次,然后返回部分时间Pr(Y'<=k)。
显然,这并不完全准确,尽管随着我使用的模拟次数的增加,准确度会大大提高。
你能想出一个合理的方法来得到准确的概率吗?
【问题讨论】:
-
有趣的问题,但对于确切概率,您需要在统计书中找到公式或使用微积分自己推导出它。换句话说,这并不是一个真正的编程问题。另一方面,当您确实找到一个声称可以给出答案的公式时,您需要确保该公式与您能够编程的最佳模拟一致。
-
变量这么多,使用高斯近似应该是安全的。除非你有病态的病例(比如很多 p_i=0)并且需要极高的准确率。
-
@Giacomo Verticale:
p_is 通常非常小。在某些情况下,泊松比高斯要好得多。
标签: perl statistics simulation montecarlo