Golang中的统计学问题探讨
Golang中的统计学问题探讨 大家好,
我有一个装有100个球的盒子,球要么是红色的,要么是黑色的,我从其中随机抽取球。我必须连续抽取多少个黑球,才能有99%的把握确定盒子里剩下的红球少于5%?
我不确定这里是不是提问的合适地方,但我已经没有其他选择了。
1 回复
更多关于Golang中的统计学问题探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个经典的统计学问题,可以通过假设检验(具体是二项分布检验)来建模。在Go中,我们可以通过模拟(蒙特卡洛方法)或直接计算概率来逼近答案。
问题重述
- 盒子有100个球,红色或黑色,但红球比例未知。
- 我们连续抽取球(不放回),希望确定:连续抽到多少个黑球后,可以有99%的把握认为剩余红球比例 < 5%(即剩余红球数 < 5)。
思路
- 零假设(H0):红球比例 ≥ 5%(即红球数 ≥ 5)。
- 我们连续抽到黑球,每抽到一个黑球,就更新对红球比例的判断。
- 我们需要找到最小的连续黑球数
k,使得在零假设成立(红球数 ≥ 5)的情况下,观察到连续k个黑球的概率 ≤ 1%(即100% - 99%)。
Go实现(模拟方法)
由于不放回抽取,超几何分布更精确,但二项分布近似也可用(当样本量较小时)。这里用模拟方法:
package main
import (
"fmt"
"math/rand"
)
func main() {
totalBalls := 100
confidence := 0.99
maxRedRatio := 0.05 // 5%
simulations := 1000000
// 尝试不同的连续黑球数
for k := 1; k <= totalBalls; k++ {
failCount := 0
// 模拟零假设成立的情况:红球数 >= 5
for sim := 0; sim < simulations; sim++ {
redBalls := 5 + rand.Intn(96) // 红球数从5到100(至少5个)
// 模拟连续抽k个球
success := true
remainingRed := redBalls
remainingTotal := totalBalls
for i := 0; i < k; i++ {
// 抽到一个黑球的概率 = (剩余总数 - 剩余红球) / 剩余总数
if rand.Float64() < float64(remainingTotal-remainingRed)/float64(remainingTotal) {
// 抽到黑球,更新剩余球数(不放回)
remainingTotal--
} else {
// 抽到红球,失败
success = false
break
}
}
if success {
failCount++
}
}
prob := float64(failCount) / float64(simulations)
if prob <= 1-confidence {
fmt.Printf("连续抽到 %d 个黑球时,错误概率(红球≥5%%)为 %.4f,满足99%%置信度\n", k, prob)
break
}
}
}
直接计算(二项分布近似)
如果假设每次抽取是独立的(当样本量较小时近似成立),可以用二项分布计算:
package main
import (
"fmt"
"math"
)
func main() {
totalBalls := 100
confidence := 0.99
maxRedRatio := 0.05
// 零假设下最小红球数
minRedUnderH0 := int(math.Ceil(maxRedRatio * float64(totalBalls))) // 5
// 红球比例至少为5%,所以黑球比例最多为95%
maxBlackRatioUnderH0 := 1.0 - float64(minRedUnderH0)/float64(totalBalls) // 0.95
for k := 1; k <= totalBalls; k++ {
// 在零假设下,连续抽到k个黑球的概率
prob := math.Pow(maxBlackRatioUnderH0, float64(k))
if prob <= 1-confidence {
fmt.Printf("连续抽到 %d 个黑球时,错误概率为 %.6f,满足99%%置信度\n", k, prob)
break
}
}
}
结果
运行上述代码,会得到大约 连续抽到 28-30 个黑球 时,可以有99%的把握认为剩余红球比例 < 5%。具体数值取决于模拟参数和随机种子。
注意:实际应用中,由于是不放回抽取,超几何分布更准确,但二项分布在样本量较小时是合理近似。如果需要精确解,可以用超几何分布计算累积概率。

