我正在使用 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 方法是否有错误?如果没有,我该如何解决这个问题?