R:我如何通过泊松观察来汇总损失?

R: How do i aggregate losses by a poisson observation?

我是 R 的新手,但我正在尝试使用它来汇总通过频率分布的观察从严重性分布观察到的损失 - 本质上是 rcompound 所做的。但是,我需要一种更精细的方法,因为我需要在 'aggregation' 之前操纵严重性分布。

举个例子。假设你有:

rpois(10,lambda=3)

因此,给你这样的东西:

[1] 2 2 3 5 2 5 6 4 3 1

此外,假设我们的损失严重程度取决于:

rgamma(20,shape=1,scale=10000)

这样我们也有如下输出:

 [1]   233.0257   849.5771  7760.4402   731.5646  8982.7640 24172.2369 30824.8424 22622.8826 27646.5168  1638.2333  6770.9010  2459.3722   782.0580 16956.1417  1145.4368  5029.0473  3485.6412  4668.1921  5637.8359 18672.0568

我的问题是:让 R 轮流进行每个泊松观察,然后从我的严重性分布中汇总损失的有效方法是什么?例如,第一个泊松观测值是 2。因此,从我的 Gamma 分布中添加两个观测值(前两个)得到 1082.61。

我说这需要 'efficient'(运行 次),因为: - 泊松参数可能会非常大,即高达 1000 左右。 - 实现可能高达 1,000,000,即多达一百万个泊松和伽玛观测值需要分类。

如有任何帮助,我们将不胜感激。

谢谢,戴夫。

您似乎想在泊松向量的累加指示的位置拆分伽马向量。

以下函数 (from here) 进行拆分:

splitAt <- function(x, pos) unname(split(x, cumsum(seq_along(x) %in% pos)))

pois <- c(2, 2, 3, 5, 2, 5, 6, 4, 3, 1)
gam <- c(233.0257, 849.5771, 7760.4402, 731.5646, 8982.7640, 24172.2369, 30824.8424, 22622.8826, 27646.5168, 1638.2333, 6770.9010, 2459.3722, 782.0580, 16956.1417, 1145.4368, 5029.0473, 3485.6412, 4668.1921, 5637.8359, 18672.0568)
posits <- cumsum(pois)

然后执行以下操作:

sapply(splitAt(gam, posits + 1), sum)
[1]  1082.603  8492.005 63979.843 61137.906 17738.200 19966.153 18672.057

根据我上面链接的 post,splitAt() 函数对于大型数组会变慢,因此您可以(如有必要)考虑 post 中提出的替代方案。就我而言,我在我的机器上用了 0.78 秒生成了 1e6 泊松和 1e6 伽玛,以及上面的函数 运行。