大数的累积二项分布
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)))
我在 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)))