2017-05-29 48 views
1

我想做一个蒙特卡洛模拟,我在其上生成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的人口,不幸的是,在最后一个场景中,由于样本大于人口本身,我会得到一个错误。

我的第一个问题是:为了用Poisson随机变量列表对这些到达进行采样,必须选择哪个人口的最小大小,而不会出现错误?

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

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

回答

2

我不得不做出这样的人口大到足以符合泊松随机分布随机

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

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

因此,如果你想知道什么是你需要使用获得的1的最小尺寸错误%的模拟过程中,你可以使用逆:在一段时间内

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

拉姆达到达的平均值,不是最大值(占总人口的大小)。我猜想,仿真代码不能更改为使用样本中的最大值。

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

+0

谢谢@Emer我会利用你的解释。 – piezzoritro