library(outilscoursglm)

On illustre l’approche développée dans [Esbjörn Ohlsson, Combining generalized linear models and credibility models in practice, Scandinavian Actuarial Journal 2008 (2008), no. 4, 301–314] pour traiter par une approche de crédibilité l’effet d’une variable catégorielle dans un modèle GLM log-Poisson.

On utilise un jeu de données retraité à partir d’un jeu de données synthétique dû à M. W"uthrich et C. Buser, lui-même inspiré du jeu de données freMTPL2freqdu paquet CASdatasets. Celui-ci ne comporte que des variables catégorielles, parmi lesquelles ct (représentant un canton suisse) va être traité par crédibilité.

load(url("https://irma.math.unistra.fr/~jberard/donnees_credib_GLM"))
str(donnees)
## 'data.frame':    213214 obs. of  9 variables:
##  $ age   : Factor w/ 62 levels "[18,20]","(20,21]",..: 7 25 30 31 41 8 45 46 19 22 ...
##  $ ac    : Factor w/ 22 levels "[0,1]","(1,2]",..: 1 1 1 1 1 2 1 2 14 14 ...
##  $ power : Factor w/ 11 levels "[0,1]","(1,2]",..: 1 1 1 1 1 1 2 2 2 2 ...
##  $ gas   : Factor w/ 2 levels "Diesel","Regular": 1 1 1 1 1 1 1 1 1 1 ...
##  $ brand : Factor w/ 11 levels "B1","B10","B11",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ area  : Factor w/ 6 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ ct    : Factor w/ 26 levels "AG","AI","AR",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ claims: num  0 0 0 0 0 0 0 0 0 0 ...
##  $ expo  : num  0.5 0.42 2 0.48 0.83 0.16 0.42 0.43 1.47 1.34 ...

On applique ensuite la méthode itérative d’estimation : on estime alternativement les effets aléatoires (via les équations de crédibilité de type Bühlmann-Straub) et les effets fixes (coefficients des variables autres que ct), jusqu’à la convergence apparente des valeurs estimées. (Ici, on se fixe comme critère d’arrêt une variation relative entre deux étapes consécutives inférieure à \(10^{-3}\), ce qui est atteint après \(4\) itérations.)

ajuste_cred <- ajuste_effet_cred_log_pois(formule = claims ~ age + ac + power + gas + brand + area,
                                 nom_rep = "claims",
                                 nom_expo = "expo",
                                 nom_var_cred = "ct",
                                 donnees = donnees)
## Itération 1 taux de variation max. =  0.2314655 
## Itération 2 taux de variation max. =  0.009572057 
## Itération 3 taux de variation max. =  0.002624635 
## Itération 4 taux de variation max. =  0.0007266273

Le résultat contient d’une part les effets fixes, ajustés dans la composante ajustement_autre_var, et d’autre part les effets aléatoires \(\hat{U}_j,\) estimés dans la composante U_j_hat.

summary(ajuste_cred[["ajustement_autres_var"]])
## 
## Call:
## glm(formula = formule_cred, family = poisson(link = "log"), data = donnees)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -1.049306   0.055725 -18.830  < 2e-16 ***
## age(20,21]   -0.304828   0.077550  -3.931 8.47e-05 ***
## age(21,22]   -0.450980   0.076100  -5.926 3.10e-09 ***
## age(22,23]   -0.589702   0.072461  -8.138 4.01e-16 ***
## age(23,24]   -0.820133   0.071600 -11.454  < 2e-16 ***
## age(24,25]   -0.938992   0.071624 -13.110  < 2e-16 ***
## age(25,26]   -0.953615   0.068573 -13.907  < 2e-16 ***
## age(26,27]   -1.046386   0.067210 -15.569  < 2e-16 ***
## age(27,28]   -0.967085   0.064032 -15.103  < 2e-16 ***
## age(28,29]   -1.067131   0.064161 -16.632  < 2e-16 ***
## age(29,30]   -1.114736   0.063433 -17.574  < 2e-16 ***
## age(30,31]   -1.175265   0.063508 -18.506  < 2e-16 ***
## age(31,32]   -1.167093   0.062662 -18.625  < 2e-16 ***
## age(32,33]   -1.183767   0.062869 -18.829  < 2e-16 ***
## age(33,34]   -1.102311   0.061554 -17.908  < 2e-16 ***
## age(34,35]   -1.073102   0.060616 -17.703  < 2e-16 ***
## age(35,36]   -1.162733   0.061218 -18.993  < 2e-16 ***
## age(36,37]   -1.156878   0.061220 -18.897  < 2e-16 ***
## age(37,38]   -1.149469   0.060658 -18.950  < 2e-16 ***
## age(38,39]   -1.135701   0.060953 -18.632  < 2e-16 ***
## age(39,40]   -1.195974   0.061696 -19.385  < 2e-16 ***
## age(40,41]   -1.096996   0.060130 -18.244  < 2e-16 ***
## age(41,42]   -1.115516   0.060490 -18.441  < 2e-16 ***
## age(42,43]   -1.099549   0.060476 -18.181  < 2e-16 ***
## age(43,44]   -1.127832   0.060877 -18.526  < 2e-16 ***
## age(44,45]   -1.056150   0.060228 -17.536  < 2e-16 ***
## age(45,46]   -1.152657   0.061599 -18.712  < 2e-16 ***
## age(46,47]   -1.181619   0.061723 -19.144  < 2e-16 ***
## age(47,48]   -1.062788   0.060171 -17.663  < 2e-16 ***
## age(48,49]   -1.061910   0.060206 -17.638  < 2e-16 ***
## age(49,50]   -1.099157   0.060470 -18.177  < 2e-16 ***
## age(50,51]   -1.124170   0.060226 -18.666  < 2e-16 ***
## age(51,52]   -1.118899   0.060000 -18.648  < 2e-16 ***
## age(52,53]   -1.128619   0.061299 -18.412  < 2e-16 ***
## age(53,54]   -1.111684   0.061232 -18.155  < 2e-16 ***
## age(54,55]   -1.133617   0.062444 -18.154  < 2e-16 ***
## age(55,56]   -1.153331   0.063347 -18.207  < 2e-16 ***
## age(56,57]   -1.222156   0.065661 -18.613  < 2e-16 ***
## age(57,58]   -1.177698   0.066673 -17.664  < 2e-16 ***
## age(58,59]   -1.302151   0.070490 -18.473  < 2e-16 ***
## age(59,60]   -1.292507   0.071692 -18.029  < 2e-16 ***
## age(60,61]   -1.194800   0.071261 -16.767  < 2e-16 ***
## age(61,62]   -1.346144   0.075540 -17.820  < 2e-16 ***
## age(62,63]   -1.382239   0.079866 -17.307  < 2e-16 ***
## age(63,64]   -1.379715   0.083343 -16.555  < 2e-16 ***
## age(64,65]   -1.362209   0.082378 -16.536  < 2e-16 ***
## age(65,66]   -1.249490   0.079633 -15.691  < 2e-16 ***
## age(66,67]   -1.373803   0.084169 -16.322  < 2e-16 ***
## age(67,68]   -1.471746   0.089472 -16.449  < 2e-16 ***
## age(68,69]   -1.366865   0.087459 -15.629  < 2e-16 ***
## age(69,70]   -1.313972   0.086618 -15.170  < 2e-16 ***
## age(70,71]   -1.407351   0.091051 -15.457  < 2e-16 ***
## age(71,72]   -1.286437   0.090264 -14.252  < 2e-16 ***
## age(72,73]   -1.340116   0.097257 -13.779  < 2e-16 ***
## age(73,74]   -1.486342   0.106839 -13.912  < 2e-16 ***
## age(74,75]   -1.203328   0.097791 -12.305  < 2e-16 ***
## age(75,76]   -1.298456   0.101784 -12.757  < 2e-16 ***
## age(76,77]   -1.348060   0.108108 -12.470  < 2e-16 ***
## age(77,78]   -1.227285   0.108532 -11.308  < 2e-16 ***
## age(78,80]   -1.378082   0.093926 -14.672  < 2e-16 ***
## age(80,82]   -1.182752   0.104127 -11.359  < 2e-16 ***
## age(82,90]   -1.053530   0.102726 -10.256  < 2e-16 ***
## ac(1,2]      -0.434912   0.022997 -18.911  < 2e-16 ***
## ac(2,3]      -0.615943   0.026270 -23.446  < 2e-16 ***
## ac(3,4]      -0.637433   0.028151 -22.643  < 2e-16 ***
## ac(4,5]      -0.638579   0.029784 -21.440  < 2e-16 ***
## ac(5,6]      -0.707001   0.032186 -21.966  < 2e-16 ***
## ac(6,7]      -0.764281   0.034231 -22.327  < 2e-16 ***
## ac(7,8]      -0.703392   0.033632 -20.914  < 2e-16 ***
## ac(8,9]      -0.711401   0.033780 -21.060  < 2e-16 ***
## ac(9,10]     -0.753722   0.032316 -23.323  < 2e-16 ***
## ac(10,11]    -0.668502   0.035031 -19.083  < 2e-16 ***
## ac(11,12]    -0.702767   0.036033 -19.504  < 2e-16 ***
## ac(12,13]    -0.746820   0.037897 -19.707  < 2e-16 ***
## ac(13,14]    -0.763463   0.040508 -18.847  < 2e-16 ***
## ac(14,15]    -0.768177   0.040946 -18.761  < 2e-16 ***
## ac(15,16]    -0.767848   0.050161 -15.308  < 2e-16 ***
## ac(16,17]    -0.671962   0.056364 -11.922  < 2e-16 ***
## ac(17,18]    -0.760507   0.069033 -11.017  < 2e-16 ***
## ac(18,19]    -0.894574   0.091291  -9.799  < 2e-16 ***
## ac(19,20]    -0.833846   0.107860  -7.731 1.07e-14 ***
## ac(20,23]    -0.715822   0.091384  -7.833 4.76e-15 ***
## ac(23,35]    -0.566027   0.096657  -5.856 4.74e-09 ***
## power(1,2]    0.259124   0.021267  12.185  < 2e-16 ***
## power(2,3]    0.247359   0.021406  11.556  < 2e-16 ***
## power(3,4]    0.137323   0.021138   6.497 8.22e-11 ***
## power(4,5]   -0.013279   0.030645  -0.433 0.664781    
## power(5,6]    0.307427   0.032353   9.502  < 2e-16 ***
## power(6,7]    0.226180   0.032411   6.979 2.98e-12 ***
## power(7,8]    0.114941   0.041346   2.780 0.005437 ** 
## power(8,9]   -0.077238   0.062472  -1.236 0.216326    
## power(9,10]  -0.061032   0.105268  -0.580 0.562067    
## power(10,12] -0.142799   0.080420  -1.776 0.075791 .  
## gasRegular    0.070735   0.013486   5.245 1.56e-07 ***
## brandB10      0.044430   0.045058   0.986 0.324105    
## brandB11      0.082186   0.049378   1.664 0.096023 .  
## brandB12      0.145973   0.020068   7.274 3.49e-13 ***
## brandB13      0.093892   0.048596   1.932 0.053347 .  
## brandB14     -0.121317   0.090038  -1.347 0.177854    
## brandB2      -0.061027   0.019547  -3.122 0.001796 ** 
## brandB3      -0.008353   0.026138  -0.320 0.749284    
## brandB4      -0.100648   0.036133  -2.785 0.005345 ** 
## brandB5       0.107051   0.029458   3.634 0.000279 ***
## brandB6       0.020790   0.033374   0.623 0.533330    
## areaB         0.073948   0.027312   2.708 0.006779 ** 
## areaC         0.135441   0.022268   6.082 1.18e-09 ***
## areaD         0.241187   0.022480  10.729  < 2e-16 ***
## areaE         0.322558   0.022847  14.118  < 2e-16 ***
## areaF         0.485060   0.051759   9.372  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 100634  on 213213  degrees of freedom
## Residual deviance:  96451  on 213105  degrees of freedom
## AIC: 143856
## 
## Number of Fisher Scoring iterations: 6
ajuste_cred[["U_j_hat"]]
##        AG        AI        AR        BE        BL        BS        FR        GE 
## 1.0280248 0.8550832 1.2333098 0.9896391 1.1215884 0.8758454 1.0393887 0.9513612 
##        GL        GR        JU        LU        NE        NW        OW        SG 
## 1.0317377 1.0272321 0.8295874 0.8840646 0.9515847 0.9164766 1.1685329 0.9049683 
##        SH        SO        SZ        TG        TI        UR        VD        VS 
## 0.8051277 1.1057791 1.1936811 0.7772451 0.9194772 1.0837836 0.9598272 1.0098885 
##        ZG        ZH 
## 1.0361970 1.1283263