18 人一组中,有 4 人同一个出生月份的概率是多少?

机器算法验证 可能性 生日悖论
2022-02-11 15:50:46

不是课堂作业。

碰巧我的 18 人小组中有 4 名成员碰巧共享同一个出生月份。让我们说六月。. 这种情况发生的可能性有多大。我试图在我们的团队会议上将此作为概率问题提出。

这是我的尝试:

  • 所有可能的结果1218
  • 从 18 人中选出 4 人:18C4
  • 常用月份可以通过 1 种方式选择:12C1

所以 18 人中有 4 人共享同一个出生月份的概率是 = 非常非常小的数字。18C412C11218

问题:

  1. 这是解决这个问题的正确方法吗?
  2. 恰好有4 个人共享一个出生月份的概率是多少?
  3. 至少有4 人(4 人或更多人)共享一个出生月份的概率是多少?

请注意:我知道所有月份都不相等,但为简单起见,我们假设所有月份的机会均等。

4个回答

通过将其应用于标准生日问题,您可以看到您的论点是不正确的,我们知道 23 人的概率是 50%。您的论点将给出,这是非常小的。通常的论点是,如果我们要避免巧合,我们有选择来选择第个人的生日,所以在个人中没有巧合的概率是 (232)(3651)36523365(k1)kKk=1K365k+1365

不幸的是,对于两个以上的生日巧合,没有这样简单的论据。个人只有一种方式(直到对称)没有双向重合,但是有很多很多方式没有四向重合,所以添加人时的计算并不简单。这就是为什么 R 提供 并且它仍然只是一个近似值的原因。我当然希望这不是课堂作业。kpbirthday()

您的论点不正确的原因是它低估了您可以获得 4 个匹配月份的方法的数量。例如,您不仅可以选择 12 个月中的任何一个月作为匹配的月份。您还可以任意重新标记其他 11 个月(给您 11 倍!)。而你的分母意味着人们的排序很重要,所以有超过排序有 4 个匹配项。1218(184)

解决 2 重合问题的正确方法是计算 2 个人不共享同一生日月份的概率。

对于此示例,第二个人有 11/12 的机会与第一个人不共享同一月份。
第三人有 10/12 的机会不与 1 &2 共享同一个月。
第四个人有 9/12 的机会不与 1、2 和 3 共享同一月份。
因此,没有人共享同一月份的机会是,约为 57%。或 43% 的机会至少有 2 人在同一个月分享。(11109)/123

我无法就如何将此手动计算扩展到 3 或 4 重合问题提供建议。如果您知道 R,则可以使用以下pbirthday()函数来计算:

pbirthday(18, classes=12, coincident = 4)
[1] 0.5537405

因此,对于 18 个人来说,有 55% 的机会至少有 4 个人会在同一个月分享。

这是理解问题的好来源:https ://www.math.ucdavis.edu/~tracy/courses/math135A/UsefullCourseMaterial/birthday.pdf

编辑 为了完整起见,这里是 R 中的一个快速而肮脏的模拟:

four <- 0  #count for exactly 4
fourmore <- 0 #count for 4 or more

count<-100000
for (i in 1:count) {
   #sample 12 objects, eighteen times
   m<- sample(1:12, 18, replace=TRUE)
   
   if (any(table(m)>=4)){fourmore <-fourmore +1}
   if (any(table(m)==4)){four <-four +1}
}

print(fourmore/count)
#[1] 0.57768
print(four/count)
#[1] 0.45192

个分区分为非负部分,其中最大部分为,另外还有个最大部分大于的分区,以及 个最大部分小于的分区。43181242984254

例如一个分区是

18=4+3+3+2+2+1+1+1+1+0+0+0=1×4+2×3+2×2+4×1+3×0

在您的团队的出生月份中出现特定分区模式的概率是18!4!13!22!21!40!3×12!1!2!2!4!3!12180.05786545

将分区最大部分为的概率相加,得到大约在分区的最大部分为或更多的地方将它们相加,您将得到大约这些是您的问题的答案。40.416531440.5771871

更具体地说,最频繁月份的不同频率的概率如下。结果是最有可能的,中位数(平均值约为43.76

Freq of most freq month    Probability
            1               0
            2               0.0138050
            3               0.4090079
            4               0.4165314
            5               0.1297855
            6               0.0262102
            7               0.0040923
            8               0.0005116
            9               0.0000517
           10               0.00000423
           11               0.000000280
           12               0.0000000148
           13               0.000000000622
           14               0.0000000000202
           15               0.000000000000490
           16               0.00000000000000834
           17               0.0000000000000000892
           18               0.000000000000000000451

虽然亨利已经给出了一种通过计算所有分区来精确计算数字的方法,但了解两种近似方法可能会很有趣。

此外,还有一种基于条件泊松分布变量的精确计算。

计算模拟

您将无法轻易计算出所有种可能性(并且扩大问题的规模并不容易),但您可以让计算机随机模拟可能方式的子集并从那些模拟。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,,X124)=P(X14)P(X14)P(X124)
P(X1,X2,,X124|X1+X2++X12=18)

P(i:Xi4|Xi=18)=P(i:Xi4)P(Xi=18|i:Xi4)P(Xi=18)

该校正因子是截断泊松分布变量之和等于 18 的概率与常规泊松分布变量之和等于的概率之比18,对于少数出生月份和组中的人,可以手动计算此截断分布P(Xi=18|i:Xi4)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