簡體   English   中英

R:我如何通過泊松觀察匯總損失?

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

我是 R 的新手,但我正在嘗試使用它來匯總通過頻率分布觀察從嚴重性分布中觀察到的損失 - 基本上是rcompound所做的。 但是,我需要一種更精細的方法,因為我需要在“聚合”之前操縱嚴重性分布。

讓我們舉個例子。 假設你有:

rpois(10,lambda=3)

因此,給你類似的東西:

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

此外,假設我們的損失嚴重程度由以下因素決定:

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

這樣我們也有下面的output:

 [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。

我說這需要“高效”(運行時間),因為: - 泊松參數可能非常大,即高達 1000 左右。 - 實現可能高達 1,000,000,即多達一百萬個泊松和伽馬觀測值需要整理。

任何幫助將不勝感激。

謝謝,戴夫。

看起來您想在泊松向量的累積指示的位置拆分伽馬向量。

以下 function ( 從這里)進行拆分:

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

根據我鏈接到上面的帖子,對於大型 arrays,splitAt() function 會減慢速度,因此您可以(如有必要)考慮該帖子中提出的替代方案。 就我而言,我生成了 1e6 泊松和 1e6 伽馬,上面的 function 在我的機器上運行了 0.78 秒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM