Conclusion pour l`axe 1

Transcription

Conclusion pour l`axe 1
ACP Voitures
¾ Réalisation de l’ACP (décomposition factorielle)
> acp=princomp(voit,cor=T)
> acp
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.
Choix du nombre d’axes
> 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
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
Choix du nombre d’axes
¾ Critère du coude :
>plot(acp)
On sélectionne deux axes, représentant 92,8% de l’inertie totale.
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
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.
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.
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
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
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)
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.
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.
Etude de l’axe 2
>qlt=(acp$scores^2/apply(acp$scores^2,1,s
um))[,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
Seat_Ibiza_SX_I
0.9014207
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
-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
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.
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
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-ax-sport), de petit gabarit
(moins larges que la moyenne et aussi accessoirement
moins longues et moins lourdes) mais roulant vite et
puissantes.
Classification
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
> cl=hclust(dist(voi), method="ward")
Perte d’inertie inter-classes à 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
¾ Sélection du nombre de classes :
> 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
> plot(r2,type="b", main="R² partiel",xlab="nombre d'iterations")
Classification
0.6
0.4
0.2
0.0
(6 - cumsum(dib))/6
0.8
1.0
R² partiel
5
10
15
nombre d'iterations
20
Classification
Conclusion : Le coefficient de corrélation partielle (ou l’inertie
interclasses) décroit doucement jusqu’à la 17° itération (7 classes
à 6 classes), où on passe de 91% à 87% de l’inertie totale. Il
décroit encore plus fortement entre la 21° et la 22° itération (3
classes à 2 classes) où l’on passe de 75% à 51% de l’inertie totale.
On peut donc choisir une partition en trois classes, où l’on
conserve 75% de l’inertie totale, ou une partition en 7 classes si
l’on sait interpréter les classes, où l’on conserve 91% de l’inertie.
dist(voi)^2
hclust (*, "ward")
VW_Caravelle
Nissan_Vanette
Renault_Espace
Opel_Omega
Ford_Sierra
Peugeot_405_Break
Citroen_BX
Peugeot_405
Renault_19
Renault_21
Fiat_Tipo
Renault_25
50
100
150
>plot(cl,hang=-1,cex=0.7) Cluster
>rect.hclust(cl, k=3, border="red")
Rover_827i
Bmw_530i
Ford_Scorpio
Audi_90_Quattro
Bmw_325iX
Fiat_Uno
Ford_Fiesta
Peugeot_205
Seat_Ibiza_SX_I
Honda_Civic
Citroen-ax-sport
Peugeot_205_Rallye
0
Height
Classification
Dendrogram
dist(voi)^2
hclust (*, "ward")
VW_Caravelle
Nissan_Vanette
Renault_Espace
Opel_Omega
Ford_Sierra
Peugeot_405_Break
Citroen_BX
Peugeot_405
Renault_19
Renault_21
Fiat_Tipo
Renault_25
50
100
150
>plot(cl,hang=-1,cex=0.7)
Cluster
>rect.hclust(cl, k=7, border="red")
Rover_827i
Bmw_530i
Ford_Scorpio
Audi_90_Quattro
Bmw_325iX
Fiat_Uno
Ford_Fiesta
Peugeot_205
Seat_Ibiza_SX_I
Honda_Civic
Citroen-ax-sport
Peugeot_205_Rallye
0
Height
Classification
Dendrogram
Classification
Classification
¾Caractérisation des classes (k=7)
C1(n=4)
C2(n=5)
C3(n=4)
C4(n=4)
C5(n=2)
C6(n=2)
C7(n=3)
Honda_Civic
Peugeot_205
_Rallye
Seat_Ibiza_S
X_I
Citroen-axsport
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
Bmw_325iX
Audi_90_Qu
attro
Nissan_Vane
tte
VW_Caravell
e
Ford_Fiesta
Fiat_Uno
Peugeot_205
Classification
Calcul des moyennes par classes et de l’excentricité (distance du
centre de gravité de la classe au centre de gravité du nuage) :
>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)}
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
Classification
¾ Représentation des classes sur les axes
factoriels (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
Classification
¾ Consolidation par kmeans (doit normalement être fait
avant l’interprétation, mais ici, on obtient les mêmes
classes)
> c=cutree(cl,k=7)
> tab= cbind(voi,c)
> t=matrix(rep(0,49),7,7)
> for(i in 1:7){t[i,]= apply(tab[which(tab[,7]==i),],2,mean)}
> t=t[,-7]
> dim(t)
[1] 7 6
Classification
>kl=kmeans(voi,t)
> cc=cbind(kl$cluster,c)
> which(cc[,1]!=cc[,2])
numeric(0)