python - 如何绑定(bind)泊松随机变量的样本来模拟到达

标签 python random scipy statistics poisson

我想做一个蒙特卡洛模拟,在该模拟上生成 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 的其他上下文。

最佳答案

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 是一段时间内到达的平均值,而不是最大值(人口规模)。我想,无法更改模拟代码以使用样本中的最大值。

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

关于python - 如何绑定(bind)泊松随机变量的样本来模拟到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44248913/

相关文章:

python - 将数组转换为 python 标量

c - 如何在 LCD 上绘制 Sprite 的区域设置边界

C++随机数游戏从集合中,rand选择一个不从集合中的数字

android - 按下按钮时应用程序随机从可绘制文件夹中选择图像

python - 按多列对数据框中的连续条目进行聚类/分组

python - 绘图类型问题 : TypeError: only size-1 arrays can be converted to Python scalars

用于读取类 CSV 行的 Python 正则表达式

python - Django - 进行迁移时模型的不可用字段

python - 在Python的For循环中添加SQL查询

python数据分析,cookbook代码难懂