##################################################### ##################################################### ##### METHODES STATISTIQUES ##### ##### ET ##### ##### EXPLORATION DE DONNEES ##### ##### Chapitre 13 ##### ##### ARBRES BINAIRES ##### ##### (Version mars 2015) ##### ##################################################### ##################################################### # Fichiers de données utilisés (stockés dans le répertoire courant) : # "ozone.txt" 330 * 10 # "kanga.txt" 148 * 20 # # library utiles : rpart, MASS, faraway # # Tableau 2B - ozone : graphiques par paire des 10 variables. library(MASS) library(faraway) library(rpart) data(ozone) dim(ozone) dimnames(ozone)[[2]] summary(ozone) pairs(ozone,pch=".") # # Tableau 3 - ozone : arbre de régression de la concentration d’O3. (roz <- rpart(O3 ~ .,ozone)) # # Tableau 4 - ozone : graphe de l’arbre de régression avec # ses deux options et diagnostics. plot(roz,margin=.10) text(roz) # Autre option de sortie plot(roz,compress=T,uniform=T,branch=0.4,margin=.10) text(roz) # Diagnostics analogues à ceux de la régression linéaire plot(predict(roz),residuals(roz), xlab="Ajusté",ylab="Résidus") qqnorm(residuals(roz)) # # Tableau 5 - ozone : prévision à l’aide des résultats # fournis par l’arbre de régression. (x0 <- apply(ozone[,-1],2,median)) predict(roz,data.frame(t(x0))) post(roz,filename="") # Tableau 6a - ozone : élagage de l’arbre de régression. roze <- rpart(O3 ~ .,ozone,cp=0.001) printcp(roze) # # Tableau 6b - ozone : élagage de l’arbre de régression summary(roze, cp = 0.1) # Graphes des R2 en fonction des divisions plotcp(roze) # # Tableau 7 - kanga : données 3 espèces de kangourou. # Le fichier des données (kanga) est supposé chargé. library(MASS) library(faraway) library(rpart) data(kanga) dim(kanga) dimnames(kanga)[[2]] # Mesures du spécimen à identifier x0 <- c(1115,NA,748,182,NA,NA,178,311,756,226,NA,NA,NA,48,1009,NA,204,593) # Tableau 8 - kanga : individu à identifier. kanga <- kanga[,c(T,F,!is.na(x0))] # Valeurs des 2 premières observations kanga[1:2,] # Identification des valeurs manquantes dans l’échantillon apply(kanga,2,function(x) sum(is.na(x))) # # Tableau 9 - kanga : coefficients de corrélation de # palate.width et mandible.length avec les autres variables. round(cor(kanga[,-1],use="pairwise.complete.obs")[,c(3,9)],2) # #TABLEAU 10 - Comparaison des dimensions des fichiers selon # les variables supprimées fichier initial : kanga ; # fichier utilisé : newko. # Avec suppression de palate.width et mandible.length newko <- na.omit(kanga[,-c(4,10)]) dim(newko) # Avec suppression de toutes les observations incomplètes dim(na.omit(kanga)) # # TABLEAU 11 - newko : graphe de l’arbre de classement. kt <- rpart(species ~ ., data=newko) plot(kt,compress=T,uniform=T,branch=0.4,margin=0.1) text(kt) kt <- rpart(species ~ ., data=newko,cp=0.001) # Arbre optimal - validation croisée printcp(kt) # # Tableau 12 - newko : arbre de classement. ktp <- prune(kt,cp=0.0105) ktp plot(ktp,compress=T,uniform=T,branch=0.4,margin=0.1) text(ktp) # Calcul de l’erreur de mauvais classement (tt <- table(actual=newko$species,predicted=predict(ktp,type="class"))) # 1-sum(diag(tt))/sum(tt) # taux de mal-classés # # Tableau 13 - newko : arbre de classement avec # les composantes principales. pck <- princomp(newko[,-1]) pcdf <- data.frame(species=newko$species,pck$scores) kt <- rpart(species ~ ., pcdf,cp=0.001) printcp(kt) # # Tableau 14 - newko : classement du spécimen inconnu (x0). nx0 <- x0[!is.na(x0)] nx0 <- nx0[-c(3,9)] nx0 <- (nx0-pck$center)/pck$scale nx0 %*% pck$loadings ktp <- prune.rpart(kt,0.0421) # arbre optimal choisi ktp # # Tableau 15 - newko : classement du spécimen inconnu (x0). plot(ktp,compress=T,uniform=T,branch=0.4,margin=0.1) text(ktp) (tt <- table(newko$species,predict(ktp,type="class"))) 1-sum(diag(tt))/sum(tt) # tx de mauvais classement diminue ! # EXERCICES, fichiers à utiliser : Loup, Altise, Kangourou, # Nematodes, Eaux2010, BDDrelf.