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

时间:2017-05-29 18:53:51

标签: python random scipy statistics poisson

我想制作一个montecarlo模拟,我可以在其中生成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。

因为在运行此模拟之前我必须选择一个群体,所以我必须使该群体的大小足够大以符合泊松随机变量。 所以我要说我选择一个大小为1.5 * 12 = 18的人口,遗憾的是在最后一个场景中我会得到一个错误,因为样本大于人口本身。

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

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

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

1 个答案:

答案 0 :(得分:2)

  

我必须使该群体的大小足以符合泊松随机变量

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

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

因此,如果您想知道在模拟过程中需要使用的最小尺寸是多少来获得1%的误差,您可以使用反向:

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

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

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