library(ChainLadder)
rm=list(ls())
source("http://freakonometrics.free.fr/bases.R")
#ls() #list of data
PAID #cumulative paid claims for AY i after j-1 years
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 3209 4372 4411 4428 4435 4456
[2,] 3367 4659 4696 4720 4730 NA
[3,] 3871 5345 5398 5420 NA NA
[4,] 4239 5917 6020 NA NA NA
[5,] 4929 6794 NA NA NA NA
[6,] 5217 NA NA NA NA NA
NUMBER #declared in year i after j-1 years
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1043.4 1045.5 1047.5 1047.7 1047.7 1047.7
[2,] 1043.0 1027.1 1028.7 1028.9 1028.7 NA
[3,] 965.1 967.9 967.8 970.1 NA NA
[4,] 977.0 984.7 986.8 NA NA NA
[5,] 1099.0 1118.5 NA NA NA NA
[6,] 1076.3 NA NA NA NA NA
INCURRED
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 4975 4629 4497 4470 4456 4456
[2,] 5135 4949 4783 4760 4750 NA
[3,] 5681 5631 5492 5470 NA NA
[4,] 6272 6198 6131 NA NA NA
[5,] 7326 7087 NA NA NA NA
[6,] 7353 NA NA NA NA NA
(CASE.OUTSTANDING <- INCURRED-PAID)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1766 257 86 42 21 0
[2,] 1768 290 87 40 20 NA
[3,] 1810 286 94 50 NA NA
[4,] 2033 281 111 NA NA NA
[5,] 2397 293 NA NA NA NA
[6,] 2136 NA NA NA NA NA
#STEP 1:
PAID
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 3209 4372 4411 4428 4435 4456
[2,] 3367 4659 4696 4720 4730 NA
[3,] 3871 5345 5398 5420 NA NA
[4,] 4239 5917 6020 NA NA NA
[5,] 4929 6794 NA NA NA NA
[6,] 5217 NA NA NA NA NA
#STEP 2-3-4 (we will only use simple average) :
#CHAIN LADDER/DEVELOPMENT
D12.24 <- sum(PAID[1:5,2])/sum(PAID[1:5,1])
D24.36 <- sum(PAID[1:4,3])/sum(PAID[1:4,2])
D36.48 <- sum(PAID[1:3,4])/sum(PAID[1:3,3])
D48.60 <- sum(PAID[1:2,5])/sum(PAID[1:2,4])
D60.72 <- sum(PAID[1:1,6])/sum(PAID[1:1,5])
#STEP 6 (Cumulative Development Factors) :
Cult <- 1
#under the assumption that no more development after 72 months
C60 <- D60.72
C48 <- D60.72*D48.60
C36 <- D60.72*D48.60*D36.48
C24 <- D60.72*D48.60*D36.48*D24.36
C12 <- D60.72*D48.60*D36.48*D24.36*D12.24
Dev.Fact <- c(C12,C24,C36,C48,C60,Cult)
#STEP 7 (Project Ultimate Claims) :
c(C12,C24,C36,C48,C60,Cult)^-1
[1] 0.7081910 0.9779643 0.9891449 0.9934411 0.9952873 1.0000000
Ult.1 <- PAID[6,1]*C12
Ult.2 <- PAID[5,2]*C24
Ult.3 <- PAID[4,3]*C36
Ult.4 <- PAID[3,4]*C48
Ult.5 <- PAID[2,5]*C60
Ult.6 <- PAID[1,6]*Cult
c(Ult.1,Ult.2,Ult.3,Ult.4,Ult.5,Ult.6)
[1] 7366.656 6947.084 6086.065 5455.784 4752.397 4456.000
#IBNR=UNPAID assuming PAID=REPORTED
c(Ult.1-PAID[6,1],Ult.2-PAID[5,2],Ult.3-PAID[4,3],Ult.4-PAID[3,4],
Ult.5-PAID[2,5],Ult.6-PAID[1,6])
[1] 2149.65640 153.08358 66.06466 35.78388 22.39684 0.00000
c(L1,L2,L3,L4)
[1] 2.087074 1.379946 1.147869 1.064478
c(I1,I2,I3,I4)
[1] 2.195918 1.427006 1.158336 1.064478 2.149065 1.389283 1.138382 NA
[9] 2.041704 1.347161 NA NA 2.037584 NA NA NA
#Arithmetic Average
A1 <- (I1[1]+I2[1]+I3[1]+I4[1])/4
A2 <- (I1[2]+I2[2]+I3[2])/3
A3 <- (I1[3]+I2[3])/2
A4 <- I1[4]
c(A1,A2,A4,A4)
[1] 2.106068 1.387816 1.064478 1.064478
#Geometric mean
G1 <- (I1[1]*I2[1]*I3[1]*I4[1])^0.25
G2 <- (I1[2]*I2[2]*I3[2])^(1/3)
G3 <- (I1[3]*I2[3])^(0.5)
G4 <- I1[4]
c(G1,G2,G3,G4)
[1] 2.104958 1.387433 1.148316 1.064478
#Weigthed Average
W1 <- (I1[1]*Y1[1]+I2[1]*Y2[1]+I3[1]*Y3[1]+I4[1]*Y4[1])/(Y1[1]+Y2[1]+Y3[1]+Y4[1])
W2 <- (I1[2]*Y1[2]+I2[2]*Y2[2]+I3[2]*Y3[2])/(Y1[2]+Y2[2]+Y3[2])
W3 <- (I1[3]*Y1[3]+I2[3]*Y2[3])/(Y1[3]+Y2[3])
W4 <- I1[4]*Y1[4]/Y1[4]
c(W1,W2,W3,W4)
[1] 2.087074 1.379946 1.147869 1.064478
#Remove min
RMin1 <- (I1[1]+I2[1]+I3[1])/3
RMin2 <- (I1[2]+I2[2])/2
RMin3 <- I1[3]
RMin4 <- I1[4]
#Remove max
RMax1 <- (I4[1]+I2[1]+I3[1])/3
RMax2 <- (I3[2]+I2[2])/2
RMax3 <- I2[3]
RMax4 <- I1[4]
#CL 4200001.221.161.081.04-420000 #BF 10000000.6(1-1/(1.221.161.081.04)) 10000000.4(1/(1.221.161.081.04))
<!-- rnb-text-end -->
<!-- rnb-chunk-begin -->
<!-- rnb-output-begin eyJkYXRhIjoiXG48IS0tIHJuYi1zb3VyY2UtYmVnaW4gZXlKa1lYUmhJam9pWUdCZ2NseHVJMFY0WVcxd2JHVWdRMHhjYmxreElEd3RJR01vTVRBd0xDQXhOVEFzSURFM05Td2dNVGd3SUN3Z01qQXdLVnh1V1RJZ1BDMGdZeWd4TVRBc0lERTJPQ3dnTVRreUxDQXlNRFVzSUU1QklDbGNibGt6SUR3dElHTW9NVEUxTENBeE5qa3NJREl3TWl3Z1RrRXNJRTVCS1Z4dVdUUWdQQzBnWXlneE1qVXNJREU0TlN3Z1RrRXNJRTVCTENCT1FTbGNibGsxSUR3dElHTW9NVFV3TENCT1FTd2dUa0VzSUU1QkxDQk9RU2tnWEc1Y2JrTlZUU0E4TFNCdFlYUnlhWGdvWXloWk1TeFpNaXhaTXl4Wk5DeFpOU2tzYm1OdmJEMDFMRzV5YjNjOU5Td2dZbmx5YjNjOU1TQXBYRzVNTVNBOExTQnpkVzBvUTFWTld6RTZOQ3d5WFNrdmMzVnRLRU5WVFZzeE9qUXNNVjBwWEc1TU1pQThMU0J6ZFcwb1ExVk5XekU2TXl3elhTa3ZjM1Z0S0VOVlRWc3hPak1zTWwwcFhHNU1NeUE4TFNCemRXMG9RMVZOV3pFNk1pdzBYU2t2YzNWdEtFTlZUVnN4T2pJc00xMHBYRzVNTkNBOExTQnpkVzBvUTFWTld6RTZNU3cxWFNrdmMzVnRLRU5WVFZzeE9qRXNORjBwWEc1aktFd3hMRXd5TEV3ekxFdzBLVnh1WUdCZ0luMD0gLS0+XG5cbmBgYHJcbiNFeGFtcGxlIENMXG5ZMSA8LSBjKDEwMCwgMTUwLCAxNzUsIDE4MCAsIDIwMClcblkyIDwtIGMoMTEwLCAxNjgsIDE5MiwgMjA1LCBOQSApXG5ZMyA8LSBjKDExNSwgMTY5LCAyMDIsIE5BLCBOQSlcblk0IDwtIGMoMTI1LCAxODUsIE5BLCBOQSwgTkEpXG5ZNSA8LSBjKDE1MCwgTkEsIE5BLCBOQSwgTkEpIFxuXG5DVU0gPC0gbWF0cml4KGMoWTEsWTIsWTMsWTQsWTUpLG5jb2w9NSxucm93PTUsIGJ5cm93PTEgKVxuTDEgPC0gc3VtKENVTVsxOjQsMl0pL3N1bShDVU1bMTo0LDFdKVxuTDIgPC0gc3VtKENVTVsxOjMsM10pL3N1bShDVU1bMTozLDJdKVxuTDMgPC0gc3VtKENVTVsxOjIsNF0pL3N1bShDVU1bMToyLDNdKVxuTDQgPC0gc3VtKENVTVsxOjEsNV0pL3N1bShDVU1bMToxLDRdKVxuYyhMMSxMMixMMyxMNClcbmBgYFxuXG48IS0tIHJuYi1zb3VyY2UtZW5kIC0tPlxuIn0= -->
<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuI0V4YW1wbGUgQ0xcblkxIDwtIGMoMTAwLCAxNTAsIDE3NSwgMTgwICwgMjAwKVxuWTIgPC0gYygxMTAsIDE2OCwgMTkyLCAyMDUsIE5BIClcblkzIDwtIGMoMTE1LCAxNjksIDIwMiwgTkEsIE5BKVxuWTQgPC0gYygxMjUsIDE4NSwgTkEsIE5BLCBOQSlcblk1IDwtIGMoMTUwLCBOQSwgTkEsIE5BLCBOQSkgXG5cbkNVTSA8LSBtYXRyaXgoYyhZMSxZMixZMyxZNCxZNSksbmNvbD01LG5yb3c9NSwgYnlyb3c9MSApXG5MMSA8LSBzdW0oQ1VNWzE6NCwyXSkvc3VtKENVTVsxOjQsMV0pXG5MMiA8LSBzdW0oQ1VNWzE6MywzXSkvc3VtKENVTVsxOjMsMl0pXG5MMyA8LSBzdW0oQ1VNWzE6Miw0XSkvc3VtKENVTVsxOjIsM10pXG5MNCA8LSBzdW0oQ1VNWzE6MSw1XSkvc3VtKENVTVsxOjEsNF0pXG5jKEwxLEwyLEwzLEw0KVxuYGBgIn0= -->
```r
#Example CL
Y1 <- c(100, 150, 175, 180 , 200)
Y2 <- c(110, 168, 192, 205, NA )
Y3 <- c(115, 169, 202, NA, NA)
Y4 <- c(125, 185, NA, NA, NA)
Y5 <- c(150, NA, NA, NA, NA)
CUM <- matrix(c(Y1,Y2,Y3,Y4,Y5),ncol=5,nrow=5, byrow=1 )
L1 <- sum(CUM[1:4,2])/sum(CUM[1:4,1])
L2 <- sum(CUM[1:3,3])/sum(CUM[1:3,2])
L3 <- sum(CUM[1:2,4])/sum(CUM[1:2,3])
L4 <- sum(CUM[1:1,5])/sum(CUM[1:1,4])
c(L1,L2,L3,L4)
#Example BF
R.2011 <- c(26,40,48,51)
R.2012 <- c(40,43,51)
R.2013 <- c(44,67)
R.2014 <- c(69)
l3 <- 51/48
l2 <- (48+51)/(40+43)
l1 <- (40+43+67)/(44+40+26)
c(l1,l2,l3)
c.ult <- l1*l2*l3
200*0.51*(1-1/c.ult) + 69
library(ChainLadder)
## Building the database
pmt <- c(100 ,200 ,325 ,350 ,125 ,225 ,335 ,75 ,175 ,50)
Year <- c(1,2,3,4,1,2,3,1,2,1)
Delay <- c(1,1,1,1,2,2,2,3,3,4)
dda <- data.frame(ptm = pmt , Year = Year , Delay = Delay)
### quasi -Poisson model fit
model2 <- glm(pmt ~ as.factor(Year) + as.factor(Delay),
family = quasipoisson, data = dda)
summary(model2)
tri <- matrix(c(425,532,717,440,620,522,657,730,560,NA,612,714,802,
NA,NA,714,732,NA,NA,NA,730,NA,NA,NA,NA), ncol = 5)
triINC <- cum2incr(tri)
pmt <- c(425, 532, 717, 440, 620, 97,125, 13, 120, 90, 57, 72, 102, 18, 16)
Year <- as.factor(c(1,2,3,4,5,1,2,3,4,1,2,3,1,2,1))
Delay <- as.factor(c(1,1,1,1,1,2,2,2,2,3,3,3,4,4,5))
dda <- data.frame(pmt = pmt, Year = Year, Delay = Delay)
model2 <- glm(pmt ~ Year + Delay, family = quasipoisson, data = dda)
summary(model2)
ddaNEW <- data.frame(Year = as.factor(c(1,2,3,4,5,1,2,3,4,5,1,2,3,
4,5,1,2,3,4,5,1,2,3,4,5)), Delay = as.factor(c(1,1,1,1,1,
2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5)))
ddaNEW$pred <- predict(model2, newdata = ddaNEW, type = "response")
matrix(ddaNEW$pred, ncol = 5)
104.11542 + 83.07034 + 73.04849 + 19.72514 + 64.24306 +
56.49258 + 15.25458+ 72.57919 + 19.59841 + 16.40336
#Var1 = 0
#Var2 = 16,40
#Var3 = 72,57919 + 19,59841 = 92,1776
#Var4 = 64,24306 + 56,49258 + 15,25458 = 135,9902
#Var5 = 104,11542 + 83,07034 + 73,04849 + 19,72514 = 279,9594.