import numpy as np
population = [0] * 106 + [1] * 94
N = 100000
count_in_range = 0
for _ in range(N):
subpopulation = np.random.choice(population, size=24)
female_count = np.sum(subpopulation)
if female_count in range(6, 10): # 10 is not included
count_in_range += 1
in_range_probabilty = count_in_range/N
print(f'p = {in_range_probabilty}')
import scipy.special
p = 0.47
n = 24
p_exact = 0
for k in range(6,10):
p_exact += scipy.special.binom(n,k) * p**k * (1-p)**(n-k)
print(f'p_exact = {p_exact}')
我假设在这种情况下,我们讨论的是从总体中不替换地绘制,因此它是超几何分布,其概率质量函数(pmf)由下式给出:
在哪里
我们使用hypergeom from scipy:
所以概率是0.21462937817887562
虽然我更喜欢简单地用数学来解决这个问题,但是有一种方法可以让你通过蒙特卡罗模拟来近似想要的概率。这两种方法我都想好了
蒙特卡罗方法
根据你的文字告诉我们的,在200人的人口中有47%的女孩。因此,您不应该使用
np.random.choise()
来获取人口,而是应该生成一组200人,其中106名男性和94名女性,其中0
表示男性,而1
表示女性:从该组中,您必须随机选择24人:
要评估该子集中的女性人数,只需将数组总结为:
从200人中随机选择24人,计算6至9名女孩的总概率,重复该随机测试几次(例如N=100000),并计算
female_count
在6至9范围内的频率:精确逼近
要计算准确的概率,只需使用Binomial Distribution来计算24人中有6人是女性、7人是女性等的概率,并将这些概率相加:
样本输出:
请注意,
p
的结果可能因不同的运行而不同,因为这是随机生成的,而p_exact
是数学上的精确概率,并且始终保持不变相关问题 更多 >
编程相关推荐