用求和绘制概率曲线

Plot Probability Curve with Summation

我有以下问题:

我正在研究计算一些网络效应的公式。我的想法是我有 450 "red users" 和 6550 "blue users" 总共有 7000 个用户。现在我想绘制 "picking x users (the same user cannot be picked twice, so this is sampling without replacement) and calculate the probability that at least 1 user is red"。

例如,对于 x = 3,这意味着我从 7000 个用户中随机挑选 3 个,并检查其中是否有 "red users"

至少有 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)

我意识到曲线非常尖锐,因为它只是从 ℕ 中的一个值到 ℕ 中的下一个值。 虽然添加小数没有多大意义,因为 "picking 0,5 users or even 0,01 users" 很愚蠢,但我希望看到完整的图表以便能够将公式与其他公式进行比较。

有什么方法可以在 python 中实现吗?

此致,

科尔比

你要找的东西之前已经被广泛研究过,在概率论和统计学中被称为hypergeometric distribution。因此无需重新发明轮子!

我们正在寻找至少一个红色用户,在不同大小的样本中 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()

产生下图,

显然,随着我们增加样本的大小,绘制至少一个红色用户的概率迅速增加 - 考虑到我们对超几何分布的了解,这不是我们没有预料到的!

在你的公式中,它不是乘积而不是总和吗?不管怎样,我最初的想法是使用泊松分布,但那是行不通的,因为它没有替换。问题是阶乘函数只为整数定义,所以你需要使用伽玛函数。