Learn R Programming

ChainLadder (version 0.1.2-8)

MackChainLadder: Mack-Chain-Ladder Model

Description

The Mack-chain-ladder model forecasts IBNR (Incurred But Not Reported) claims based on a cumulative claims development triangle and estimates the standard error around it.

Usage

MackChainLadder(Triangle, weights = 1/Triangle,
tail=FALSE, est.sigma="log-linear")

Arguments

Triangle
cumulative claims triangle. A (mxn)-matrix $C_{ik}$ which is filled for $k \leq n+1-i; i=1,\ldots,m; m\geq n$, see qpaid for how to use (mxn)-development triangles with m
weights
weights. Default: 1/Triangle, to use volume weighted chain ladder factors.
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 estimate via a linear extrapolation of $log(chain ladder factors - 1)$, if tail is a nu
est.sigma
defines how to estimate $sigma_{n-1}$. Default is "log-linear" for a log-linear regression, "Mack" for Mack's approximation from his 1999 paper, or if a numeric value is given it will be used instead.

Value

  • MackChainLadder returns a list with the following elements
  • callmatched call
  • Triangleinput triangle of cumulative claims
  • FullTriangleforecasted full triangle
  • Modelslinear regression models for each development period
  • fchain-ladder-link-ratios
  • f.sestandard errors of the chain-ladder-link-ratios f (assumption CL1)
  • F.sestandard errors of the true chain-ladder-link-ratios $F_{ik}$ (square root of the variance in assumption CL2)
  • sigmasigma parameter in CL2
  • Mack.ProcessRiskvariability in the projection of future losses not explained by the variability of the link ratio estimators (unexplained variation)
  • Mack.ParameterRiskvariability in the projection of future losses explained by the variability of the link-ratio estimators alone (explained variation)
  • Mack.S.Etotal 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: $\mbox{Mack.S.E.}^2 = \mbox{Mack.ProcessRisk}^2 + \mbox{Mack.ParameterRisk}^2$
  • Total.Mack.S.Etotal variability of projected loss for all origin years combined
  • tailtail factor used. If tail was set to TRUE the output will include the linear model used to estimate the tail factor

Details

Following Mack's 1999 paper let $C_{ik}$ denote the cumulative loss amounts of origin period (e.g. accident year) $i=1,\ldots,m$, with losses known for development period (e.g. development year) $k \leq n+1-i$. In order to forecast the amounts $C_{ik}$ for $k > n+1-i$ the Mack chain-ladder-model assumes: $$\mbox{CL1: } E[ F_{ik}| C_{i1},C_{i2},\ldots,C_{ik} ] = f_k \mbox{ with } F_{ik}=\frac{C_{i,k+1}}{C_{ik}}$$ $$\mbox{CL2: } Var( \frac{C_{i,k+1}}{C_{ik}} | C_{i1},C_{i2}, \ldots,C_{ik} ) = \frac{\sigma_k^2}{w_{ik} C^\alpha_{ik}}$$ $$\mbox{CL3: } { C_{i1},\ldots,C_{in}}, { C_{j1},\ldots,C_{jn}},\mbox{ are independent for origin period } i \neq 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$.

References

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

See also qpaid, summary.MackChainLadder, plot.MackChainLadder, residuals.MackChainLadder, MunichChainLadder, BootChainLadder,

Examples

Run this code
# See the example in Mack's 1999 paper
Mortgage
MRT <- MackChainLadder(Mortgage, est.sigma="Mack", tail=1.05)
MRT
# Table 1
MRT$f
MRT$f.se
MRT$F.se[3,]
MRT$sigma
plot(MRT) # We observe trends along calendar years.

# Access process risk error
MRT$Mack.ProcessRisk

# Access parameter risk error
MRT$Mack.ParameterRisk

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)

# 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)
## Include a tail factor
GNIt <- MackChainLadder(GenIns, est.sigma="Mack", tail=TRUE)
## Extract more information on the tail factor
GNIt$tail 
  
# 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")

##

Run the code above in your browser using DataLab