Worked Example

A worked example follows to serve as motivation for the use case.

TODO

library(eltr)

raw_elt <-example_elt

Calculate ELT parameters and modify raw ELT table

elt <- create_elt(raw_elt, ann_rate="rate", mu="mean", sdev_i = "sdevi" , sdev_c = "sdevc", expval = "exp")

elt
#>        id  rate  mean sdevi sdevc     exp       mdr  sdev   cov        alpha
#>     <int> <num> <int> <int> <int>   <int>     <num> <int> <num>        <num>
#>  1:     1  0.10   500   500   200  100000 0.0050000   700  1.40  0.502653061
#>  2:     2  0.10   200   400   100    5000 0.0400000   500  2.50  0.113600000
#>  3:     3  0.20   300   200   400   40000 0.0075000   600  2.00  0.240625000
#>  4:     4  0.10   100   300   500    4000 0.0250000   800  8.00 -0.009765625
#>  5:     5  0.20   500   100   200    2000 0.2500000   300  0.60  1.833333333
#>  6:     6  0.25   200   200   500   50000 0.0040000   700  3.50  0.077306122
#>  7:     7  0.01  1000   500   600  100000 0.0100000  1100  1.10  0.808181818
#>  8:     8  0.12   250   300   100    5000 0.0500000   400  1.60  0.321093750
#>  9:     9  0.14  1000   500   200    6000 0.1666667   700  0.70  1.534013605
#> 10:    10  0.00 10000  1000   500 1000000 0.0100000  1500  0.15 43.990000000
#>             beta  random_num
#>            <num>       <num>
#>  1:  100.0279592 0.081967213
#>  2:    2.7264000 0.081967213
#>  3:   31.8427083 0.163934426
#>  4:   -0.3808594 0.081967213
#>  5:    5.5000000 0.163934426
#>  6:   19.2492245 0.204918033
#>  7:   80.0100000 0.008196721
#>  8:    6.1007812 0.098360656
#>  9:    7.6700680 0.114754098
#> 10: 4355.0100000 0.000000000

apply Monte Carlo simulation to turn ELT into YLT

ylt <- create_ylt(elt, sims=10 ,ann_rate = "rate" , event_id = "id", expval = "exp" , mu ="mean")
#> Warning in stats::rbeta(length(row_port), dt$alpha[row_port],
#> dt$beta[row_port]): NAs produced

ylt
#>      Year         Loss  Event
#>     <int>        <num> <char>
#>  1:     1 0.000000e+00   None
#>  2:     2 9.708117e+02      8
#>  3:     3 1.386400e+01      3
#>  4:     3 4.648847e+02      1
#>  5:     4 4.410310e+01      2
#>  6:     4 4.261854e+01      8
#>  7:     4 4.215657e+02      8
#>  8:     4 4.199530e+00      6
#>  9:     5 1.000000e+02      4
#> 10:     5 6.907311e+01      1
#> 11:     5 2.337397e-05      2
#> 12:     5 2.445585e-01      8
#> 13:     6 2.867179e+03      3
#> 14:     6 2.871440e+02      5
#> 15:     7 0.000000e+00   None
#> 16:     8 0.000000e+00   None
#> 17:     9 3.332927e-05      2
#> 18:    10 0.000000e+00   None

apply insurance structure to calculate limited losses


# Layer 500 xs 50

ylt[ , layer1_loss := layer_loss(Loss, Excess = 50 , Limit = 500  ) ] 

ylt
#>      Year         Loss  Event layer1_loss
#>     <int>        <num> <char>       <num>
#>  1:     1 0.000000e+00   None     0.00000
#>  2:     2 9.708117e+02      8   500.00000
#>  3:     3 1.386400e+01      3     0.00000
#>  4:     3 4.648847e+02      1   414.88473
#>  5:     4 4.410310e+01      2     0.00000
#>  6:     4 4.261854e+01      8     0.00000
#>  7:     4 4.215657e+02      8   371.56568
#>  8:     4 4.199530e+00      6     0.00000
#>  9:     5 1.000000e+02      4    50.00000
#> 10:     5 6.907311e+01      1    19.07311
#> 11:     5 2.337397e-05      2     0.00000
#> 12:     5 2.445585e-01      8     0.00000
#> 13:     6 2.867179e+03      3   500.00000
#> 14:     6 2.871440e+02      5   237.14404
#> 15:     7 0.000000e+00   None     0.00000
#> 16:     8 0.000000e+00   None     0.00000
#> 17:     9 3.332927e-05      2     0.00000
#> 18:    10 0.000000e+00   None     0.00000

Summarise losses by year and calculated average expected loss



ann <-ylt[, lapply( .SD , sum), by=Year, .SDcols = c("Loss","layer1_loss") ] 

ann
#>      Year         Loss layer1_loss
#>     <int>        <num>       <num>
#>  1:     1 0.000000e+00     0.00000
#>  2:     2 9.708117e+02   500.00000
#>  3:     3 4.787487e+02   414.88473
#>  4:     4 5.124868e+02   371.56568
#>  5:     5 1.693177e+02    69.07311
#>  6:     6 3.154323e+03   737.14404
#>  7:     7 0.000000e+00     0.00000
#>  8:     8 0.000000e+00     0.00000
#>  9:     9 3.332927e-05     0.00000
#> 10:    10 0.000000e+00     0.00000

expected_loss <- ann[ , lapply(.SD, mean) , .SDcols = c("Loss","layer1_loss")      ]

expected_loss
#>        Loss layer1_loss
#>       <num>       <num>
#> 1: 528.5688    209.2668

Calculate OEP


ep <-create_oep_curve(ann , y= "Year", z="Loss")
ep
#>     return_period        OEP
#>             <num>      <num>
#>  1:         10000 3152.35781
#>  2:          5000 3150.39265
#>  3:          1000 3134.67137
#>  4:           500 3115.01976
#>  5:           250 3075.71656
#>  6:           200 3056.06496
#>  7:           100 2957.80695
#>  8:            50 2761.29093
#>  9:            25 2368.25890
#> 10:            10 1189.16280
#> 11:             5  604.15181
#> 12:             2   84.65886

calculate AAL and OEP