python - 绘制带有求和的概率曲线
问题描述
我有以下问题:
我正在研究一个公式来计算一些网络效应。这个想法是我有 450 个“红色用户”和 6550 个“蓝色用户”,总共有 7000 个用户。现在我想绘制“选择 x 个用户(同一用户不能被选择两次,所以这是没有替换的抽样)并计算至少 1 个用户是红色的概率”。
例如对于 x = 3,这意味着我从 7000 个随机用户中挑选 3 个并检查其中是否有“红色用户”
至少有 1 个红色用户的概率是 p = 1 - 所有 3 个选择都是蓝色用户的概率,蓝色用户的概率等于 p = 6550/7000,对吗?
导致至少 1 个红色用户的概率: * p = 1 - 6550/7000 * 6549/6999 * 6548/6998 *
因此我想出了公式:
f(x) = e^-(1- sum of (6500-i)/(7000-i)); for i = 0, till x)
我意识到曲线非常前卫,因为它只是从 ℕ 中的一个值到 ℕ 中的下一个值。尽管添加十进制数字没有多大意义,因为“选择 0,5 个用户甚至 0,01 个用户”只是愚蠢的,但我希望看到完整的图表以便能够将公式与其他公式进行比较。
有什么办法可以在python中实现吗?
此致,
科尔比
解决方案
您正在寻找的东西之前已经被广泛研究过,在概率论和统计学中被称为超几何分布。因此无需重新发明轮子!
我们在不同大小的样本中寻找至少一个红色用户x
。这等价于1 - Pr(0 red users | sample size = x)
,即 1 减去它的补码。
让我们通过考虑样本量来说明这一点[1, # red users]
。一些 Python 代码可以帮助你,
from scipy.stats import hypergeom
import matplotlib.pyplot as plt
red = 450
total = 7000
sample_sizes = list(range(1, red + 1))
probabilities = [1 - hypergeom(total, red, sample_size).pmf(0)
for sample_size in sample_sizes]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(sample_sizes, probabilities, 'bo')
ax.set_xlabel('Users drawn (#)')
ax.set_ylabel('Probability of at least one red user')
plt.show()
产生下图,
显然,随着样本大小的增加,绘制至少一个红色用户的概率会迅速增加——鉴于我们对超几何分布的了解,这一切都不是我们所预料的!
推荐阅读
- php - 使用 Laravel 创建良好的 SEO 友好路线的问题
- actions-on-google - 将 Homegraph api 集成到我的智能家居中
- javascript - 在 Firebase 云函数中创建的无限循环(?)
- java - 将 bean 附加到自动装配列表
- javascript - 从 Google Cloud Function 中的 pubsubMessage 获取数据
- c# - 如何将一个表单加载到另一个表单的面板中
- ios - Core Data 和 Userdefaults 不存储数据
- json - 当我执行 Post 请求时,属性和值变为 null
- python - Terminal 和 JupterLab 使用不同的 Python 3 安装
- javascript - 侦听器参数必须是使用套接字 io 的函数错误类型