ACP Voitures 1

Transcription

ACP Voitures 1
ACP Voitures
1- Méthode
acp=princomp(voit,cor=T)
Call:
princomp(x = voit, cor = T)
Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
2.1577815 0.9566721 0.4903373 0.3204833 0.2542759 0.1447788
6 variables and 24 observations.
ACP Voitures
1- Méthode
summary(acp)
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
Standard deviation 2.1577815 0.9566721 0.49033725 0.32048327 0.25427593
Proportion of Variance 0.7760035 0.1525369 0.04007177 0.01711825 0.01077604
Cumulative Proportion 0.7760035 0.9285404 0.96861222 0.98573047 0.99650652
Comp.6
Standard deviation 0.144778802
Proportion of Variance 0.003493484
Cumulative Proportion 1.000000000
Rq : sum(acp$sdev^2)=6
ACP Voitures
2- Choix du nombre d’axes
Critère de Kaiser :
(acp$sdev)^2
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
4.65602121 0.91522148 0.24043062 0.10270953 0.06465625 0.02096090
On ne retient que la première composante qui retient 77,6% de l’inertie totale
ACP Voitures
2- Choix du nombre d’axes
Critère du coude :
plot(acp)
On sélectionne deux axes, représentant 92,8% de l’inertie totale.
ACP Voitures
2- Choix du nombre d’axes
Scree-test de Catell
list(acp$sdev^2,diff(acp$sdev^2),diff(diff(acp$sdev^2)))
[[1]]
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
4.65602121 0.91522148 0.24043062 0.10270953 0.06465625 0.02096090
[[2]]
Comp.2
Comp.3
Comp.4 Comp.5
Comp.6
-3.74079973 -0.67479086 -0.13772109 -0.03805328 -0.04369535
[[3]]
Comp.3
Comp.4
Comp.5
Comp.6
3.066008870 0.537069767 0.099667814 -0.005642069
Conduit à retenir 3 composantes
ACP Voitures
2- Choix du nombre d’axes
Conclusion : Un bon compromis est de
considérer deux composantes, représentant
à peu près 93% de l’inertie totale.
ACP Voitures
3- Etude de l’axe 1
Individus : Contribuent essentiellement les individus dont les
coordonnées sur l’axe 1 (composantes principales) sont > en
valeur absolue à la racine de la valeur propre d’ordre 1, égale à
2.1577815, sous réserve qu’ils soient bien représentés sur l’axe.
ACP Voitures
3- Etude de l’axe 1
qlt=(acp$scores^2/apply(acp$scores^2,1,
sum))[,1]
tab=cbind(contrib=acp$scores[,1],qlt)
tab1=tab[tab[,1]<0,]
contrib
Renault_21
-0.1805120
Bmw_530i
-3.9456318
Rover_827i
-3.1938972
Renault_25
-3.4396227
Opel_Omega
-1.4995690
Peugeot_405_Break -0.5865307
Ford_Sierra
-0.7393253
Bmw_325iX
-1.7061778
Audi_90_Quattro
-1.4135416
Ford_Scorpio
-2.7950566
Renault_Espace
-0.9199997
VW_Caravelle
-1.2219947
qlt
0.03357692
0.93860336
0.94429690
0.93583367
0.66739260
0.61965973
0.63132099
0.50367479
0.56974756
0.91565592
0.44530992
0.19177255
tab2=tab[tab[,1]>0,]
contrib
Honda_Civic
Renault_19
Fiat_Tipo
Peugeot_405
Citroen_BX
Nissan_Vanette
Ford_Fiesta
Fiat_Uno
Peugeot_205
Peugeot_205_Rallye
Seat_Ibiza_SX_I
Citroen-ax-sport
2.02290470
0.77851246
1.28979214
0.27382089
0.50464772
0.02474295
3.49885607
3.75768985
2.61879210
2.28877205
1.93307264
2.65025551
qlt
0.8766111128
0.6623990534
0.7639797857
0.1069827320
0.4826435993
0.0001191134
0.9336125401
0.9768995537
0.8857026180
0.6985932945
0.7872635901
0.7788498294
ACP Voitures
3- Etude de l’axe 1
L'axe 1 oppose la Bmw 530i, la Rover 827i, la Renault 25 et la Ford
Scorpio à la Fiat Uno, la Ford Fiesta, la Citroen-ax-sport, la Peugeot
205 Rallye et la Peugeot 205 et éventuellement Seat Ibiza SX I et le
Honda Civic, c’est à dire les grosses berlines aux citadines.
Tous les modèles sont assez bien représentés sur l'axe 1, à part la Nissan
Vanette, la Peugeot_405 et la Renault 21.
-4
-2
2
Peugeot_205_Rallye
Vitesse
Bmw_325iX
Citroen-ax-sport
Audi_90_Quattro
Puissance
Bmw_530i
Rover_827i
2
0.2
0
Seat_Ibiza_SX_I
Renault_25
Fiat_Uno
Ford_Scorpio
0
0.0
Peugeot_405_Break
Cylindre
Renault_19
Citroen_BX
Ford_SierraPeugeot_405 Fiat_Tipo
Ford_Fiesta
-2
Renault_21
Opel_Omega
Renault_Espace
Largeur
-4
-0.2
Poids
Longueur
-0.4
Comp.2
Peugeot_205
Honda_Civic
Nissan_Vanette
VW_Caravelle
-0.4
-0.2
0.0
Comp.1
0.2
ACP Voitures
3- Etude de l’axe 1
Variables : On retient les variables telles que la coordonnée de u1
(premier vecteur propre) est supérieur en valeur absolue à
1/racine(nombre de variables)= 0.4082483. Il n’y a pas de problème de
représentativité car ce sont les variables qui contribuent le plus qui sont
le mieux représentées.
loadings(acp)[,1]
Cylindre Puissance Vitesse Poids Longueur Largeur
[1,] -0.4442019 -0.4144904 -0.3435401 -0.4303213 -0.4302088 -0.3776328
L’axe1 isole les modèles ayant de fortes valeurs de toutes leurs
caractéristiques aux autres (effet taille)
ACP Voitures
3- Etude de l’axe 1
Conclusion pour l’axe 1: l’axe 1 est un axe de « taille ». Il
oppose les grosses berlines puissantes et de grande
dimension aux citadines de faible dimension et peu
puissantes.
ACP Voitures
4- Etude de l’axe 2
Individus : Contribuent essentiellement les individus dont les
coordonnées sur l’axe 2 (composantes principales) sont > en
valeur absolue à la racine de la valeur propre d’ordre 2, égale à
0.9566721 , sous réserve qu’ils soient bien représentés sur l’axe.
ACP Voitures
4- Etude de l’axe 2
qlt=(acp$scores^2/apply(acp$scores^2,1,su
m))[,2]
tab=cbind(contrib=acp$scores[,2],qlt)
tab1=tab[tab[,1]<0,]
contrib
qlt
Renault_19
-0.13290412 1.930481e-02
Fiat_Tipo
-0.43420734 8.658382e-02
Peugeot_405
-0.46469601 3.081190e-01
Renault_21
-0.63714766 4.183204e-01
Citroen_BX
-0.20760635 8.168291e-02
Opel_Omega
-0.77567731 1.785709e-01
Ford_Sierra
-0.43459960 2.181513e-01
Ford_Scorpio
-0.12172675 1.736693e-03
Renault_Espace -0.88853769 4.153734e-01
Nissan_Vanette -1.82044478 6.447820e-01
VW_Caravelle
-2.38484782 7.304141e-01
Ford_Fiesta
-0.90432558 6.236834e-02
Fiat_Uno
-0.01491689 1.539446e-05
tab2=tab[tab[,1]>0,]
contrib
Honda_Civic
0.3199428
Bmw_530i
0.8353867
Rover_827i
0.7714359
Renault_25
0.6092422
Peugeot_405_Break 0.1431626
Bmw_325iX
1.3627420
Audi_90_Quattro
1.0893324
Peugeot_205
0.4150747
Peugeot_205_Rallye 1.4787932
0.9014207
Seat_Ibiza_SX_I
Citroen-ax-sport
1.2951047
qlt
0.02192808
0.04207500
0.05508920
0.02936007
0.03691738
0.32131344
0.33836555
0.02225043
0.29163137
0.17119018
0.18598931
ACP Voitures
4- Etude de l’axe 2
L’axe 2 oppose les voitures familiales (vans ou
volumineuses) - VW caravelle , Nissan caravelles et
accessoirement ford fiesta et renault espace- , aux
sportives (et accessoirement routières) Bmw_325iX, Audi_90_Quattro
Peugeot_205_Rallye, Seat_Ibiza_SX_I et Citroen-axsport -
-4
-2
2
Peugeot_205_Rallye
Vitesse
Bmw_325iX
Citroen-ax-sport
Audi_90_Quattro
Puissance
Bmw_530i
Rover_827i
2
0.2
0
Seat_Ibiza_SX_I
Renault_25
Fiat_Uno
Ford_Scorpio
0
0.0
Peugeot_405_Break
Cylindre
Renault_19
Citroen_BX
Ford_SierraPeugeot_405 Fiat_Tipo
Ford_Fiesta
-2
Renault_21
Opel_Omega
Renault_Espace
Largeur
-4
-0.2
Poids
Longueur
-0.4
Comp.2
Peugeot_205
Honda_Civic
Nissan_Vanette
VW_Caravelle
-0.4
-0.2
0.0
Comp.1
0.2
ACP Voitures
4- Etude de l’axe 2
Variables : On retient les variables telles que la coordonnée de
u2 (deuxième vecteur propre) est supérieur en valeur absolue à
1/racine(nombre de variables)= 0.4082483. Il n’y a pas de
problème de représentativité car ce sont les variables qui
contribuent le plus qui sont le mieux représentées.
ACP Voitures
4- Etude de l’axe 2
tab1=loadings(acp)[loadings(acp)[,
2]<0,2]
Poids Longueur
Largeur
-0.2551693 -0.2955840 -0.4783191
tab2=loadings(acp)[loadings(acp)[,2]>
0,2]
Cylindre Puissance Vitesse
0.03396424 0.42122241 0.66343624
ACP Voitures
4- Etude de l’axe 2
Conclusion : L’axe 2 oppose les voitures familiales
(VW caravelle , Nissan caravelles et accessoirement
ford fiesta et renault espace), imposantes mais
lentes aux sportives (Bmw_325iX ,Audi_90_Quattro
Peugeot_205_Rallye, Seat_Ibiza_SX_I et Citroen-axsport), de petit gabarit (moins larges que la moyenne
et aussi accessoirement moins longues et moins
lourdes) mais roulant vite et puissantes.
Classification
1- Méthode
Ici, il y a peu d’individus et n-p est raisonnable. La méthode la plus
appropriée est la CAH. On va utiliser la métrique inverse des écartstypes (tableau centré réduit, puis utilisation de la métrique
Euclidienne), et la distance de Ward comme stratégie d’agrégation.
>voi=scale(voit)*sqrt(24/23)
On peut vérifier que l’inertie du nuage de points individus=nombre de
variables (car le tableau est centré réduit ):
> sum(voi^2)/24
[1] 6
Classification
1- Méthode
> cl=hclust(dist(voi)^2, method="ward")
Perte d’inertie inter-classes (distance d’agrégation) à chaque
agrégation :
>dib=cl$height/48
[1] 0.003928178 0.009030076 0.011413142 0.011587196 0.012513408 0.015491365
[7] 0.023291571 0.023520352 0.026305100 0.032032549 0.035005189 0.036628865
[13] 0.040100034 0.047724631 0.058974617 0.061522706 0.105877746 0.199606047
[19] 0.225112404 0.226436998 0.292694735 1.429194809 3.072008281
Classification
on vérifie:
>sum(dib)
[1] 6
Ainsi, l’inertie interclasses passe de 6 (=inertie totale) à 6sum(dib)=0.
Classification
2- Choix du nombre de classes
Pourcentage d’inertie inter conservé à chaque itération
> r2=(6-cumsum(dib))/6;r2
[1] 9.993453e-01 9.978403e-01 9.959381e-01 9.940069e-01 9.919213e-01
[6] 9.893394e-01 9.854575e-01 9.815375e-01 9.771533e-01 9.718145e-01
[11] 9.659803e-01 9.598755e-01 9.531922e-01 9.452381e-01 9.354090e-01
[16] 9.251552e-01 9.075089e-01 8.742412e-01 8.367225e-01 7.989830e-01
[21] 7.502005e-01 5.120014e-01 -2.960595e-16
>r2=r2[24-1:24]
> plot(r2,type="b", main="R² : % de variance inter expliquée", cex=0.5,
xlab=« Nombre de classes")
Classification
2- Choix du nombre de classes
Pourcentage de variation perdu à chaque itération
> sprs2=dib/6;sprs2
[1] 0.0006546964 0.0015050127 0.0019021903 0.0019311993 0.0020855680
[6] 0.0025818941 0.0038819286 0.0039200586 0.0043841833 0.0053387582
[11] 0.0058341981 0.0061048108 0.0066833390 0.0079541051 0.0098291029
[16] 0.0102537843 0.0176462910 0.0332676746 0.0375187341 0.0377394996
[21] 0.0487824558 0.2381991349 0.5120013802
>sprs=sprs2[24-1:24]
> plot(sprs2,type="b", cex=0.5, main="R² semi-partiel",xlab=« Nombre
de classes")
Classification
2- Choix du nombre de classes
Dendogramme
Classification
2- Choix du nombre de classes
Conclusion :
Avec le R2 : La première chute notable du % de variance interclasses eu
lieu au passage de 7 à 6 classes, où l’on passe de 91% à 87% de l’inertie
totale . Un deuxième décrochement du % de variance interclasses a
lieu lorsque l’on passe à deux classes. Jusqu’à 3 classes, la perte
d’inertie inter est tolérable 3 classes restituent encore 75% de l’inertie
totale (ie, de l’information contenue dans les données). Il semble que le
bon choix soit 7 classes, mais si cela fait trop ou qu’elles ne sont pas
interprétables, on peut en choisir 3.
Avec le R2 semi-partiel : le pic suivi d’un creux dans le graphe se fait au
passage de 6 à 7 classes, ensuite la perte est beaucoup trop importante,
ce qui conduit par ce critère à choisir 7 classes.
On retrouve un saut sur le dendogramme au passage de 7 à 6 classes.
Classification
3- Identification des classes
>plot(cl,hang=-1,cex=0.7); rect.hclust(cl, k=7, border="red");
rect.hclust(cl, k=7, border=« blue")
Classification
3- Identification des classes
• Vérification de la stabilité des classes par
partitionnement
km=kmeans(voi,7) ; sort(km$cluster)
Renault_19
1
Citroen_BX
1
Peugeot_405_Break
3
Peugeot_205_Rallye
4
Rover_827i
5
Fiat_Uno
6
Fiat_Tipo
1
Bmw_325iX
2
Ford_Sierra
3
Seat_Ibiza_SX_I
4
Renault_25
5
Peugeot_205
6
Peugeot_405
1
Audi_90_Quattro
2
Renault_Espace
3
Citroen-ax-sport
4
Ford_Scorpio
5
Nissan_Vanette
7
Renault_21
1
Opel_Omega
3
Honda_Civic
4
Bmw_530i
5
Ford_Fiesta
6
VW_Caravelle
7
Classification
3- Identification des classes
Classification
3- Identification des classes
C1(n=4)
C4
C2(n=5)
C1
C3(n=4)
C5
C4(n=4)
C3
C5(n=2)
C2
C6(n=2)
C7
C7(n=3)
C6
Berlines
Petites
Grandes volumin
sportives moyennes routières euses
routières vans
petites
Honda_Civic
Peugeot_205
_Rallye
Seat_Ibiza_S
X_I
Citroen-axsport
Bmw_325iX
Audi_90_Qu
attro
Ford_Fiesta
Fiat_Uno
Peugeot_205
Renault_19
Fiat_Tipo
Peugeot_405
Renault_21
Citroen_BX
Bmw_530i
Rover_827i
Renault_25
Ford_Scorpio
Opel_Omega
Peugeot_405
_Break
Ford_Sierra
Renault_Esp
ace
Nissan_Vane
tte
VW_Caravell
e
Classification
4- Caractérisation
Calcul des moyennes par classes sur le tableau centré
réduit
> km$center (classes de la k-means)
1
2
3
4
5
6
7
Cylindre Puissance
-0.2413439 -0.6602082
0.6537910 1.3651911
0.1289199 0.1799770
-1.0543378 -0.4389682
1.7015981 1.5956494
-1.2289723 -1.3432427
0.2406667 -0.3731230
Vitesse
Poids
Longueur
Largeur
-0.18972741 -0.3053255 0.05971492 0.04893725
1.13093740 0.6616618 0.34387555 -0.31141884
0.13841323 0.4287864 0.69598763 0.72293659
-0.04388712 -1.2567878 -1.44757191 -1.04547753
1.43477133 1.2493949 1.18400263 1.02323332
-1.48878625 -1.2752699 -1.31578727 -1.49036158
-1.48203439 1.1717698 0.61568137 1.02323332
On compare les moyennes à 0.
Classification
4- Caractérisation
Calcul de l’excentricité des classes= distance renormalisée du centre
de gravité de la classe au centre de gravité du nuage= distance du
centre de gravité du tableau centré réduit à 0
apply(km$centers^2,1,sum)
1
0.6293026
2
4.2232372
3
1.2590642
4
5
6
6.0742505 11.5099583 11.1099455
7
5.1926815
Calcul des moyennes par classes du tableau brut
tab= cbind(voit,class=cutree(cl,k=7))
t=matrix(rep(0,49),7,7)
for(i in 1:7){t[i,]= apply(tab[which(tab[,7]==i),],2,mean)}
Classification
4- Caractérisation
• Moyennes brutes (avec classes de la CAH)
C1
C2
C3
C4
C5
C6
Cylindre
1361.25 1781.4 2785.50 1972.75 2244.0 2030.5
Puissance
97.00 88.6 174.25 120.50 165.5 99.5
Vitesse
182.00 178.4 218.50 186.50 211.0 146.5
Poids
827.50 1042.0 1392.50 1207.50 1260.0 1375.0
Longueur
363.00 424.0 469.50 449.75 435.5 446.5
Largeur
161
169.2 176.50 174.25 166.5 176.5
excentricité 6.07 0.63 11.51 1.26 4.22 5.19
C7
total
1271.00
1906.12
62.67
113.67
146.33
183.08
823.33
1110.83
368.33
421.58
157.67
168.83
11.12
0
Classification
4- Caractérisation
Classification
5- Représentation dans les axes factoriels de l’ACP
(programme n°3 du cours modifié
cl=hclust(dist(voi), method="ward")
p = princomp(voi)
u = p$loadings
x = (t(u) %*% t(voi))[1:2,]
x = t(x)
plot(x, col=cutree(cl, k=7), pch=3, lwd=3, xlab="caractéristiques fortes--faibles", ylab="volumineuses---puissantes")
text( x[,1], x[,2], attr(x, "dimnames")[[1]],col=cutree(cl, k=7),cex=0.7 )
Classification
Discrimination
>tab= cbind(voit,class=cutree(cl,k=7))
>library(MASS)
>a=lda(class~Cylindre+Puissance+Vitesse+Poids+Longueur+Largeur,dat
a=tab)
Call:
lda(class ~ Cylindre + Puissance + Vitesse + Poids + Longueur +
Largeur, data = tab)
Prior probabilities of groups:
1
2
3
4
5
6
7
0.16666667 0.20833333 0.16666667 0.16666667 0.08333333
0.08333333 0.12500000
Discrimination
Group means:
Cylindre Puissance Vitesse Poids Longueur Largeur
1 1361.25 97.00000 182.0000 827.5000 363.0000 161.0000
2 1781.40 88.60000 178.4000 1042.0000 424.0000 169.2000
3 2785.50 174.25000 218.5000 1392.5000 469.5000 176.5000
4 1972.75 120.50000 186.5000 1207.5000 449.7500 174.2500
5 2244.00 165.50000 211.0000 1260.0000 435.5000 166.5000
6 2030.50 99.50000 146.5000 1375.0000 446.5000 176.5000
7 1271.00 62.66667 146.3333 823.3333 368.3333 157.6667
Discrimination
Coefficients of linear discriminants:
LD1
LD2
LD3
LD4
LD5
Cylindre 0.0016867438 -0.0055426310 0.0006515035 0.004406976
0.004707521
Puissance 0.0188485289 0.2322451672 -0.1335815806 0.018063675 0.032349352
Vitesse 0.0500851386 -0.3519812675 0.0868250743 -0.061434408
0.003717565
Poids 0.0056690829 0.0002716697 0.0058568595 -0.013243823
0.002007374
Longueur 0.0009633568 0.0854434933 0.0135398604 0.060653891 0.069579423
Largeur 0.1270096422 -0.2917519647 0.1690229430 -0.186982209
0.143698029
…………………………
Discrimination
Proportion of trace:
LD1 LD2 LD3 LD4 LD5 LD6
0.5131 0.3531 0.1091 0.0134 0.0097 0.0015
Deux axes conservent à peu près 87% de
l’information donc on n’interprètera que les
deux premiers axes.
Discrimination
> rbind(a$mean,mean(voi))
Cylindre Puissance
1 1361.250 97.00000
2 1781.400 88.60000
3 2785.500 174.25000
4 1972.750 120.50000
5 2244.000 165.50000
6 2030.500 99.50000
7 1271.000 62.66667
1906.125 113.66667
Vitesse
182.0000
178.4000
218.5000
186.5000
211.0000
146.5000
146.3333
183.0833
Poids Longueur
827.5000 363.0000
1042.0000 424.0000
1392.5000 469.5000
1207.5000 449.7500
1260.0000 435.5000
1375.0000 446.5000
823.3333 368.3333
1110.8333 421.5833
Largeur
161.0000
169.2000
176.5000
174.2500
166.5000
176.5000
157.6667
168.8333
Discrimination
> D=matvoi%*%a$scaling
> cor(voi,D[,1:2])
LD1
LD2
Cylindre 0.9549318 0.05354816
Puissance 0.9248392 -0.05328764
Vitesse
0.7881948 -0.46536482
Poids
0.9065631 0.33102158
Longueur 0.8929594 0.16274329
Largeur
0.7844772 0.14437622
L’axe 1 oppose les voitures dont les caractéristiques sont
faibles à celles dont toutes les caractéristiques sont
fortes.
L’axe 2 oppose les voitures lourdes et peu rapides aux autres.
Discrimination
>plot(a, col = as.numeric(tab[ ,7]),dimen=2,xlab="faible-----forte",ylab="-----+lourdes et lentes")
Discrimination