如何绑定泊松随机变量的样本来模拟到达

How to bound the sample of Poisson Random Variates to simulate arrivals

我想做一个蒙特卡洛模拟,生成 10 个场景,每个场景的特点是时间范围内到达的随机数。

我用scipy.stats.poisson https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.poisson.html 为每个场景生成到达样本,假设均值为 12。

from scipy.stats import poisson
arrivals = poisson.rvs(12, 10)
print arrivals

输出是一个随机数列表:

[11 13  9 10  8  9 13 12 11 23] 

平均值是 11.9,这已经足够了,但问题是在这种情况下,在最后一个场景中有 23 次到达,这与平均值 12 相去甚远。

因为在 运行 这个模拟之前我不得不 select 人口,我必须使人口的规模足够大以符合泊松随机变量。 因此,假设我 select 一个大小为 1.5 * 12 = 18 的总体,不幸的是,在最后一个场景中我会得到一个错误,因为样本大于总体本身。

我的第一个问题是:为了使用泊松随机变量列表对这些到达者进行采样而不会出错,我必须 select 的最小人口规模是多少?

我的第二个问题是:是否有更好的方法通过使用另一种概率分布来处理此类问题?

请注意,在这种情况下 mean=12 但我必须模拟 mean=57 和 mean=234 的其他上下文。

I have to make the size of that population large enough to comply with the Poisson Random Variates

Poisson distribution 定义在所有非负整数(从 0 到无穷大)上。理论上,如果您从该分布生成数字,您应该期望得到任何正整数,但那些远离均值 (lambda) 的整数出现的可能性很低。例如,使用 12 的 lambda 参数得到 18 或更高值的概率是 3.7%:

>>> poisson.sf(18,12)
0.037416489663391859

因此,如果您想知道在模拟过程中要获得 1% 的错误所需的最小尺寸是多少,您可以使用逆函数:

>>> poisson.isf(0.01,12)
21.0

Lambda 是一段时间内到达的平均值,而不是最大值(人口规模)。我想,模拟代码无法更改为使用样本中的最大值。

泊松分布对你的情况似乎很合理。但是,如果您想要一个反映人口规模最大 N 的分布,您可以调整更灵活的分布的参数,例如 Beta-binomial 分布。我的建议是寻找你的现象的真实数据,然后从中调整或导出概率函数。一个更简单的解决方案是通过随机选取值从中 bootstrap 。 对于统计问题,我们鼓励您使用 Cross validated