我有以下问题:
我正在研究一个公式来计算一些网络效应。我的想法是,我有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中实现吗?
最诚挚的问候,
科尔比
答案 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()
产生下面的图
很明显,随着我们增加样本的大小,吸引至少一个红色用户的可能性迅速增加-鉴于我们对超几何分布的了解,这没想到没有!
答案 1 :(得分:0)
在您的公式中,它不是乘积而不是总和吗?无论如何,我最初的想法是使用Poisson分布,但是那是行不通的,因为它无法替换。问题在于阶乘函数仅针对整数定义,因此您需要使用gamma函数。