0

我正在使用 Math.Net 从过度分散的泊松分布中采样值。我正在使用负二项式链接执行此操作,如下所述:https ://stat.ethz.ch/pipermail/r-help/2002-June/022425.html

我的代码目前如下所示:

private static double ODPoisson(double lambda, double dispersion)
    {
        double p = 1 / (dispersion - 1);
        double r = lambda * p;

        if (dispersion == 1)
        {
            return Poisson.Sample(lambda);
        }
        else
        {
            return NegativeBinomial.Sample(r, p);
        }
    }

我发现这适用于 lambda 的低值。一旦我尝试使用 1000 的 lambda 和 2 的分散参数进行采样,代码就会简单地“挂起”,即方法继续运行但没有返回任何值。我什至循环通过这种方法来测试输入参数的各种组合(从 1 到 1000 的 lambda,色散 = 2),并且代码每次都“挂起”在不同的组合中。有时它会对所有组合进行采样,最高 lambda = 750,其他时候最高 lambda = 500。这只需重新运行控制台应用程序并且不更改代码即可。

我在每次运行之前都包含了“IsValidParameterSet”检查,即使参数被认为是有效的,样本仍然没有生成。为了进一步测试输入参数是否有效,我在第 50 个百分位处使用 NegativeBinomial.CDF 方法测试了相同的参数,并且每次都返回一个值。

NegativeBinomial.Sample 方法是否有错误?如果没有,我该如何解决这个问题?

4

0 回答 0