我正在使用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和分散参数2进行采样,代码只需“挂起”,即方法保持运行但不返回任何值。我甚至已经通过这种方法来测试输入参数的各种组合(lambda从1到1000,dispersion = 2),并且代码每次都以不同的组合“挂起”。有时它会为lambda = 750的所有组合进行采样,其他时间最多为lambda = 500.只需重新运行控制台应用程序并且不进行代码更改即可。
我在每次运行之前都包含了'IsValidParameterSet'检查,即使参数被认为有效,仍然不会生成样本。为了进一步测试输入参数是否有效,我在第50百分位使用NegativeBinomial.CDF方法测试了相同的参数,并且每次都返回一个值。
NegativeBinomial.Sample方法中是否有错误?如果没有,我该如何解决这个问题?