虽然亨利已经给出了一种通过计算所有分区来精确计算数字的方法,但了解两种近似方法可能会很有趣。
此外,还有一种基于条件泊松分布变量的精确计算。
计算模拟
您将无法轻易计算出所有种可能性(并且扩大问题的规模并不容易),但您可以让计算机随机模拟可能方式的子集并从那些模拟。1218
# function to sample 18 birthmonths
# and get the maximum number of similar months
monthsample <- function() {
x <- sample(1:12,18,replace = TRUE) # sample
n <- max(table(x)) # get the maximum
return(n)
}
# sample a million times
y <- replicate(10^6,monthsample())
# obtain the frequency using a histogram
h<-hist(y, breaks=seq(-0.5,18.5,1))
毒化逼近
特定月份生日数的频率近似为泊松/二项分布。基于此,我们可以计算特定月份的生日数不会超过某个值的概率,并通过取 12 的幂来计算所有 12 个月内发生这种情况的概率。
注意:这里我们忽略了生日数量相关的事实,因此这显然不准确。
# approximation with Poisson distribution
t <- 0:18
z <- ppois(t,1.5)^12 # P(max <= t)
dz <- diff(z) # P(max = t+1)
用 Bruce Levin 的表示进行计算
在评论中,Whuber 指出了 pmultinom 包。该软件包基于Ann中的 Bruce Levin 1981 年“多项累积分布函数的表示” 。统计学家。第 9 卷。出生月份的结果(根据多项分布更精确地分布)表示为独立的泊松分布变量。但与前面提到的朴素计算不同,这些泊松分布变量的分布被认为是以总和等于为条件的。n=18
所以上面我们计算但我们应该计算泊松分布变量的条件概率都等于或低于它引入了一个基于贝叶斯规则的额外项。P(X1,X2,…,X12≤4)=P(X1≤4)⋅P(X1≤4)⋅…⋅P(X12≤4)
P(X1,X2,…,X12≤4|X1+X2+…+X12=18)
P(∀i:Xi≤4|∑Xi=18)=P(∀i:Xi≤4)P(∑Xi=18|∀i:Xi≤4)P(∑Xi=18)
该校正因子是截断泊松分布变量之和等于 18 的概率与常规泊松分布变量之和等于的概率之比18,。对于少数出生月份和组中的人,可以手动计算此截断分布P(∑Xi=18|∀i:Xi≤4)P(∑Xi=18)
# correction factor by Bruce Levin
correction <- function(y) {
Nptrunc(y)[19]/dpois(18,18)
}
Nptrunc <- function(lim) {
# truncacted Poisson distribution
ptrunc <- dpois(0:lim,1.5)/sum(dpois(0:lim,1.5))
## vector with probabilities
outvec <- rep(0,lim*12+1)
outvec[1] <- 1
#convolve 12 times for each months
for (i in 1:12) {
newvec <- rep(0,lim*12+1)
for (k in 1:(lim+1)) {
newvec <- newvec + ptrunc[k]*c(rep(0,k-1),outvec[1:(lim*12+1-(k-1))])
}
outvec <- newvec
}
outvec
}
z2 <- ppois(t,1.5)^12*Vectorize(correction)(t) # P(max<=t)
z2[1:2] <- c(0,0)
dz2 <- diff(z2) # P(max = t+1)
结果
这些近似值给出以下结果
> ### simulation
> sum(y>=4)/10^6
[1] 0.577536
> ### computation
> 1-z[4]
[1] 0.5572514
> ### computation exact
> 1-z2[4]
[1] 0.5771871