在模拟包含1000个点的泊松分布的随机点过程时;它们似乎都占据了窗口中心的一个小区域。

我使用Donald Knuth逆采样算法来实现基于Poisson的伪随机数生成器。

https://en.wikipedia.org/wiki/Poisson_distribution#Generating_Poisson-distributed_random_variables

Lambda值(又称成功率)设置为window_dimension / 2,并获得了此结果(屏幕截图)

java - Java:基于Poisson的点过程限制在很小的区域-LMLPHP

码:

public double getPoisson(double lambda) {//250
    double L = Math.exp(-lambda);
    double p = 1d;
    int k = 0;
    do {
        k++;
        p *= Math.random();
    } while (p > L);

    return k-1;
}


`

最佳答案

在我看来,问题在于您认为输出应该是什么,因为该程序似乎在生成您所请求的内容。速率为500的Poisson的期望值和方差都等于500,并且对于较大的λ,它非常对称且呈钟形。综上所述,所有这些均意味着标准偏差为sqrt(500),略小于22.4,因此您应该期望收入的95%为500±45,看起来像您所得到的。

使用您随后的编辑(在注释中)说λ= 250,结果的行为类似。每个维度可能的结局范围为250±31,仍然聚集在中心。

通过创建具有标准偏差的Poisson随机变量以使±3σ跨您的绘图区域,很容易确认我的解释。
您需要更大的方差/标准差来增加结果在整个窗口中的分布。为了演示这一点,我使用了Poisson(6400)(标准偏差为80),然后减去6150得到的平均值为250。因此,绝大多数值将落在0到500之间。我生成了1000个独立变量对值,并使用JMP统计信息包将其绘制出来,结果如下:

java - Java:基于Poisson的点过程限制在很小的区域-LMLPHP

只是为了欢笑,这是一对独立的Normal(250,80)对的图:

java - Java:基于Poisson的点过程限制在很小的区域-LMLPHP

他们看起来很漂亮,不是吗?

重申一下,您使用的泊松算法没有问题。它确实按照您的指示执行操作,即使这不是您预期的结果。



附录

由于您不相信Poisson converges to Gaussian as lambda grows,因此以下是通过JMP再次生成的针对您特定情况的一些直接证据:

java - Java:基于Poisson的点过程限制在很小的区域-LMLPHP

左侧是1000个随机生成的Poisson(250)值的直方图。注意钟形的形状。我让JMP根据AIC (Aikaike Information Criterion)选择最佳的连续分布拟合。它选择正态性作为最佳拟合,右侧的诊断程序将结果密度图以红色叠加在直方图上。结果几乎可以说明一切。

08-06 05:34