Java:基于泊松的点过程受限于一个小区域

时间:2017-06-02 21:41:13

标签: java processing simulation poisson

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

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

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

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

Point-process using poisson-based pseudo-random generator

代码:

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;
}

`

1 个答案:

答案 0 :(得分:3)

在我看来,问题在于你认为输出应该是什么,因为程序似乎产生了你所要求的几乎所有。速率为500的Poisson将具有其预期值和方差等于500,对于λ的大值,它是非常对称和钟形的。总的来说,一切都意味着标准偏差为sqrt(500),略低于22.4,所以你应该期望你收入的95%是500±45,这看起来就像你得到的那样。

随后您的编辑说(在评论中)λ= 250,结果表现相似。每个维度的可能结果范围是250±31,仍然聚集到中心。

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

Plot of pairs of (Poisson(6400)-6150) random variates

只是为了jollies,这是一个独立的Normal(250,80)对的情节:

enter image description here

他们看起来很相似,不是吗?

重申一下,您使用的泊松算法没有任何问题。它完全按照你的要求去做,即使这不是你所期望的结果。

附录

由于您不相信Poisson converges to Gaussian as lambda grows,这里是您的具体案例的一些直接证据,再次由JMP生成:

Histogram and normal distribution fit results for Poisson(250)

左边是1000个随机生成的泊松(250)值的直方图。注意形状良好的钟形。我让JMP根据AIC (Aikaike Information Criterion)选择最佳的连续分布拟合。它选择正态性作为最佳拟合,右侧的诊断和红色的结果密度图叠加在直方图上。结果几乎不言自明。