ODP bootstrap
odp_bootstrap_fit.RdOver-dispersed Poisson bootstrap of the chain ladder (England and Verrall
2002), as R ChainLadder's BootChainLadder(): adjusted Pearson residuals
of the volume-weighted chain ladder are resampled into pseudo triangles,
each is re-projected, and process error is added to every future
incremental value. The scale and residuals match BootChainLadder()
exactly, and the reserve distribution within Monte Carlo error
(validation/reference/reserving_bootstrap_r.csv).
Usage
odp_bootstrap_fit(ptr)
odp_bootstrap(
triangle,
column = NULL,
n_sims = 10000,
seed = 0,
process = c("gamma", "none")
)Arguments
- ptr
An
OdpBootstrapFitpointer; used internally.- triangle
A cumulative triangle, with any number of segments, every origin observed from the first age up to its latest.
- column
Name of the column to fit; by default the only one.
- n_sims
Number of simulations; positive.
- seed
Seed of the simulation streams, a non-negative whole number.
- process
Process error on each simulated future incremental value:
"gamma"(mean the expected value, variancescale * |mean|, R'sprocess.distr = "gamma") or"none"for parameter error only.
Details
Every segment of the triangle is bootstrapped on its own, with its own
residuals and scale, into one joint distribution of the reserves.
Simulation i uses random stream i of seed for every segment in
turn, so results do not depend on the number of threads.
Properties of the fit: chain_ladder (the chain_ladder_fit the
bootstrap is centred on), origins, development, fitted (fitted
incremental values) and residuals (adjusted Pearson residuals
(x - m) / sqrt(|m|) * sqrt(n / (n - p))), both origin x development
matrices with NA where not observed, scale (the dispersion phi) and
reserves, a predictive_distribution of the reserve with the
triangle's keys and origin as dimensions and one component per segment
and origin, so aggregate(boot@reserves, keep = "lob") keeps the
dependence between segments. mean(), quantile(), VaR() and
TVaR() of reserves describe the total reserve. Columns of
draw_matrix() follow origins. fitted, residuals and scale need
a single-segment fit: with several segments use segment(), or
totals_frame() for the scales.
See also
chain_ladder(), mack(); odp_one_year() for the one-year
view on the same bootstrap.
Examples
long <- data.frame(year = rep(2018:2021, 4:1),
age = c(12, 24, 36, 48, 12, 24, 36, 12, 24, 12),
paid = c(100, 150, 165, 170, 110, 170, 180, 120, 175, 130))
boot <- odp_bootstrap(triangle(long, "year", "age", "paid"), n_sims = 2000, seed = 42)
boot@scale
#> [1] 0.7286819
boot@reserves@keys
#> origin
#> 1 2018
#> 2 2019
#> 3 2020
#> 4 2021
mean(boot@reserves)
#> [1] 111.7906
quantile(boot@reserves, 0.995)
#> [1] 155.9527