MackChainLadder {ChainLadder} | R Documentation |
The Mack-chain-ladder model forecasts reserves or IBNR (Incurred But Not Reported) claims based on a cumulative claims development triangle and estimates the standard error around it.
MackChainLadder(Triangle, weights = 1/Triangle, est.sigma="log-linear", tail=FALSE, tail.se=NULL, tail.sigma=NULL)
Triangle |
cumulative claims triangle. A (mxn)-matrix C_{ik}
which is filled for k <=q n+1-i; i=1,...,m; m>=q n , see
qpaid for how to use (mxn)-development triangles with
m<n, say higher development period frequency (e.g quarterly) than
origin period frequency (e.g accident years). |
weights |
weights. Default: 1/Triangle, to use volume weighted chain ladder factors. |
est.sigma |
defines how to estimate sigma_{n-1}, the variability of the individual age-to-age factors at development time n-1. Default is "log-linear" for a log-linear regression, "Mack" for Mack's approximation from his 1999 paper. Alternatively the user can provide a numeric value. |
tail |
can be logical or a numeric value.
If tail=FALSE no tail factor will be applied, if tail=TRUE
a tail factor will be estimated via a linear extrapolation of
log(chain ladder factors - 1), if tail is a numeric
value than this value will be used as tail factor. |
tail.se |
defines how to estimate the standard error of the tail factor. Only needed if
a tail factor > 1 is provided. Default is NULL . If tail.se is NULL ,
tail.se is estimated via "log-linear" regression, if tail.se is a numeric
value than this value will be used instead. |
tail.sigma |
defines how to estimate individual tail variability. Only needed if
a tail factor > 1 is provided.
Default is NULL . If tail.sigma is NULL ,
tail.sigma
is estimated via "log-linear" regression, if tail.sigma is a numeric
value than this value will be used instead |
Following Mack's 1999 paper let C_{ik} denote the cumulative loss amounts of origin period (e.g. accident year) i=1,...,m, with losses known for development period (e.g. development year) k <= n+1-i. In order to forecast the amounts C_{ik} for k > n+1-i the Mack chain-ladder-model assumes:
CL1: E[ F_ik| C_i1,C_i2,...,C_ik ] = f_k with F_ik=C_{i,k+1}/C_ik
CL2: Var( C_{i,k+1}/C_ik | C_i1, C_i2, ... ,C_ik ) = sigma_k^2/( w_ik C^alpha_ik)
CL3: { C_i1, ... ,C_in}, { C_j1, ... ,C_jn}, are independent for origin period i != j
with w_{ik} in [0;1], alpha in {0,1,2}. If these assumptions are hold, the Mack-chain-ladder-model gives an unbiased estimator for IBNR (Incurred But Not Reported) claims.
The Mack-chain-ladder model can be regarded as a weighted linear regression
through the origin for each development period:
lm(y ~ x + 0, weights=1/x)
,
where y
is the vector of claims at development period
k+1 and x
is the vector of claims at development period
k.
MackChainLadder returns a list with the following elements
call |
matched call |
Triangle |
input triangle of cumulative claims |
FullTriangle |
forecasted full triangle |
Models |
linear regression models for each development period |
f |
chain-ladder-link-ratios |
f.se |
standard errors of the chain-ladder-link-ratios f (assumption CL1) |
F.se |
standard errors of the true chain-ladder-link-ratios F_{ik} (square root of the variance in assumption CL2) |
sigma |
sigma parameter in CL2 |
Mack.ProcessRisk |
variability in the projection of future losses not explained by the variability of the link ratio estimators (unexplained variation) |
Mack.ParameterRisk |
variability in the projection of future losses explained by the variability of the link-ratio estimators alone (explained variation) |
Mack.S.E |
total variability in the projection of future losses by the chain ladder method; the square root of the mean square error of the chain ladder estimate: Mack.S.E.^2 = Mack.ProcessRisk^2 + Mack.ParameterRisk^2 |
Total.Mack.S.E |
total variability of projected loss for all origin years combined |
tail |
tail factor used. If tail was set to TRUE the output will include the linear model used to estimate the tail factor |
Additional references for further reading:
England, PD and Verrall, RJ. Stochastic Claims Reserving in General Insurance (with discussion), British Actuarial Journal 8, III. 2002
Murphy, Daniel M. Unbiased Loss Development Factors. Proceedings of the Casualty Actuarial Society Casualty Actuarial Society - Arlington, Virginia 1994: LXXXI 154-222.
Zehnwirth and Barnett. Best estimates for reserves. Proceedings of the CAS, LXXXVI I(167), November 2000.
Markus Gesmann markus.gesmann@gmail.com
Thomas Mack. Distribution-free calculation of the standard error of chain ladder reserve estimates. Astin Bulletin. Vol. 23. No 2. 1993. pp.213:225
Thomas Mack. The standard error of chain ladder reserve estimates: Recursive calculation and inclusion of a tail factor. Astin Bulletin. Vol. 29. No 2. 1999. pp.361:366
See also qpaid
,
summary.MackChainLadder
,
plot.MackChainLadder
,
residuals.MackChainLadder
,
MunichChainLadder
,
BootChainLadder
,
# See the Taylor/Ashe example in Mack's 1993 paper GenIns GNI <- MackChainLadder(GenIns, est.sigma="Mack") GNI$f GNI$sigma^2 GNI # compare to table 2 and 3 in Mack's 1993 paper plot(GNI) # See the example in Mack's 1999 paper Mortgage MRT <- MackChainLadder(Mortgage, tail=1.05, tail.sigma=71, tail.se=0.02, est.sigma="Mack") MRT # Table 1 in the above paper MRT$f MRT$f.se MRT$F.se[3,] MRT$sigma plot(MRT) # We observe trends along calendar years. # Table 2 in the above paper MRT$FullTriangle[,9]/1000 ## C_{i9} MRT$FullTriangle[,10]/1000 ## C_{i,ult} MRT$Mack.S.E[,9]/1000 ## s.e.(C_{i9}) # Access process risk error MRT$Mack.ProcessRisk # Access parameter risk error MRT$Mack.ParameterRisk # Total risk MRT$Mack.S.E op <- par(mfrow=c(2,1)) plot(with(summary(MRT)$ByOrigin, Mack.S.E/Ultimate),t="l", ylab="CV(Ultimate)", xlab="origin period") plot(summary(MRT)$ByOrigin[["CV(IBNR)"]], t="l", ylab="CV(IBNR)", xlab="origin period") par(op) # This data set is discussed many papers, e.g. England and Verall 2000 # paper, see Table 1 just there RAA R <- MackChainLadder(RAA) R plot(R) # Table 12 in England and Verall 2000 paper R$f R$sigma^2 # Table 13 in England and Verall 2000 paper # Please note the different indexing of sigma MackChainLadder(RAA, est.sigma=R$sigma[7]) # Table 14 in England and Verall 2000 paper MackChainLadder(RAA, est.sigma=R$sigma[8]) # Use lattice to plot the individual origin years longRAA <- expand.grid(origin=as.numeric(dimnames(RAA)$origin), dev=as.numeric(dimnames(RAA)$dev)) longRAA$value <- as.vector(R$FullTriangle) longRAA$valuePlusMack.S.E <- longRAA$value + as.vector(R$Mack.S.E) longRAA$valueMinusMack.S.E <- longRAA$value - as.vector(R$Mack.S.E) library(lattice) xyplot(valuePlusMack.S.E + valueMinusMack.S.E + value ~ dev | factor(origin), data=longRAA, t="l", col=c("red","red","black"), as.table=TRUE) # Different weights # Using 1/Triangle^2 as weight will use mean chain ladder ratios MackChainLadder(RAA, weights=1/RAA^2)$f apply(RAA[,-1]/RAA[,-10],2, mean, na.rm=TRUE) # Let's investigate the Mack model more detail R[["Models"]][[1]] # Model for first development period summary( R[["Models"]][[1]]) # Look at the model stats op <- par(mfrow=c(2,2)) # plot residuals plot( R[["Models"]][[1]]) par(op) # Let's include an intercept in our model newModel <- update(R[["Models"]][[1]], y ~ x+1, weights=1/R[["Triangle"]][1:9,1], data=data.frame(x=R[["Triangle"]][1:9,1], y=R[["Triangle"]][1:9,2]) ) # View the new model summary(newModel) op <- par(mfrow=c(2,2)) plot( newModel ) par(op) # Change the model for dev. period one to the newModel R2 <- R R2[["Models"]][[1]] <- newModel predict(R2) # predict the full triangle with the new model #(only the last origin year will be affected) R2[["FullTriangle"]] <- predict(R2) R2[["FullTriangle"]] R2 # Std. Errors have not been re-estimated! # Plot the result plot(R2, title="Changed R Model") ##