大数的累积二项分布

Cumulative binomial distribution for large numbers

我在 python 中实现了以下功能:

# Calculation of cumulative binomial distribution
def PDP(p, N, min):
    pdp=0
    for k in range(min, N+1):
        pdp += (float(factorial(N))/(factorial(k)*factorial(N-k)))*(p**k)*((1-p)**(N-k))
    return pdp

但是,计算产生的值过大且 n 较高(最高 255)。我已经搜索了这些值的近似值,但无济于事。你会怎么做?

假设X服从二项分布,

如果你想计算 P(X >= m),我会先做一个连续性校正,如此近似 P(X >= m-0.5),然后我会使用正态近似来近似它。

P((X - np)/ sqrt(np(1-p)) >= (m-0.5-np)/sqrt(np(1-p)) 

这是近似值

P(Z >= (m-0.5-np)/sqrt(np(1-p)) 

其中 Z 是标准正态分布。

References 这样的近似值。

根据Siong的回答,我想出了以下解决方案:

import math

# Cumulative distribution function
def CDF(x):
    return (1.0 + math.erf(x/math.sqrt(2.0)))/2.0

# Approximation of binomial cdf with continuity correction for large n
# n: trials, p: success prob, m: starting successes
def BCDF(p, n, m):
    return 1-CDF((m-0.5-(n*p))/math.sqrt(n*p*(1-p)))