用求和绘制概率曲线
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()
产生下图,
显然,随着我们增加样本的大小,绘制至少一个红色用户的概率迅速增加 - 考虑到我们对超几何分布的了解,这不是我们没有预料到的!
在你的公式中,它不是乘积而不是总和吗?不管怎样,我最初的想法是使用泊松分布,但那是行不通的,因为它没有替换。问题是阶乘函数只为整数定义,所以你需要使用伽玛函数。
我有以下问题:
我正在研究计算一些网络效应的公式。我的想法是我有 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()
产生下图,
显然,随着我们增加样本的大小,绘制至少一个红色用户的概率迅速增加 - 考虑到我们对超几何分布的了解,这不是我们没有预料到的!
在你的公式中,它不是乘积而不是总和吗?不管怎样,我最初的想法是使用泊松分布,但那是行不通的,因为它没有替换。问题是阶乘函数只为整数定义,所以你需要使用伽玛函数。