二进制数据的测序概率

Probability of sequence with binary data

提问人:jdsdog10 提问时间:6/15/2023 最后编辑:jdsdog10 更新时间:6/16/2023 访问量:85

问:

假设我有 n 个球,x 蓝色和 (n-x) 红色。如果我一次随机抽取一个球,那么连续抽取一系列 k 个蓝球的概率是多少?

上下文,我正在模拟高尔夫回合。我很好奇连续打出 k+ 小鸟+的概率是多少。我正在使用多项式模拟器在圆形水平上进行模拟,而不是逐个洞进行模拟。所以我想利用我在 18 只小鸟中有 x 只小鸟+的事实,计算出 k+ 连胜存在的概率,然后将该概率放入二项式中,以记录实现连胜的成功/失败。 现在我只是在 R 中使用以下函数,它不是很快(x 是 x+ 小鸟的向量,每个被模拟的球员一个元素)

golf_streak <- function(x,k){
  test <- lapply(x, function(i) {sample(c(rep(1, i), rep(0, 18 - i))) })
  t <- lapply(test, rle)
  as.numeric(sapply(t, function(rl) any(rl$lengths[rl$values == 1] >= k)))

}

X-张贴在这里 https://math.stackexchange.com/questions/4719474/probability-of-sequence-with-binary-data

R 模拟 概率 组合学 离散数学

评论

0赞 Andre Wildberg 6/16/2023
运行 3 个循环可以减少到 1 个,例如 .省略,因为它没有定义。golf_streak <- function(x){unlist(lapply(x, function(i){rl <- rle(sample(c(rep(1, i), rep(0, 18 - i)))); rl$lengths[rl$values == 1]}))}k
0赞 jdsdog10 6/16/2023
@AndreWildberg 谢谢,我已经将 k 硬编码为 3,但在最后一秒试图概括。我编辑了它以包含 k 作为参数。当 k=3 时,您的示例与我的时间相比减少了 ~4%。如果我能得到一个精确的公式,我希望它的执行速度会快 20-50 倍
5赞 Gregor Thomas 6/16/2023
这似乎是一个奇怪的问题,“鉴于我在 18 洞抓到 k 只小鸟,我有 s 或更多长度的连胜的概率是多少。如果你把每个洞的问题重新定义为一个独立的事件,“如果我有概率p得到一只小鸟,我打了18个洞,我得到一个长度为s或更多的条纹的概率是多少?”数学/模拟可能会变得更容易 - 这里有一个相关的抛硬币问题。但是,如果您想要如上所述的问题的公式答案,我建议您在 math.stackexchange.com 询问,而不是 Stack Overflow。
1赞 Gregor Thomas 6/16/2023
(另外,我建议在术语上更加一致。你的第一句话用球的总数,18 代表你的高尔夫球箱。但后来你用条纹的长度。我建议使用总球数、小鸟球,因为在组合学中,它是 和 的数子集和条纹长度最常用的变量。保持一致并采用通用做法将更容易快速理解您的问题,并在代码和问题陈述之间来回切换。nnn = 18kkns
1赞 Gregor Thomas 6/16/2023
这肯定是有重叠的——有时有人会问一个离散数学模拟问题,希望得到代码的帮助,但得到的却是一个封闭形式的数学解决方案。(这些年来,我回答过很多问题,有人将一个问题描述为“你正在描述矩阵乘法,做”。但是,如果您的目标是数学解决方案,那么从数学网站开始是个好主意。A %*% B

答:

0赞 jdsdog10 6/16/2023 #1

我仍然没有找到确切的解决方案,但我找到了一个非常有效的计算解决方案。对于 k 的每个值,我运行上述代码 n 次,并存储一个非常大的 n 的成功次数。这为连胜的概率提供了相当好的估计。我将这些值保存在 csv 中,以作为 data.frame 上传,然后连接该表以获得条纹的概率。因此,我不再需要即时计算。不过,如果能得到一个确切的答案,还是会很好。