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")

ylt
#>      Year         Loss  Event
#>     <int>        <num> <char>
#>  1:     1 3.198041e+02      3
#>  2:     2 8.139426e+02      2
#>  3:     2 4.156169e+02      5
#>  4:     3 0.000000e+00   None
#>  5:     4 1.967445e+01      7
#>  6:     4 8.239749e+02      5
#>  7:     4 1.804756e+00      6
#>  8:     5 0.000000e+00   None
#>  9:     6 1.425554e+01      8
#> 10:     6 4.781157e+01      3
#> 11:     6 3.570116e+02      5
#> 12:     6 6.673875e-01      6
#> 13:     6 1.097922e+03      5
#> 14:     6 1.308999e+03      1
#> 15:     7 5.913894e-04      2
#> 16:     7 7.072303e+02      5
#> 17:     8 0.000000e+00   None
#> 18:     9 3.025740e+00      1
#> 19:     9 2.382902e+02      1
#> 20:    10 3.557453e+02      8
#> 21:    10 6.470248e+00      6
#>      Year         Loss  Event

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 3.198041e+02      3    269.8041
#>  2:     2 8.139426e+02      2    500.0000
#>  3:     2 4.156169e+02      5    365.6169
#>  4:     3 0.000000e+00   None      0.0000
#>  5:     4 1.967445e+01      7      0.0000
#>  6:     4 8.239749e+02      5    500.0000
#>  7:     4 1.804756e+00      6      0.0000
#>  8:     5 0.000000e+00   None      0.0000
#>  9:     6 1.425554e+01      8      0.0000
#> 10:     6 4.781157e+01      3      0.0000
#> 11:     6 3.570116e+02      5    307.0116
#> 12:     6 6.673875e-01      6      0.0000
#> 13:     6 1.097922e+03      5    500.0000
#> 14:     6 1.308999e+03      1    500.0000
#> 15:     7 5.913894e-04      2      0.0000
#> 16:     7 7.072303e+02      5    500.0000
#> 17:     8 0.000000e+00   None      0.0000
#> 18:     9 3.025740e+00      1      0.0000
#> 19:     9 2.382902e+02      1    188.2902
#> 20:    10 3.557453e+02      8    305.7453
#> 21:    10 6.470248e+00      6      0.0000
#>      Year         Loss  Event layer1_loss

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  319.8041    269.8041
#>  2:     2 1229.5595    865.6169
#>  3:     3    0.0000      0.0000
#>  4:     4  845.4541    500.0000
#>  5:     5    0.0000      0.0000
#>  6:     6 2826.6669   1307.0116
#>  7:     7  707.2309    500.0000
#>  8:     8    0.0000      0.0000
#>  9:     9  241.3160    188.2902
#> 10:    10  362.2155    305.7453

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

expected_loss
#>        Loss layer1_loss
#>       <num>       <num>
#> 1: 653.2247    393.6468

Calculate OEP


ep <-create_oep_curve(ann , y= "Year", z="Loss")
ep
#>     return_period       OEP
#>             <num>     <num>
#>  1:         10000 2825.2295
#>  2:          5000 2823.7921
#>  3:          1000 2812.2930
#>  4:           500 2797.9190
#>  5:           250 2769.1710
#>  6:           200 2754.7971
#>  7:           100 2682.9272
#>  8:            50 2539.1876
#>  9:            25 2251.7082
#> 10:            10 1389.2702
#> 11:             5  922.2752
#> 12:             2  341.0098

calculate AAL and OEP