Mardi, avant de parler de la régression poissonienne, on va revenir un peu sur les modèles binomiaux, et présenter les arbres de régression. Pour la théorie, je peux renvoyer vers des notes de cours sur internet (ici, , ou encore) mais je présenterais les grandes idées au tableau. Pour le code, c'est assez facile
> sinistre=read.table("http://freakonometrics.free.fr/sinistreACT2040.txt",
+ header=TRUE,sep=";")
> sinistres=sinistre[sinistre$garantie=="1RC",]
> contrat=read.table("http://freakonometrics.free.fr/contractACT2040.txt",
+ header=TRUE,sep=";")
> T=table(sinistres$nocontrat)
> T1=as.numeric(names(T))
> T2=as.numeric(T)
> nombre1 = data.frame(nocontrat=T1,nbre=T2)
> I = contrat$nocontrat%in%T1
> T1= contrat$nocontrat[I==FALSE]
> nombre2 = data.frame(nocontrat=T1,nbre=0)
> nombre=rbind(nombre1,nombre2)
> base = merge(contrat,nombre)
> Y = base$nbre>0
> X1 = base$ageconducteur
> library(tree)
> arbre=tree(Y~X1,split="gini")
> plot(arbre)
> text(arbre,cex=.8)

Pour élaguer, il y a plusieurs méthodes, mais le plus simple est de demander de constituer des classes avec suffisamment de monde dedans,
> arbre=tree(Y~X1,split="gini", mincut = 5000)
> plot(arbre)
> text(arbre,cex=.8)

On peut bien sûr rajouter plusieurs variables (qualitatives comme quantitatives),
> age=base$ageconducteur
> car=base$agevehicule
> region=base$zone
> arbre=tree(Y~age+car+region,split="gini", mincut = 2600)
> plot(arbre)
> text(arbre,cex=.8)

Pour mieux comprendre la mise en œuvre pratique, et l'algorithme itératif qui se cache derrière, on peut utiliser le code suivant, calculant la distance du chi-deux, l'entropie, ou le critère de Gini
> u=sort(unique(base$ageconducteur))
> base$Y = base$nbre>0
> gini=entropie=chideux=rep(NA,length(u))
> for(i in 2:(length(u))){
+ I=base$ageconducteur<(u[i]-.5)
+ ft1=sum(base$Y[I==TRUE])/nrow(base)
+ ff1=sum(base$Y[I==FALSE])/nrow(base)
+ ft0=sum(1-base$Y[I==TRUE])/nrow(base)
+ ff0=sum(1-base$Y[I==FALSE])/nrow(base)
+ M=matrix(c(ft0,ff0,ft1,ff1),2,2)
+ ft=ft0+ft1
+ f0=ft0+ff0
+ Mind=matrix(c(ft*f0,f0*(1-ft),(1-f0)*ft,(1-f0)*(1-ft)),2,2)
+ Q=sum(nrow(B)*(M-Mind)^2/Mind)
+ entropie[i] = -((ft1+ft0)*(ft1/(ft1+ft0)*log(ft1/(ft1+ft0))+
+ ft0/(ft1+ft0)*log(ft0/(ft1+ft0))) +
+ (ff1+ff0)*(ff1/(ff1+ff0)*log(ff1/(ff1+ff0))+
+ ff0/(ff1+ff0)*log(ff0/(ff1+ff0)))
+ )
+
+ gini[i] = -((ft1+ft0)*(ft1/(ft1+ft0)*(1-ft1/(ft1+ft0))+
+ ft0/(ft1+ft0)*(1-ft0/(ft1+ft0))) +
+ (ff1+ff0)*(ff1/(ff1+ff0)*(1-ff1/(ff1+ff0))+
+ ff0/(ff1+ff0)*(1-ff0/(ff1+ff0))))
+
+ chideux[i] = Q
+ }
> plot(u-.5,entropie,type="b",pch=19,col="blue",
+ ylab="Entropie ou déviance",xlab="Age du conducteur")
> n=which.min(entropie)
> points(u[n]-.5,entropie[n],pch=19,col="red",cex=1.5)
Pour rappel, les trois critères sont données par les relations suivantes. Pour le critère du chi-deux,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-01.png
où, classiquement
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-02.png
pour le découpage en deux classes, puis
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-05.png
pour le découpage en trois classes, etc. Pour l'entropie,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-03.png
avec deux classes, ou, si on a trois classes,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-06.png
Enfin le critère de Gini,
L'image “http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-04.png” ne peut être affichée car elle contient des erreurs.
avec deux classes, ou avec trois,

http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-07.png