求和绘制概率曲线

时间:2018-07-12 18:47:40

标签: python numpy matplotlib probability-theory

我有以下问题:

我正在研究一个公式来计算一些网络效应。我的想法是,我有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)

我已经意识到曲线很前卫,因为它只是从in中的一个值到in中的下一个值。 尽管由于“选择0.5个用户甚至0.01个用户”只是愚蠢的事,所以添加十进制数字并没有多大意义,但我希望看到完整的图表,以便能够将公式与其他公式进行比较。

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

最诚挚的问候,

科尔比

2 个答案:

答案 0 :(得分:2)

您正在寻找的内容已经被广泛研究,并且在概率论和统计学中被称为hypergeometric distribution。因此,无需重新发明轮子!

我们正在寻找x大小不同的样本中的至少一个红色用户。这等效于1 - Pr(0 red users | sample size = x),即减去其补码。

让我们通过考虑[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()

产生下面的图

Probability of at least one red users against sample size.

很明显,随着我们增加样本的大小,吸引至少一个红色用户的可能性迅速增加-鉴于我们对超几何分布的了解,这没想到没有!

答案 1 :(得分:0)

在您的公式中,它不是乘积而不是总和吗?无论如何,我最初的想法是使用Poisson分布,但是那是行不通的,因为它无法替换。问题在于阶乘函数仅针对整数定义,因此您需要使用gamma函数。