作为对您要解决的实际问题的实际答案,如此高的分位数通常对模型选择的问题非常敏感(尤其是您是否为正确的审查建模以及组件中尾部的重量)。
但无论如何——尤其是在处理普通模拟变得不切实际的高分位数时——这本身就具有很大的价值;从理论和实践的角度来看,这是一个有趣的问题。
解决这个问题的其他几种方法是(1)使用快速傅里叶变换和(2)直接数值积分。
罗和舍甫琴科 (Luo and Shevchenko) (2009)[1].
在其中,他们开发了一种自适应直接数值积分方法,该方法比模拟更快并且与 FFT 竞争。
精算工作中更传统的方法是 (3) Panjer 递归,它可以在许多文本中找到。恩布雷希茨和弗雷 (2009)[2]讨论和比较 Panjer 递归和 FFT。(请注意,这两种技术都涉及连续分布的离散化。)
另一方面,做一个非常简单的模拟版本,并且不费吹灰之力地提高效率,从复合伽马负二项式生成并不是特别繁重。这是我孩子的小笔记本电脑上的时间:
system.time(replicate(100000,sum(rgamma(MASS:::rnegbin(1,4,2),5,.1))))
user system elapsed
2.82 0.00 2.84
我认为 2.8 秒生成 100在缓慢的小型笔记本电脑上进行复合分布的 000 次模拟确实不错。通过一些努力提高效率(其中一个可能会提出很多可能性),我想这可以更快地完成。
这是 ecdf106模拟(大约需要 29 秒):

我们在复合分布中看到了您期望看到的零处的特征离散跳跃。
[虽然让模拟变得更快应该很容易,但这里提到的所有三个替代方案——如果执行得当——应该会更快。]
您应该注意,该actuar
包支持使用复合分布进行计算,并提供了几种使用它们进行计算的方法。
例如,请参阅讨论此设施的此小插曲。
[可能有一些进一步的兴趣,请注意有一个用于泊松对数正态分布的 R 包 - poilog
;如果您在某些时候需要该发行版,它可能会很有用。]
在编辑中添加:
伽马形状参数不变的潜在快速近似值 -
在伽马的情况下,因为具有恒定形状参数的伽马卷积是另一个伽马,你可以写下Y|N=n,然后在每个处评估大量网格值处的 cdf 和密度n,然后简单地直接累加总和(而不是像 KDE 那样)。直接计算只会产生真实分位数的下限,但如果负二项式不是重尾的,它应该很快。
参考资料:
[1]:Luo, X. 和 Shevchenko, PV (2009),
“使用直接数值积分计算复合分布的尾部”
,计算金融杂志,13 (2),73-111。
[arXiv 预印本在这里]
[2]:Embrechts, P. 和 Frei, M. (2009),
“Panjer 递归与 FFT 的复合分布”
,运筹学数学方法,69 :3(7 月)第 497-508 页。[这里
似乎是预发布版本]