{"word_count": 644, "character_count": 5423}
En tarification, il est possible d'utiliser d'autres logiciels que R, en particulier, il semble que l'on puisse faire deux ou trois choses avec SAS.... J'en parle un peu car il semble  que, paradoxalement, les asssureurs préfèrent encore SAS à R (par exemple). Et comme plusieurs étudiants m'avaient demandé "et comment on fait avec SAS ?". Bon, par contre je ne mets que les choses de base, parce que SAS est assez limité sur ce qu'il peut faire....Pour suivre un peu le plan du cours, la première étape est de définir une variable d'exposition dans la table,DATA contrats;SET lib.contrats;lnexpo = log(expo);run;Pour faire une régression de Poisson, ce n'est pas forcément compliqué,PROC GENMOD DATA = base;ODS OUTPUT ParameterEstimates=Genmod1_Param           Type3=Genmod1_Var           Modelfit=Genmod1_InfoModele; MODEL nbsin = ageconducteur /                  dist = poisson                     link = log                     offset = lnexpo                   type3;RUN; QUIT;La sortie SAS a alors l'allure suivante                                  The GENMOD Procedure                    Critère pour évaluer la qualité de l'ajustement              Critère                   DF          Valeur       Valeur/DF              Deviance                63E3      26872.5334          0.4237              Scaled Deviance         63E3      26872.5334          0.4237              Pearson Chi-Square      63E3      73275.5362          1.1553              Scaled Pearson X2       63E3      73275.5362          1.1553              Log Likelihood                   -18474.2667       Algorithm converged.                       Analyse des résultats estimés de paramètres                              Erreur      Wald 95LimitesParamètre    DF   Estimation   standard      de confiance %    Khi 2   Pr &#62; Khi 2Intercept     1      -3.5164     0.0851    -3.6832  -3.3496   1708.02       &#60;.0001ageconducteur 1       0.0168     0.0014     0.0141   0.0195    146.73       &#60;.0001Scale         0       1.0000     0.0000     1.0000   1.0000NOTE: The scale parameter was held fixed.                         Statistiques LR pour Analyse de Type 3                      Source           DF      Khi 2    Pr &#62; Khi 2                      ageconducteur     1     148.72        &#60;.0001Il est aussi possible de faire des GAM (i.e. du lissage de la variable explicative - continue - avec des fonctions splines)PROC GAM DATA = base;MODEL nbsin = spline(ageconducteur) / dist = Poisson;OUTPUT OUT=gam PREDICTED; RUN; QUIT;PROC SORT DATA = gam NODUPKEY; BY age_cond; RUN; QUIT;et on peut faire des prédictions avec ce modèle (la sortie n'apporte pas grand chose, en pratique),DATA gam;SET gam;pred_nbsin_gam = exp(P_nbsin);KEEP ageconducteur pred_nbsin_gam;RUN;Enfin, on peut tenter de faire un joli graphique. Pour cela, on calcule les prédictions de trois modèles, le premier étant des nombres moyens de sinistres par âgePROC SORT DATA = base; BY ageconducteur; RUN; QUIT;PROC MEANS DATA = base NOPRINT;BY ageconducteur;VAR nbsin;WEIGHT expo;OUTPUT OUT = nbsin_age (DROP = _TYPE_ _FREQ_) MEAN=moy_uni_nbsin;RUN; QUIT;ensuite, on fait un modèle GLM, et  un modèle GAM, et on récupère les sortiesPROC SORT DATA = nbsin_age; BY age_cond; RUN; QUIT;PROC SORT DATA = gam; BY age_cond; RUN; QUIT;DATA nbsin_age;MERGE nbsin_age      gam;BY age_cond;RUN;On essaye de faire le dessin (je passe les lignes de commande, il y en a une vingtaine)Pour faire une régression quasiPoisson, le code a l'allure suivante,sPROC GENMOD DATA = base;ODS OUTPUT ParameterEstimates=Genmod1bis_Param           Type3=Genmod1bis_Var           Modelfit=Genmod1bis_InfoModele; MODEL nbsin = ageconducteur /                 dist = poisson                   link = log                       offset = lnexpo                  type3                            scale = deviance;RUN; QUIT;La sortie donne alors l'estimation du paramètre de surdispersion (ou sur cet exemple de sousdispersion)                      Analyse des résultats estimés de paramètres                                   Erreur    Wald 95LimitesParamètre      DF   Estimation   standard    de confiance %     Khi 2   Pr &#62; Khi 2Intercept        1     -3.5164     0.0554  -3.6249  -3.4078   4031.29       &#60;.0001ageconducteur    1      0.0168     0.0009   0.0150   0.0186    346.32       &#60;.0001Scale            0      0.6509     0.0000   0.6509   0.6509On notera que pour calculer le critère d'Akaike, ça n'est pas forcément trivial,%MACRO CALCUL_AIC_BIC(infomodel=, param=);    DATA _null_;    SET &#38;infomodel.;    IF Criterion = "Log Likelihood" THEN CALL SYMPUT("Loglike", Value);    IF Criterion = "Deviance" THEN CALL SYMPUT("n_etoile", Df);    RUN;    DATA _null_;    SET &#38;param.  end=fin;    RETAIN nb_df 0;    nb_df = nb_df + df;    IF fin THEN CALL SYMPUT("k", nb_df);    RUN;    DATA genmod_aic_bic;    SET &#38;param.;    FORMAT Loglike 12.2 K 10. N 10. AIC_CALC 12.2 BIC_CALC 12.2;    Loglike = 0; K = 0; N = 0; AIC_CALC = 0; BIC_CALC = 0;    IF Parameter = "Intercept";    KEEP Loglike K N AIC_CALC BIC_CALC;    RUN;    DATA genmod_aic_bic;    SET genmod_aic_bic;    Loglike = &#38;loglike.;    K = &#38;k.;    N = %eval(&#38;n_etoile. + &#38;k.);    AIC_CALC = 2 * Loglike + 2 * K;    BIC_CALC = 2 * Loglike + K * log(N);    RUN;    PROC PRINT DATA = genmod_aic_bic;    RUN; QUIT;%MEND CALCUL_AIC_BIC;%CALCUL_AIC_BIC(infomodel=Genmod2_InfoModele, param=Genmod2_Param);