Un billet rapide pour mettre en ligne des parties du code tapé en cours, mercredi dernier. On avait commencé par convertir la feuille du classeur excel en un fichier texte, pour faciliter la lecture,
> setwd("C:\\Users\\savsalledecours\\Desktop") > triangle=read.table("exACT2040.csv",header=TRUE,sep=";") > triangle ANNEE X0 X1 X2 X3 X4 X5 1 2000 3209 4372 4411 4428 4435 4456 2 2001 3367 4659 4696 4720 4730 NA 3 2002 3871 5345 5398 5420 NA NA 4 2003 4239 5917 6020 NA NA NA 5 2004 4929 6794 NA NA NA NA 6 2005 5217 NA NA NA NA NA
L’idée – quand on importe un triangle – est de récupérer une base sous la forme précédente, avec des valeurs manquantes dans la partie inférieure du triangle (on verra l’intérêt quand on fait une régression). On avait ensuite calculé les facteurs de transition, et en même temps complété le triangle,
> T=triangle[,2:7] > rownames(T)=triangle$ANNEE > T2=T > n=ncol(T) > L=rep(NA,n-1) > for(j in 1:(n-1)){ + L[j]=sum(T[1:(n-j),j+1])/sum(T[1:(n-j),j]) + T2[(n-j+1):n,j+1]=L[j]*T2[(n-j+1):n,j] + }
Les facteurs de transition sont ici,
> L [1] 1.380933 1.011433 1.004343 1.001858 1.004735
et le triangle complété
> T2 X0 X1 X2 X3 X4 X5 2000 3209 4372.000 4411.000 4428.000 4435.000 4456.000 2001 3367 4659.000 4696.000 4720.000 4730.000 4752.397 2002 3871 5345.000 5398.000 5420.000 5430.072 5455.784 2003 4239 5917.000 6020.000 6046.147 6057.383 6086.065 2004 4929 6794.000 6871.672 6901.518 6914.344 6947.084 2005 5217 7204.327 7286.691 7318.339 7331.939 7366.656
Le montant de provision est ici en faisant la différence entre la charge ultime (dans la dernière colonne) et les derniers paiements observés (sur la seconde diagonale)
> CU=T2[,n] > Pat=diag(as.matrix(T2[,n:1])) > Ri=CU-Pat > R=sum(Ri)
soit, numériquement
> R [1] 2426.985
On avait alors vu que l’on pouvait calculer un tail factor, en supposant une décroissance exponentielle des facteurs de transition, et on rajoutait alors une colonne correspondant au montant ultime, par année d’accident,
> logL=log(L-1) > t=1:5 > b=data.frame(logL,t) > reg=lm(logL~t,data=b) > logLp=predict(reg,newdata=data.frame(t=6:100)) > Lp=exp(logLp)+1 > Linf=prod(Lp) > T3=T2 > T3$Xinf=T3$X5*Linf
On a ici
> T3 X0 X1 X2 X3 X4 X5 Xinf 2000 3209 4372.000 4411.000 4428.000 4435.000 4456.000 4459.149 2001 3367 4659.000 4696.000 4720.000 4730.000 4752.397 4755.755 2002 3871 5345.000 5398.000 5420.000 5430.072 5455.784 5459.639 2003 4239 5917.000 6020.000 6046.147 6057.383 6086.065 6090.366 2004 4929 6794.000 6871.672 6901.518 6914.344 6947.084 6951.993 2005 5217 7204.327 7286.691 7318.339 7331.939 7366.656 7371.862
(je laisse reprendre le code pour calculer le montant de provisions). Enfin, on avait montré comment utiliser une régression pondérée, pour calculer les facteurs de transition,
> T4=as.matrix(T$X0,n,1) > for(j in 1:(n-1)){ + Y=T[,j+1] + X=T[,j] + base=data.frame(X,Y) + reg=lm(Y~0+X,weights=1/X) + T4=cbind(T4, + predict(reg, + newdata=data.frame(X=T4[,j] + ))) + }
Ce qui donnait la même projection que la méthode Chain Ladder
> T4 [,1] [,2] [,3] [,4] [,5] [,6] 1 3209 4431.414 4482.076 4501.543 4509.909 4531.263 2 3367 4649.601 4702.758 4723.184 4731.961 4754.367 3 3871 5345.591 5406.705 5430.188 5440.279 5466.039 4 4239 5853.775 5920.698 5946.414 5957.464 5985.673 5 4929 6806.619 6884.435 6914.337 6927.186 6959.986 6 5217 7204.327 7286.691 7318.339 7331.939 7366.656
La suite mercredi prochain, même si on risque d’aller très vite sur la méthode de Mack (et les calculs d’erreur quadratique moyenne pour arriver à la régression de Poisson). A suivre donc…
OpenEdition suggests that you cite this post as follows:
Arthur Charpentier (March 31, 2013). Chain Ladder, avec R. Freakonometrics. Retrieved December 3, 2024 from https://doi.org/10.58079/oups
merci
Charpentier – Chainladder