validating.incurred: Back-test: testing against the experience

View source: R/validating.incurred.R

validating.incurredR Documentation

Back-test: testing against the experience

Description

A back-test to validate incurred reserve (IDCL) against paid reserve (DCL) or the paid with a Bornhuetter-Fergusson adjustment (BDCL). The validation strategy consists of: (1) Cut ncut=1,2,. diagonals from the observed paid triangle. (2) Apply the three methods (DCL, BDCL and IDCL), and (3) compare forecasts and actual values.

Usage

validating.incurred( ncut = 0 , Xtriangle , Ntriangle , Itriangle , 
  Model = 0 , Plot.box = TRUE , Tables = TRUE , num.dec = 4 , 
  n.cal = NA , Fj.X = NA , Fj.N = NA , Fj.I = NA)

Arguments

ncut

The number of last periods (diagonals) to cut from the paid triangle. The default value is 0 (see details below).

Xtriangle

The paid run-off triangle: incremental aggregated payments. It should be a matrix with incremental aggregated payments located in the upper triangle and the lower triangle consisting in missing or zero values.

Ntriangle

The counts data triangle: incremental number of reported claims. It should be a matrix with the observed counts located in the upper triangle and the lower triangle consisting in missing or zero values. It should has the same dimension as Xtriangle (both in the same aggregation level (quarters, years,etc.))

Itriangle

The incurred triangle. It should be a matrix with incurred data located in the upper triangle. It is an incremental run-off triangle with the same dimension as Xtriangle (both in the same aggregation level (quarters, years,etc.))

Model

Possible values are 0, 1 or 2 (default). See more details below.

Plot.box

Logical. If TRUE (default) it is shown a boxplot of the errors in the cells predictions.

Tables

Logical. If TRUE (default) it is shown a table with the errors in the cells, diagonals and overall total predicion.

num.dec

Number of decimal places used to report numbers in the tables. Used only if Tables=TRUE.

n.cal

Integer specifying the number of most recent calendars which will be used to calculate the development factors. By default n.cal=NA and all the observed calendars are used (classical chain ladder).

Fj.X

Optional vector with lentgth m-1 (m being the dimension of the triangles) with the development factors to calculate the chain ladder estimates from Xtriangle. See more details in clm.

Fj.N

Optional vector with lentgth m-1 with the development factors to calculate the chain ladder estimates from Ntriangle.

Fj.I

Optional vector with lentgth m-1 with the development factors to calculate the chain ladder estimates from Itriangle.

Details

If ncut=0 the test is not computed but a plot showing the difference among the three methods is shown. It is recommended to start with this step to have some insight about the problem. Note that the first part in the IDCL inflation is usually very volatile since no many outstanding liabitities arise from the first underwriting periods.

The predicion errors provided through the value pe.vector are calculated as follow:

For individual cells: pe.cells = sum(ce.dif^2) / sum(ce.obs^2)

with ce.dif being the vector with the differences between the predicted cells and the actual cells (ce.obs).

For diagonals: pe.diags = sum(ca.dif^2) / sum(ca.obs^2)

with ca.dif being the vector with the differences between the predicted calendars and the actual calendars (ca.obs).

For the total reserve: pe.tot = sum(tot.dif^2) / sum(tot.obs^2)

with tot.dif the absolute difference between the predicted reserve and the actual reserve (tot.obs).

Value

pe.vector

A vector (length 10) with elements being (in the following order): ncut, the averaged errors predicing cells by DCL, BDCL and IDCL (see pe.cells in Details above), the three averaged errors by predicing diagonals (pe.diags), and the three errors by predicting the overal total (pe.tot).

Xdif

A matrix with the individual cells errors (see ce.dif in Details above) for each method (by columns)

Inflat.DCL

The estimated underwriting DCL inflation using dcl.estimation. Only provided if ncut=0.

Inflat.BDCL

The estimated underwriting BDCL inflation using bdcl.estimation. Only provided if ncut=0.

Inflat.IDCL

The estimated underwriting IDCL inflation using idcl.estimation. Only provided if ncut=0.

Note

To validate classical chain ladder on paid data against classical chain ladder on incurred data it should be used Model=0 (see dcl.predict) for more details.

Author(s)

M.D. Martinez-Miranda, J.P. Nielsen and R. Verrall

References

Martinez-Miranda, M.D., Nielsen, J.P. and Verrall, R. (2013) Double Chain Ladder and Bornhuetter-Ferguson. North Americal Actuarial Journal, 17(2), 101-113.

Martinez-Miranda M.D., Nielsen, J.P., Sperlich, S., Verrall, R. (2013). Continuous Chain Ladder: Reformulating and generalizing a classical insurance problem. Experts Systems with Applications, 40(14), 5588-5603.

See Also

dcl.estimation, bdcl.estimation, idcl.estimation, ,dcl.predict

Examples

data(NtriangleBDCL)
data(XtriangleBDCL)
data(ItriangleBDCL)

Ntriangle<-NtriangleBDCL
Xtriangle<-XtriangleBDCL
Itriangle<-ItriangleBDCL
## First compare the three methods to be validated (three different inflations)
validating.incurred(ncut=0,Xtriangle,Ntriangle,Itriangle)

## Now perform a backtest cutting up to four calendars backward
test.res<-matrix(NA,4,10)
par(mfrow=c(2,2),cex.axis=0.9,cex.main=1)
par(mar=c(1.5,1.5,1.5,1.5),oma=c(1,0.5,0.5,0.2),mgp=c(3,0.5,0)) 
for (i in 1:4)
{
  res<-validating.incurred(ncut=i,Xtriangle,Ntriangle,Itriangle,Tables=FALSE)
  test.res[i,]<-as.numeric(res$pe.vector)
}
test.res<-as.data.frame(test.res)
names(test.res)<-c("num.cut","pe.point.DCL","pe.point.BDCL","pe.point.IDCL",
"pe.calendar.DCL","pe.calendar.BDCL","pe.calendar.IDCL",
"pe.total.DCL","pe.total.BDCL","pe.total.IDCL")
print(test.res)

DCL documentation built on May 5, 2022, 5:06 p.m.