Vous êtes sur la page 1sur 15

Ricco.Rakotomalala http://eric.univ-lyon2.

fr/~ricco/cours

R.R. Universit Lyon 2

Fichier de donnes
Prdiction de la consommation de vhicules

(1) (2) (3) (4) (5)

Prdire la consommation des vhicules partir de ses caractristiques Diagnostic de la rgression avec les graphiques des rsidus Dtection et traitement des points atypiques Dtection de la colinarit Slection de variables
prix 11600 12490 10450 17140 14825 13730 19490 285000 183900 92500 25000 22350 36600 22500 31580 28750 22600 20300 19900 39800 19740 38990 50800 36200 31990 47700 36950 26950 36400 50900 49300 cylindree 846 993 899 1390 1195 658 1331 5474 5987 2789 1597 1761 2165 1983 1984 1998 1580 1390 1396 2435 1242 2972 2958 2497 1998 2496 1998 1997 1984 2438 2473 puissance 32 39 29 44 33 32 55 325 300 209 74 74 101 85 85 89 65 54 66 106 55 107 150 122 66 125 89 92 85 97 125 Poids 650 790 730 955 895 740 1010 1690 2250 1485 1080 1100 1500 1075 1155 1140 1080 1110 1140 1370 940 1400 1550 1330 1300 1670 1560 1240 1635 1800 1570 conso 5.7 5.8 6.1 6.5 6.8 6.8 7.1 21.3 18.7 14.5 7.4 9.0 11.7 9.5 9.5 8.8 9.3 8.6 7.7 10.8 6.6 11.7 11.9 10.8 7.6 11.3 10.8 9.2 11.6 12.8 12.7

modele Daihatsu Cuore Suzuki Swift 1.0 GLS Fiat Panda Mambo L VW Polo 1.4 60 Opel Corsa 1.2i Eco Subaru Vivio 4WD Toyota Corolla Ferrari 456 GT Mercedes S 600 Maserati Ghibli GT Opel Astra 1.6i 16V Peugeot 306 XS 108 Renault Safrane 2.2. V Seat Ibiza 2.0 GTI VW Golt 2.0 GTI Citroen ZX Volcane Fiat Tempra 1.6 Liberty Fort Escort 1.4i PT Honda Civic Joker 1.4 Volvo 850 2.5 Ford Fiesta 1.2 Zetec Hyundai Sonata 3000 Lancia K 3.0 LS Mazda Hachtback V Mitsubishi Galant Opel Omega 2.5i V6 Peugeot 806 2.0 Nissan Primera 2.0 Seat Alhambra 2.0 Toyota Previa salon Volvo 960 Kombi aut

R.R. Universit Lyon 2

Chargement des donnes et statistiques descriptives


#dans ce format, le sparateur est tabulation, la premire ligne contient #le nom des variables, le point dcimal est ".", la premire colonne est #le nom des observations autos <- read.table(file="automobiles.txt",sep="\t",header=TRUE,dec=".",row.names=1) #pour afficher les donnes autos #pour afficher les valeurs de la Fiat Panda Mambo L, on peut crire autos["Fiat Panda Mambo L",] #pour obtenir la liste des noms de vhicules row.names(autos) #petit rsum des donnes summary(autos) #nombre de lignes et de colonnes dans le data.frame print(nrow(autos)) print(ncol(autos))

R.R. Universit Lyon 2

Statistiques descriptives - Graphiques


#histogramme des variables #fractionne la fentre graphique en portions rectangulaires par(mfrow=c(2,3)) for (j in 1:5) {hist(autos[,j],main=names(autos)[j])} #boxplot des variables par(mfrow=c(2,3)) for (j in 1:5) {boxplot(autos[,j],main=names(autos)[j])} #supprimer le fractionnement layout(1) #nuage de points 2 2 pairs(autos)

Histogrammes
prix
25 15

Botes moustaches
puissance
15

cylindree

prix
6000

cylindree

puissance

250000

20

5000

10

4000

10

Frequency

Frequency

Frequency

150000

3000

10

2000

50000

1000

100000

200000

300000

0 1000

3000 autos[, j]

5000

50

150 autos[, j]

250

350

autos[, j]

poids

conso

poids

conso

2000

Frequency

Frequency

1500

1000

1500 autos[, j]

2000

10

15

20

autos[, j]

1000

1000

3000

5000

10

15

20

1000

2000 250000

5000

1000

3000

cylindree

Nuages de points (2 2)
2000

poids
1000

conso

100000

250000

50

150

250

10

15

20

10

15

20

50

150

puissance

250

100000

prix

50

100

150

200

15

250

300

R.R. Universit Lyon 2

Rgression linaire multiple


reg <- lm(conso ~ prix + cylindree + puissance + poids, autos) print(reg) attributes(reg) resume <- summary(reg) print(resume) attributes(resume) print(resume$coefficients) nrow(resume$coefficients) print(resume$coefficients[1,"Std. Error"]) print(resume$coefficients[1,2])
Lancer la rgression, on obtient un objet rgression de type list , on a accs aux champs que lon peut manipuler directement

Objet rsum de la rgression . On peut accder ses champs, que lon peut aussi manipuler directement (ex. les coefficients de la rgression, les carts-type des coefficients estims, le t de Student, le R, R ajust, etc.)

R.R. Universit Lyon 2

Exemple de manipulation directe des coefficients issus de la rgression partir de lobjet rsum . Ici on affiche lcarttype de la constate, de deux manires diffrentes

Graphiques des rsidus (normalit)


#rcuprer les rsidus ( partir des champs de l'objet reg) e <- reg$residuals #ceci aurait t valable aussi : e <- residuals(reg) #droite de Henry, attention R conserve les quantiles normaliss en ordonne qqnorm(e,datax=TRUE,ylab="Quantiles observs",xlab="Quantiles thoriques")

Normal Q-Q Plot


2 Quantiles thoriques -2 -1.5 -1 0 1

-1.0

-0.5

0.0

0.5

1.0

1.5

Quantiles observs

Le graphique QQ-plot permet de vrifier la normalit dune distribution. Il prend comme point de dpart la fonction de rpartition observe et compare (en abscisse) les quantiles observs et (en ordonne) les quantiles obtenus si la distribution suivait une loi normale. Sils concordent (forment une droite), on peut dire que la distribution est compatible avec la loi normale. Nous nous en servons pour vrifier si lhypothse de normalit des rsidus la base de tout le dispositif infrentiel de la rgression est crdible sur nos donnes : il semble que OUI.

R.R. Universit Lyon 2

Graphiques des rsidus (rsidus vs. Variables)


#graphiques des rsidus par(mfrow=c(3,2)) for (j in 1:5){plot(autos[,j],e,ylab="Rsidus",xlab=names(autos)[j]); abline(h=0)} layout(1)#rinitialiser aprs coup lespace graphique

1.5

0.5

Rsidus

-0.5

Rsidus 0 50000 100000 150000 200000 250000 prix

-1.5

-1.5 1000

-0.5

0.5

1.5

2000

3000

4000

5000

6000

cylindree

1.5

0.5

Rsidus

-0.5

Rsidus 50 100 150 200 250 300

-1.5

-1.5

-0.5

0.5

1.5

1000

1500 poids

2000

puissance

Les graphiques des rsidus (en ordonne) vs. les variables de ltude (en abscisse) permet de dtecter visuellement les points atypiques : (1) tant sur les variables (les points la priphrie en abscisse) que dans la rgression (les points la priphrie en ordonne). Ex. pour la variable endogne CONSO, que se passe-t-il pour ces points ?

Rsidus

-0.5

0.5

1.5

(2)

-1.5

10 conso

15

20

R.R. Universit Lyon 2

tude des points atypiques


Le rsidu standardis
#calcul du rsidu standardis res.standard <- rstandard(reg) #risque alpha = 0.1 alpha <- 0.1 #calcul du seuil partir de la loi de Student (n-p-1) ddl seuil.standard <- qt(1-alpha/2,31-4-1) #construction du graphique des rsidus standardiss plot(autos$conso,res.standard) #ajout des seuils dans le graphique abline(h=-seuil.standard) abline(h=+seuil.standard) abline(h=0) #dtection des points en dehors des tuyaux, on obtient le tableau des obs. atypiques
ab.standard <- autos[res.standard < -seuil.standard | res.standard > +seuil.standard,]

#mettre en vidence les points atypiques dans le graphique for (i in 1:nrow(ab.standard)){ #on rcupre une chane de carac., la dsignation du vhicule vehicule <- row.names(ab.standard)[i] #on place le point atypique (au sens du rsidu standardis) dans le graphique text(autos[vehicule,"conso"],res.standard[vehicule],vehicule) }

Hyundai Sonata 3000

Ferrari 456

Construction du graphique endogne vs. Rsidus standardis


1

res.standard

Ajout dans ce graphique des limites permettant de statuer sur le caractre atypique dun rsidu
0

Dtection automatique des observations atypiques au sens du rsidu standardis Ajout de la dsignation de ces observations dans le graphique
-1 -2

Mitsubishi Galant Mercedes S 600 10 15 autos$conso 20

R.R. Universit Lyon 2

tude des points atypiques


Le rsidu studentis (mme dmarche mais indicateur et d.d.l diffrents)
#calcul du rsidu studentis res.student <- rstudent(reg) #risque alpha = 0.1 alpha <- 0.1 #calcul du seuil partir de la loi de Student (n-p-2) ddl seuil.student <- qt(1-alpha/2,31-4-2) #construction du graphique des rsidus standardiss plot(autos$conso,res.student) abline(h=-seuil.student) abline(h=+seuil.student) abline(h=0) #dtection des points en dehors des tuyaux ab.student <- autos[res.student < -seuil.student | res.student > +seuil.student,] #mettre en vidence les points atypiques dans le graphique for (i in 1:nrow(ab.student)){ vehicule <- row.names(ab.student)[i] text(autos[vehicule,"conso"],res.student[vehicule],vehicule) }

Hyundai Sonata 3000 2

Ferrari 456

res.student

-2

-1

Mitsubishi Galant Mercedes S 600 10 15 autos$conso 20

R.R. Universit Lyon 2

tude des points atypiques


Les points leviers (on ne tient compte que des exognes via la hat-matrix)
#************************************************* #autres mesures d'atypisme des points -- le levier #************************************************* #un autre outil pour rcuprer les indicateurs d'influence atypiques <- influence.measures(reg) #quels sont les descripteurs disponibles attributes(atypiques) #on s'intresse la matrice infmat print(atypiques$infmat) #on rcupre la colonne "hat" qui correspond au levier res.hat <- atypiques$infmat[,"hat"] #le seuil est dfini par 2x(p+1)/n seuil.hat <- 2*(4+1)/31 #les points atypiques au sens du levier ab.hat <- autos[res.hat > seuil.hat,] print(ab.hat)

Par rapport aux deux premiers indicateurs (rsidu standardis et rsidu studentis) : (a) Ferrari et Mercedes restent atypiques, ils sont la fois atypiques dans la description comme dans la prdiction de la consommation (b) Maserati apparat comme atypique (sur les exognes) (c) Mitsubishi et Hyundai nont pas une description trs (significativement) diffrente des autres

R.R. Universit Lyon 2

10

Traitement des points atypiques


#vecteur boolen indicateur de suspicion pour rsidu standardis b.standard <- (res.standard < -seuil.standard | res.standard > +seuil.standard) #vecteur boolen indicateur de suspicion pour rsidu studentis b.student <- (res.student < -seuil.student | res.student > +seuil.student) #vecteur boolen indicateur de suspicion pour le levier b.hat <- (res.hat > seuil.hat) #boolen indicateur de dtection au moins une fois b.suspicious <- b.standard | b.student | b.hat #boolen indicateur de non dtection b.not.suspicious <- !b.suspicious #data.frame autos sans les donnes suspectes autos.clean <- autos[b.not.suspicious,] print(nrow(autos.clean)) print(autos.clean) #rgression sur les donnes "clean" reg.clean <- lm(conso ~ prix + cylindree + puissance + poids, autos.clean) summary(reg.clean) 26 obs. a priori

Adoptons une rgle drastique (et terriblement fruste) : un point au moins une fois atypique au sens des critres ci-dessus est limin de la base. Alors que prcdemment, prix, puissance et poids taient significatifs 5%, dans cette seconde rgression, sans les 5 points atypiques , seul poids semble peser rellement sur la consommation.

R.R. Universit Lyon 2

11

Dtection de la colinarit
Rgle de Klein
#dtection de la colinarit - Rgle de Klein #calculer la matrice des corrlations croises mcxx <- cor(autos.clean[,c(1,2,3,4)]) #monter au carr mcxx <- mcxx^2 #affichage mcxx Rgle de Klein : il y a suspicion de colinarit si le carr de la corrlation entre deux au moins des exognes est proche du coefficient de dtermination de la rgression, gal 0.926

La liaison entre puissance et cylindre pose problme

R.R. Universit Lyon 2

12

Dtection de la colinarit
Facteur dinflation de la variance (VIF)
#prparer le vecteur de rsultats des R2 r2 <- double(4) #4 parce qu'il y a 4 exognes candidates #pour chaque exogne for (j1 in 1:4){ #l'ide est de construire une chane de caractre reprsentant la formule str_formule <- paste(names(autos.clean[j1]),"~") for (j2 in 1:4){ if (j2 != j1){ str_formule <- paste(str_formule,names(autos.clean[j2]),"+") } } #enlever le dernier " +" la fin de la chane str_formule <- substr(str_formule,1,nchar(str_formule)-2) #transformer la chane en objet de type formule formule <- as.formula(str_formule) #lancer la rgression regtest <- lm(formule,data=autos.clean) #rcuprer le rsum resume.regtest <- summary(regtest) #et le R2 dans le rsum r2[j1] <- resume.regtest$r.squared } #calculer le VIF partir du R2 vif <- 1/(1-r2) #attribuer les noms des exognes pour l'affichage names(vif) <- names(autos.clean)[1:4] #afficher print(vif) Le VIF est une sorte de gnralisation multivarie de la rgle de Klein. Elle tudie la liaison, non plus entre les exognes 2 2, mais entre chaque exogne et toutes les autres. Le VIF de la variable Xj est dduit du coefficient de dtermination de la rgression de Xj avec tous les autres X. On considre quil y a un srieux problme ds lors que VIF > 10. Conclusion : il ny a que des problmes dans ce fichier !!! R.R. Universit Lyon 2

13

Slection de variables
Base sur le critre AIC
#chargement de la librairie MASS library(MASS) #recherche backward reg <- lm(conso ~ prix + cylindree + puissance + poids, data = autos.clean) stepAIC(reg,trace=TRUE,direction="backward") #recherche forward reg <- lm(conso ~ 1,data=autos.clean) stepAIC(reg,scope=list(upper=~prix+cylindree+puissance+poids,lower=~1),direction=" forward",trace=TRUE) Le critre AIC (Akaike) met en balance la qualit de lapproximation (via le SCR ou RSS en anglais) et la complexit du modle (via le nombre de variables). Il permet de mettre en comptition des modles avec un nombre de variables diffrent.

Recherche backward et recherche forward aboutissent au mme rsultat : le poids et la cylindre sont les variables pertinentes pour expliquer la consommation des vhicules

R.R. Universit Lyon 2

14

R.R. Universit Lyon 2

15

Vous aimerez peut-être aussi