SIMS <- 100000 SIZE <- 1 PROB <- 0.167 MU <- 14.979 SIGMA <- 0.371 THRESHOLD <- 3e6 L1.ATTACH <- 3e6 L1.DETACH <- 6e6 L1.AGGREGATE <- 9e6 L2.ATTACH <- 6e6 L2.DETACH <- 9e6 L2.AGGREGATE <- 12e6 # ***************************************************************** # Number of claims # ***************************************************************** nClaims <- rnbinom(SIMS, SIZE, PROB) totalClaims <- sum(nClaims) indexClaims <- rep(1:SIMS, times=nClaims) # ***************************************************************** # Severity of claims # ***************************************************************** # Total of claims to simulate from logNormal distr # Will throw away values less than threshold, so need more sims to # allow for those discarded nSims <- round(totalClaims / (1 - plnorm(THRESHOLD, MU, SIGMA)) * 1.2) claims <- rlnorm(nSims, MU, SIGMA) claims <- claims[claims>THRESHOLD] claims <- claims[1:totalClaims] # ***************************************************************** # Layer Calcs # ***************************************************************** layerOne <- pmax(pmin(claims, L1.DETACH) - L1.ATTACH, 0) layerTwo <- pmax(pmin(claims, L2.DETACH) - L2.ATTACH, 0) sumLayerOne <- tapply(layerOne, indexClaims, sum) sumLayerTwo <- tapply(layerTwo, indexClaims, sum) totLayerTwo <- totLayerOne <- rep(0, SIMS) totLayerOne[as.numeric(names(sumLayerOne))] <- sumLayerOne totLayerTwo[as.numeric(names(sumLayerTwo))] <- sumLayerTwo # ***************************************************************** # Contract Calcs # ***************************************************************** contractOne <- pmin(totLayerOne, L1.AGGREGATE) mean(contractOne)