Tout d’abord, on importe le fichier. On remarque qu’il y a 101 observations et 20 colonnes
X=read.delim("~/data(2).csv",header=TRUE,encoding ="utf-8", dec=".", sep=";")
dim(X)
## [1] 101 20
attach(X)
On defini les colonnes Code et Libellé comme noms des lignes
rownames(X) = X$Libellé
On supprime ensuite les 2 premières colonnes (Code et Libellé)
X=X[,-c(1,2)]
On supprime Mayotte car elle a beaucoup trop de valeurs manquantes
X=X[-101,]
dim(X)
## [1] 100 18
attach(X)
## The following objects are masked from X (pos = 3):
##
## Médiane.du.niveau.de.vie.2015, Nb.de.logements.2015,
## Nb.de.pers..de.15.à.24.ans.2015, Nb.de.pers..de.15.à.64.ans.2015,
## Nb.ent..dans.la.construction.2016,
## Nb.ent..dans.le.commerce..transports..hébergement..restauration.2016,
## Nb.ent..dans.les.services.marchands.2016,
## Nb.ent..dans.les.services.marchands.auprès.des.ent..2016,
## Nb.ent..dans.les.services.marchands.auprès.des.ménages.2016,
## Nb.ent..dans.l.industrie.2016, Nb.entreprises.2016,
## Population.2015, Salaire.net.horaire.moyen.2015,
## Salaire.net.hor..moy..des.femmes.2015,
## Salaire.net.hor..moy..des.hommes.2015,
## Taux.d.activité.des.15.à.24.ans.2015,
## Taux.d.activité.des.15.à.64.ans.2015, Taux.de.pauvreté.2015
Premierement, on fait quelques modifications sur le csv pour tout ramener au nombre d’habitant
# Par rapport aux logements :
# Taux de logements
Taux.Logements.2015 = Nb.de.logements.2015/Population.2015
X<-cbind(X,Taux.Logements.2015)
# Par rapport au habitants :
# Taux de personnes de 15 à 24 ans
Taux.pers.15.à.24ans = Nb.de.pers..de.15.à.24.ans.2015/Population.2015
X<-cbind(X,Taux.pers.15.à.24ans)
# Taux de personnes de 15 à 64 ans
Taux.pers.15.à.64ans = Nb.de.pers..de.15.à.64.ans.2015/Population.2015
X<-cbind(X,Taux.pers.15.à.64ans)
# Taux de personnes de 25 à 64 ans
Taux.pers.25.à.64ans = Taux.pers.15.à.64ans - Taux.pers.15.à.24ans
X<-cbind(X,Taux.pers.25.à.64ans)
# Par rapport aux entreprises :
# Taux d'entreprises
Taux.entreprise = Nb.entreprises.2016/Population.2015
X<-cbind(X,Taux.entreprise)
# Taux d'entreprises dans la construction
Taux.entreprise..Construction = Nb.ent..dans.la.construction.2016 /Population.2015
X<-cbind(X,Taux.entreprise..Construction)
# Taux d'entreprises dans le commerce, transports, hébergement et la restauration
Taux.entreprise..commerce.transports.hébergement.restauration = Nb.ent..dans.le.commerce..transports..hébergement..restauration.2016 /Population.2015
X<-cbind(X,Taux.entreprise..commerce.transports.hébergement.restauration)
# Taux d'entreprises dans les services marchands
Taux.entreprise..services.marchands = Nb.ent..dans.les.services.marchands.2016 /Population.2015
X<-cbind(X,Taux.entreprise..services.marchands)
# Taux d'entreprises dans les services marchands auprès des entreprises
Taux.entreprise..services.marchands.auprès.des.ent = Nb.ent..dans.les.services.marchands.auprès.des.ent..2016 /Population.2015
X<-cbind(X,Taux.entreprise..services.marchands.auprès.des.ent)
# Taux d'entreprises dans les services marchands auprès des ménages
Taux.entreprise..services.marchands.auprès.des.ménages = Nb.ent..dans.les.services.marchands.auprès.des.ménages.2016 /Population.2015
X<-cbind(X,Taux.entreprise..services.marchands.auprès.des.ménages)
# Taux d'entreprises dans l'industrie
Taux.entreprise..industrie = Nb.ent..dans.l.industrie.2016 /Population.2015
X<-cbind(X,Taux.entreprise..industrie)
dim(X)
## [1] 100 29
Ainsi, on peut supprimer les colonnes qui ne servent plus
# On supprime les colonnes qui ne servent plus :
# - Population.2015
# - Nb.de.logements.2015, Nb.de.pers..de.15.à.24.ans.2015
# - Nb.de.pers..de.15.à.64.ans.2015
# - Nb.entreprises.2016, Nb.ent..dans.la.construction.2016
# - Nb.ent..dans.le.commerce..transports..hébergement..restauration.2016
# - Nb.ent..dans.les.services.marchands.2016, Nb.ent..dans.les.services.marchands.auprès.des.ent..2016
# - Nb.ent..dans.les.services.marchands.auprès.des.ménages.2016
# - Nb.ent..dans.l.industrie.2016
X=X[,-c(3:13)]
dim(X)
## [1] 100 18
attach(X)
## The following objects are masked _by_ .GlobalEnv:
##
## Taux.entreprise,
## Taux.entreprise..commerce.transports.hébergement.restauration,
## Taux.entreprise..Construction, Taux.entreprise..industrie,
## Taux.entreprise..services.marchands,
## Taux.entreprise..services.marchands.auprès.des.ent,
## Taux.entreprise..services.marchands.auprès.des.ménages,
## Taux.Logements.2015, Taux.pers.15.à.24ans, Taux.pers.15.à.64ans,
## Taux.pers.25.à.64ans
## The following objects are masked from X (pos = 3):
##
## Médiane.du.niveau.de.vie.2015, Salaire.net.horaire.moyen.2015,
## Salaire.net.hor..moy..des.femmes.2015,
## Salaire.net.hor..moy..des.hommes.2015,
## Taux.d.activité.des.15.à.24.ans.2015,
## Taux.d.activité.des.15.à.64.ans.2015, Taux.de.pauvreté.2015
## The following objects are masked from X (pos = 4):
##
## Médiane.du.niveau.de.vie.2015, Salaire.net.horaire.moyen.2015,
## Salaire.net.hor..moy..des.femmes.2015,
## Salaire.net.hor..moy..des.hommes.2015,
## Taux.d.activité.des.15.à.24.ans.2015,
## Taux.d.activité.des.15.à.64.ans.2015, Taux.de.pauvreté.2015
Etant donné que la Guadeloupe et la Guyane comporte des valeurs manquantes valeurs manquantes pour le taux de pauvrete et le niveau de vie on les remplace donc par la médiane du taux de pauvreté et le niveau du vie du reste de la population afin de ne pas influencer le reste de l’étude.
#Taux de pauvreté
X[97,3] = median(Taux.de.pauvreté.2015)
X[99,3] = median(Taux.de.pauvreté.2015)
#Niveau de vie
X[97,4] = median(Médiane.du.niveau.de.vie.2015)
X[99,4] = median(Médiane.du.niveau.de.vie.2015)
On obtient au final une base de données a 100 lignes et à 18 colonnes
dim(X)
## [1] 100 18
colnames(X)=c("TxAct15_64","TxAct15_24","TxPauvrete","MedianeNvVie","SalNetHorMoy","SalNetHorMoyF",
"SalNetHorMoyH","TxLgt","TxPerso15_24","TxPerso15_64","TxPerso25_64","TxEntrp","TxEntrpConstru","TxEntrpCommerceTransportRestau","TxEntrpServMarch","TxEntrpServMarchAupresEntrp","TxEntrpServMarchAupresMenages","TxEntrpIndustrie")
Xcr=scale(X)
On vérifie bien que les moyennes après le centrage-réduction sont de 0 et que les écart-types sont de 1
apply(Xcr[,],2,mean)
## TxAct15_64 TxAct15_24
## -1.597766e-15 1.408533e-16
## TxPauvrete MedianeNvVie
## -5.617902e-17 -8.586534e-16
## SalNetHorMoy SalNetHorMoyF
## -2.479974e-16 -2.970886e-16
## SalNetHorMoyH TxLgt
## -2.944547e-16 3.532970e-16
## TxPerso15_24 TxPerso15_64
## 4.132979e-17 1.664044e-15
## TxPerso25_64 TxEntrp
## -1.860892e-16 -1.273451e-16
## TxEntrpConstru TxEntrpCommerceTransportRestau
## -2.753703e-16 1.654037e-16
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 1.145343e-16 -8.795699e-17
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1.529140e-16 -2.978976e-16
apply(Xcr[,],2,sd)
## TxAct15_64 TxAct15_24
## 1 1
## TxPauvrete MedianeNvVie
## 1 1
## SalNetHorMoy SalNetHorMoyF
## 1 1
## SalNetHorMoyH TxLgt
## 1 1
## TxPerso15_24 TxPerso15_64
## 1 1
## TxPerso25_64 TxEntrp
## 1 1
## TxEntrpConstru TxEntrpCommerceTransportRestau
## 1 1
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 1 1
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 1
Une première classification nous montre
#Distance
cah = hclust(dist(Xcr), method = "average")
#Arbre
plot(cah, hang = -1)
#Les hauteurs (sauts)
cah$height
## [1] 0.5655635 0.8640821 0.8693539 0.8923190 0.9540334 1.0438925
## [7] 1.0460609 1.0504023 1.0587114 1.0919827 1.1315801 1.1475235
## [13] 1.2101306 1.2708975 1.2871119 1.3162971 1.3246600 1.3297507
## [19] 1.3434954 1.3466086 1.3654538 1.3788734 1.3923259 1.4180515
## [25] 1.4243742 1.4343206 1.4967118 1.5098487 1.5111620 1.5379624
## [31] 1.5385318 1.5632674 1.5947758 1.6307182 1.7030171 1.7063311
## [37] 1.7436459 1.7676013 1.7730541 1.8152119 1.8488005 1.8615822
## [43] 1.8677768 1.8709072 1.8749589 1.8892946 1.9481196 1.9842681
## [49] 2.0333103 2.0354123 2.0631498 2.0775978 2.1261650 2.1293527
## [55] 2.1437766 2.1489195 2.1761136 2.1765136 2.2025360 2.2131120
## [61] 2.2319666 2.2350712 2.2372415 2.2780618 2.3279873 2.3495956
## [67] 2.3880884 2.4237542 2.4840101 2.5181708 2.5915997 2.7161367
## [73] 2.8036267 2.9523611 2.9965045 3.0351381 3.1116287 3.1428194
## [79] 3.2963028 3.3497006 3.4231514 3.4803059 3.7091889 3.8695361
## [85] 3.8932890 4.2094089 4.4101935 4.7269762 4.8959957 4.9937102
## [91] 5.1350245 5.4695125 5.4995317 7.0098388 7.5832930 7.6011330
## [97] 8.7957880 10.2984462 18.7272699
#Afficher le nombre de classes en abscisse, les sauts en ordonnees
plot(rev(cah$height),type="b")
# nombre de classes
q=5
# ré-afficher l'arbre, avec les classes choisies
plot(cah, hang = -1)
rect.hclust(cah, q)
# classifier (= couper l'arbre)
classif= cutree(cah,q)
classif
## Ain Aisne Allier
## 1 1 1
## Alpes-de-Haute-Provence Hautes-Alpes Alpes-Maritimes
## 1 1 2
## Ardèche Ardennes Ariège
## 1 1 1
## Aube Aude Aveyron
## 1 1 1
## Bouches-du-Rhône Calvados Cantal
## 1 1 1
## Charente Charente-Maritime Cher
## 1 1 1
## Corrèze Côte-d'Or Côtes-d'Armor
## 1 1 1
## Creuse Dordogne Doubs
## 1 1 1
## Drôme Eure Eure-et-Loir
## 1 1 1
## Finistère Corse-du-Sud Haute-Corse
## 1 2 2
## Gard Haute-Garonne Gers
## 1 1 1
## Gironde Hérault Ille-et-Vilaine
## 1 1 1
## Indre Indre-et-Loire Isère
## 1 1 1
## Jura Landes Loir-et-Cher
## 1 1 1
## Loire Haute-Loire Loire-Atlantique
## 1 1 1
## Loiret Lot Lot-et-Garonne
## 1 1 1
## Lozère Maine-et-Loire Manche
## 1 1 1
## Marne Haute-Marne Mayenne
## 1 1 1
## Meurthe-et-Moselle Meuse Morbihan
## 1 1 1
## Moselle Nièvre Nord
## 1 1 1
## Oise Orne Pas-de-Calais
## 1 1 1
## Puy-de-Dôme Pyrénées-Atlantiques Hautes-Pyrénées
## 1 1 1
## Pyrénées-Orientales Bas-Rhin Haut-Rhin
## 1 1 1
## Rhône Haute-Saône Saône-et-Loire
## 1 1 1
## Sarthe Savoie Haute-Savoie
## 1 1 1
## Paris Seine-Maritime Seine-et-Marne
## 3 1 1
## Yvelines Deux-Sèvres Somme
## 4 1 1
## Tarn Tarn-et-Garonne Var
## 1 1 1
## Vaucluse Vendée Vienne
## 1 1 1
## Haute-Vienne Vosges Yonne
## 1 1 1
## Territoire de Belfort Essonne Hauts-de-Seine
## 1 1 4
## Seine-Saint-Denis Val-de-Marne Val-d'Oise
## 1 1 1
## Guadeloupe Martinique Guyane
## 2 2 5
## La Réunion
## 1
# afficher les villes par classe
sort(classif)
## Ain Aisne Allier
## 1 1 1
## Alpes-de-Haute-Provence Hautes-Alpes Ardèche
## 1 1 1
## Ardennes Ariège Aube
## 1 1 1
## Aude Aveyron Bouches-du-Rhône
## 1 1 1
## Calvados Cantal Charente
## 1 1 1
## Charente-Maritime Cher Corrèze
## 1 1 1
## Côte-d'Or Côtes-d'Armor Creuse
## 1 1 1
## Dordogne Doubs Drôme
## 1 1 1
## Eure Eure-et-Loir Finistère
## 1 1 1
## Gard Haute-Garonne Gers
## 1 1 1
## Gironde Hérault Ille-et-Vilaine
## 1 1 1
## Indre Indre-et-Loire Isère
## 1 1 1
## Jura Landes Loir-et-Cher
## 1 1 1
## Loire Haute-Loire Loire-Atlantique
## 1 1 1
## Loiret Lot Lot-et-Garonne
## 1 1 1
## Lozère Maine-et-Loire Manche
## 1 1 1
## Marne Haute-Marne Mayenne
## 1 1 1
## Meurthe-et-Moselle Meuse Morbihan
## 1 1 1
## Moselle Nièvre Nord
## 1 1 1
## Oise Orne Pas-de-Calais
## 1 1 1
## Puy-de-Dôme Pyrénées-Atlantiques Hautes-Pyrénées
## 1 1 1
## Pyrénées-Orientales Bas-Rhin Haut-Rhin
## 1 1 1
## Rhône Haute-Saône Saône-et-Loire
## 1 1 1
## Sarthe Savoie Haute-Savoie
## 1 1 1
## Seine-Maritime Seine-et-Marne Deux-Sèvres
## 1 1 1
## Somme Tarn Tarn-et-Garonne
## 1 1 1
## Var Vaucluse Vendée
## 1 1 1
## Vienne Haute-Vienne Vosges
## 1 1 1
## Yonne Territoire de Belfort Essonne
## 1 1 1
## Seine-Saint-Denis Val-de-Marne Val-d'Oise
## 1 1 1
## La Réunion Alpes-Maritimes Corse-du-Sud
## 1 2 2
## Haute-Corse Guadeloupe Martinique
## 2 2 2
## Paris Yvelines Hauts-de-Seine
## 3 4 4
## Guyane
## 5
On peut maintenant avoir une premiere vue des différentes classes et ainsi en tirer un profil.
table(classif)
## classif
## 1 2 3 4 5
## 91 5 1 2 1
# Variances des Ecarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
round(variances_classes,2)
## [1] 10.51 10.35 0.00 3.74 0.00
round(variance_totale,2)
## [1] 17.82
# et donc écarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
sqrt(round(variances_classes,2))
## [1] 3.241913 3.217142 0.000000 1.933908 0.000000
sqrt(round(variance_totale,2))
## [1] 4.221374
# i. Calcul des individus moyens (= moyennes, centres de gravite, centroïde)
moyennes = aggregate(Xcr[,],list(classif),mean)[,-1]
round(moyennes,2)
## TxAct15_64 TxAct15_24 TxPauvrete MedianeNvVie SalNetHorMoy SalNetHorMoyF
## 1 0.04 0.15 -0.04 -0.08 -0.16 -0.17
## 2 -0.85 -1.23 1.14 -0.55 0.02 0.22
## 3 1.83 -1.76 0.23 3.72 5.22 5.14
## 4 1.73 -1.76 -0.97 3.42 4.36 4.18
## 5 -4.97 -2.27 -0.13 -0.16 0.64 1.07
## SalNetHorMoyH TxLgt TxPerso15_24 TxPerso15_64 TxPerso25_64 TxEntrp
## 1 -0.16 -0.01 -0.06 -0.09 -0.08 -0.19
## 2 -0.03 0.97 -0.10 0.36 0.71 2.09
## 3 5.32 0.56 1.33 3.27 3.95 6.28
## 4 4.38 -1.04 0.57 1.35 1.59 0.50
## 5 0.36 -2.43 3.23 0.02 -3.56 -0.41
## TxEntrpConstru TxEntrpCommerceTransportRestau TxEntrpServMarch
## 1 -0.15 -0.19 -0.17
## 2 2.82 2.74 1.31
## 3 1.12 4.49 7.48
## 4 -0.82 -0.22 1.20
## 5 0.22 -0.09 -0.75
## TxEntrpServMarchAupresEntrp TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 -0.19 -0.09 -0.10
## 2 1.19 1.22 1.84
## 3 8.32 3.42 1.96
## 4 1.54 0.06 -1.54
## 5 -0.25 -1.68 0.98
# ii. Matrice des distances entre individus moyens
round(dist(moyennes),2)
## 1 2 3 4
## 2 6.20
## 3 18.74 15.64
## 4 9.68 11.16 13.59
## 5 8.16 9.93 20.93 12.41
# Graphique général
matplot(t(moyennes), type="b")
abline(h=0)
abline(h=c(-1,1),lty=2)
text(1:ncol(X), max(moyennes)*1.1,colnames(X), xpd= NA, srt = 90)
par(mfrow=c(1,3))
for (i in 1:3) {
boxplot(X[,i]~classif,main=colnames(X)[i])
}
for (i in 4:6) {
boxplot(X[,i]~classif,main=colnames(X)[i])
}
for (i in 7:9) {
boxplot(X[,i]~classif,main=colnames(X)[i])
}
for (i in 10:12) {
boxplot(X[,i]~classif,main=colnames(X)[i])
}
for (i in 13:15) {
boxplot(X[,i]~classif,main=colnames(X)[i])
}
for (i in 16:18) {
boxplot(X[,i]~classif,main=colnames(X)[i])
}
On peut analyser plusieurs classes, on retrouve premièrement la classe 2 contenant 5 départements : Alpes-Maritimes, Corse du Sud, Haute-Corse, Guadeloupe et la Martinique, on remarque que cette classe contient 4 îles et un département en bord de mer, de ce fait la classe semble plus au moins logique au vu de leurs ressemblances. Ces 5 départements sont tous des outliers. De manière générale, cette classe se situe aux alentours de la moyenne avec cependant un taux d’entreprise qui se distingue du reste. Assurément, ce taux d’entreprise est significativement supérieur a la moyenne, ces entreprises sont surtout spécialisé dans la construction et dans le commerce, transport, et la restauration.
On retrouve ensuite une deuxième classe, la classe 3 contenant seulement Paris, il s’agit ici d’un outlier. On observe qu’a Paris il y a un taux d’activité des 15 à 64 ans important, mais un taux d’activité des 15 à 24 ans très faible. Cela peut s’expliquer notamment par le fait qu’il s’agit d’une ville où la plupart des jeunes font leurs études. De même, on remarque que son taux de pauvreté est moyen et que la médiane du niveau de vie de la population est très élevée avec des salaires très élevés sans différence notable entre les hommes et les femmes. Son taux de logement est moyennement élevé. Concernant l’âge de la population, on peut constater qu’il y a beaucoup de personnes âgés de 15 à 64 ans, dont beaucoup agés de plus de 25 ans qui sont donc dans la vie active. Concernant les entreprises, Paris a un taux très significativement supérieure à la moyenne, on retrouve principalement des entreprises de services marchands (dont beaucoup auprès des entreprises et d’autres auprès des ménages). On peut aussi noter qu’elle possède également beaucoup d’entreprises dans le commerce, les transports et la restauration. Elle a aussi pas mal d’entreprises dans l’industrie et dans la construction.
Mais encore, il y a aussi la classe 4 avec seulement 2 individus, Yvelines et Hauts de Seine, deux outliers. Étant donné que ces deux départements appartiennent à la région parisienne, on retrouve de nombreux points communs avec la classe 2 contenant Paris. En effet, elle a quasiment le même taux d’activité que Paris, soit un taux d’activité des 15 à 64 ans notable, mais un taux d’activité des 15 à 24 ans faible explicable sûrement par le fait que les jeunes font des études. Cependant, contrairement à la classe 2, son taux de pauvreté est plus faible tandis que sa médiane du niveau de vie de la population est très forte. On retrouve encore une fois des salaires très élevé sans différence entre les hommes et les femmes. Ici, le taux de logement est moyennement faible. De même, il y a beaucoup de personnes âgés entre 15 à 64 ans, dont beaucoup agés de plus de 25 ans qui sont donc dans la vie active. Concernant les entreprises, elle en possède relativement moins que la classe 2, celles-ci se situe principalement dans les entreprises de services marchands (dont beaucoup auprès des entreprises et d’autres auprès des ménages). Elle possède peu d’entreprises dans le commerce, les transports, l’hébergement et la restauration. Elle a un taux d’entreprises dans l’industrie relativement faible.
De même, on retrouve la classe 5 avec un seul individu, la Guyane. On remarque plusieurs points marquants, premièrement le taux d’activité de la population en général (15 - 64 ans) est très significativement inférieure a la moyenne de même pour le taux d’activité des jeunes (15-24 ans) qui est aussi faible. La Guyane possède un taux de pauvreté moyen et une médiane du niveau de vie moyenne aussi, étant donné que nous avons défini que c’était égale à la médiane de ces deux variables, cependant cela reste bien sûr à nuancer à compte tenu du fait que ce n’est pas le cas en vrai. D’un point de vue économique, on constate que les salaires sont aux alentours de la moyenne avec un salaire net moyen pour les femmes assez supérieure a ceux des hommes. On retrouve aussi un taux d’entreprise assez moyen avec une part notable dans les entreprises d’industrie, contrairement, a celles spécialisé dans les services marchands auprès des ménages où l’on retrouve un taux significativement inférieur à la moyenne. On peut aussi constater que le taux de logement est significativement inférieur à la moyenne. Démographiquement parlant la Guyane possède une population remarquablement jeune (15-24) avec un taux très significativement supérieure a la moyenne qui est paradoxalement opposée à un taux des personnes entres 25 à 64 très significativement inférieure à la moyenne.
Finalement, la classe 1 contient 91 % des individus. Nous effectuons donc une seconde classification sur cette classe afin de mieux identifier et de tirer un profil convainquant sur ces individus.
X1 = X[classif==1,]
dim(X1)
## [1] 91 18
Xcr=scale(X1)
apply(Xcr[,],2,mean) # = ~ 0
## TxAct15_64 TxAct15_24
## -2.691443e-18 1.034935e-15
## TxPauvrete MedianeNvVie
## 2.768886e-17 3.194083e-16
## SalNetHorMoy SalNetHorMoyF
## -4.058875e-16 7.817556e-16
## SalNetHorMoyH TxLgt
## -2.293517e-16 -1.401218e-16
## TxPerso15_24 TxPerso15_64
## -2.346619e-16 1.742706e-15
## TxPerso25_64 TxEntrp
## -1.037934e-15 -1.134406e-17
## TxEntrpConstru TxEntrpCommerceTransportRestau
## -1.881898e-16 1.859907e-16
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 1.955710e-16 4.868395e-17
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## -1.283180e-16 1.833541e-16
apply(Xcr[,],2,sd) # = ~ 1
## TxAct15_64 TxAct15_24
## 1 1
## TxPauvrete MedianeNvVie
## 1 1
## SalNetHorMoy SalNetHorMoyF
## 1 1
## SalNetHorMoyH TxLgt
## 1 1
## TxPerso15_24 TxPerso15_64
## 1 1
## TxPerso25_64 TxEntrp
## 1 1
## TxEntrpConstru TxEntrpCommerceTransportRestau
## 1 1
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 1 1
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 1
# C.A.H. (distance choisie : average)
cah = hclust(dist(Xcr), method = "average")
# On affichage l'arbre : option hang = -1 (part de la fenêtre graphique réservée aux labels)
plot(cah, hang = -1)
# les hauteurs (sauts)
cah$height
## [1] 0.7050532 1.0942567 1.1826576 1.2015042 1.2620956 1.3016764 1.3599977
## [8] 1.3643791 1.3794733 1.3988485 1.4031232 1.4206963 1.5149331 1.5450762
## [15] 1.5607732 1.6756526 1.6938067 1.7034215 1.7179379 1.7249598 1.7656295
## [22] 1.7860990 1.8292867 1.8394371 1.8395090 1.8413308 1.8626892 1.8962288
## [29] 1.9028153 1.9083990 1.9363182 1.9544702 2.0264436 2.0898514 2.0972249
## [36] 2.1007421 2.1210157 2.1396880 2.1922488 2.3179946 2.3421353 2.3667958
## [43] 2.3918543 2.4191764 2.4203916 2.4317819 2.4562543 2.4922669 2.5400865
## [50] 2.5770750 2.6066041 2.6123576 2.6305388 2.6502537 2.6621256 2.6718253
## [57] 2.6830073 2.7610144 2.8152688 2.8395583 2.8891073 2.9089432 2.9282236
## [64] 3.0523190 3.0559811 3.0917692 3.1054228 3.1639437 3.2227083 3.3425280
## [71] 3.4046120 3.4709877 3.4957478 3.7582675 3.7633077 3.8176035 3.9923637
## [78] 4.1964805 4.3829827 4.5851569 4.6386844 4.7156145 4.8217453 5.1930786
## [85] 6.0676897 6.2587606 6.7546928 7.0396910 8.8180514 9.1409093
# afficher le nombre de classes en abscisse, les sauts en ordonnees
plot(rev(cah$height),type="b")
# nombre de classes
q=4
# ré-afficher l'arbre, avec les classes choisies
plot(cah, hang = -1)
rect.hclust(cah, q)
# classifier (= couper l'arbre)
classif= cutree(cah,q)
classif
## Ain Aisne Allier
## 1 1 1
## Alpes-de-Haute-Provence Hautes-Alpes Ardèche
## 1 2 1
## Ardennes Ariège Aube
## 1 1 1
## Aude Aveyron Bouches-du-Rhône
## 1 1 1
## Calvados Cantal Charente
## 1 1 1
## Charente-Maritime Cher Corrèze
## 1 1 1
## Côte-d'Or Côtes-d'Armor Creuse
## 1 1 1
## Dordogne Doubs Drôme
## 1 1 1
## Eure Eure-et-Loir Finistère
## 1 1 1
## Gard Haute-Garonne Gers
## 1 3 1
## Gironde Hérault Ille-et-Vilaine
## 3 1 1
## Indre Indre-et-Loire Isère
## 1 1 3
## Jura Landes Loir-et-Cher
## 1 1 1
## Loire Haute-Loire Loire-Atlantique
## 1 1 3
## Loiret Lot Lot-et-Garonne
## 1 1 1
## Lozère Maine-et-Loire Manche
## 1 1 1
## Marne Haute-Marne Mayenne
## 1 1 1
## Meurthe-et-Moselle Meuse Morbihan
## 1 1 1
## Moselle Nièvre Nord
## 1 1 1
## Oise Orne Pas-de-Calais
## 1 1 1
## Puy-de-Dôme Pyrénées-Atlantiques Hautes-Pyrénées
## 1 1 1
## Pyrénées-Orientales Bas-Rhin Haut-Rhin
## 1 3 1
## Rhône Haute-Saône Saône-et-Loire
## 3 1 1
## Sarthe Savoie Haute-Savoie
## 1 2 2
## Seine-Maritime Seine-et-Marne Deux-Sèvres
## 1 3 1
## Somme Tarn Tarn-et-Garonne
## 1 1 1
## Var Vaucluse Vendée
## 1 1 1
## Vienne Haute-Vienne Vosges
## 1 1 1
## Yonne Territoire de Belfort Essonne
## 1 1 3
## Seine-Saint-Denis Val-de-Marne Val-d'Oise
## 4 3 3
## La Réunion
## 4
# afficher les villes par classe
sort(classif)
## Ain Aisne Allier
## 1 1 1
## Alpes-de-Haute-Provence Ardèche Ardennes
## 1 1 1
## Ariège Aube Aude
## 1 1 1
## Aveyron Bouches-du-Rhône Calvados
## 1 1 1
## Cantal Charente Charente-Maritime
## 1 1 1
## Cher Corrèze Côte-d'Or
## 1 1 1
## Côtes-d'Armor Creuse Dordogne
## 1 1 1
## Doubs Drôme Eure
## 1 1 1
## Eure-et-Loir Finistère Gard
## 1 1 1
## Gers Hérault Ille-et-Vilaine
## 1 1 1
## Indre Indre-et-Loire Jura
## 1 1 1
## Landes Loir-et-Cher Loire
## 1 1 1
## Haute-Loire Loiret Lot
## 1 1 1
## Lot-et-Garonne Lozère Maine-et-Loire
## 1 1 1
## Manche Marne Haute-Marne
## 1 1 1
## Mayenne Meurthe-et-Moselle Meuse
## 1 1 1
## Morbihan Moselle Nièvre
## 1 1 1
## Nord Oise Orne
## 1 1 1
## Pas-de-Calais Puy-de-Dôme Pyrénées-Atlantiques
## 1 1 1
## Hautes-Pyrénées Pyrénées-Orientales Haut-Rhin
## 1 1 1
## Haute-Saône Saône-et-Loire Sarthe
## 1 1 1
## Seine-Maritime Deux-Sèvres Somme
## 1 1 1
## Tarn Tarn-et-Garonne Var
## 1 1 1
## Vaucluse Vendée Vienne
## 1 1 1
## Haute-Vienne Vosges Yonne
## 1 1 1
## Territoire de Belfort Hautes-Alpes Savoie
## 1 2 2
## Haute-Savoie Haute-Garonne Gironde
## 2 3 3
## Isère Loire-Atlantique Bas-Rhin
## 3 3 3
## Rhône Seine-et-Marne Essonne
## 3 3 3
## Val-de-Marne Val-d'Oise Seine-Saint-Denis
## 3 3 4
## La Réunion
## 4
# Effectifs des classes
table(classif)
## classif
## 1 2 3 4
## 76 3 10 2
# Variances des Ecarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
round(variances_classes,2)
## [1] 12.02 13.19 7.74 9.20
round(variance_totale,2)
## [1] 17.8
# et donc écarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
sqrt(round(variances_classes,2))
## [1] 3.466987 3.631804 2.782086 3.033150
sqrt(round(variance_totale,2))
## [1] 4.219005
# i. Calcul des individus moyens (= moyennes, centres de gravite, centroïde)
moyennes = aggregate(Xcr[,],list(classif),mean)[,-1]
round(moyennes,2)
## TxAct15_64 TxAct15_24 TxPauvrete MedianeNvVie SalNetHorMoy SalNetHorMoyF
## 1 -0.16 0.12 -0.04 -0.15 -0.28 -0.30
## 2 2.01 1.00 -0.92 1.64 0.15 0.03
## 3 0.80 -1.07 -0.41 1.30 2.03 2.04
## 4 -1.07 -0.89 4.83 -3.39 0.08 1.04
## SalNetHorMoyH TxLgt TxPerso15_24 TxPerso15_64 TxPerso25_64 TxEntrp
## 1 -0.26 0.07 -0.21 -0.27 -0.25 -0.16
## 2 0.23 2.39 -0.36 0.59 1.62 2.49
## 3 1.99 -0.92 1.34 1.50 1.14 0.37
## 4 -0.43 -1.59 1.69 1.92 1.49 0.43
## TxEntrpConstru TxEntrpCommerceTransportRestau TxEntrpServMarch
## 1 -0.08 -0.12 -0.21
## 2 1.34 1.97 2.83
## 3 0.01 0.01 0.78
## 4 1.03 1.43 -0.27
## TxEntrpServMarchAupresEntrp TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 -0.24 -0.14 0.09
## 2 1.55 3.62 0.75
## 3 1.34 0.13 -0.90
## 4 0.20 -0.68 -0.08
# ii. Matrice des distances entre individus moyens
round(dist(moyennes),2)
## 1 2 3
## 2 7.75
## 3 5.80 7.81
## 4 7.53 11.40 8.45
# Graphique général
matplot(t(moyennes), type="b")
abline(h=0)
abline(h=c(-1,1),lty=2)
text(1:ncol(X), max(moyennes)*1.1,colnames(X), xpd= NA, srt = 90)
Établissons encore une classification.
En définissant la variable age à l’aide d’une table on peut ensuite facilement réaliser un plot.
# Seulement les villes de la classe 1
X2 = X1[classif==1,]
dim(X2)
## [1] 76 18
# On centre et on réduit :
Xcr=scale(X2)
# On vérifie les nouvelles moyennes et nouveaux écarts-type :
apply(Xcr[,],2,mean) # = ~ 0
## TxAct15_64 TxAct15_24
## -2.821291e-15 4.598551e-16
## TxPauvrete MedianeNvVie
## 1.314554e-16 -1.869834e-15
## SalNetHorMoy SalNetHorMoyF
## -5.857117e-16 1.499159e-15
## SalNetHorMoyH TxLgt
## 7.005173e-16 -3.779165e-16
## TxPerso15_24 TxPerso15_64
## 4.290687e-16 -8.866206e-18
## TxPerso25_64 TxEntrp
## -5.022803e-15 1.556458e-16
## TxEntrpConstru TxEntrpCommerceTransportRestau
## 2.690548e-16 -4.726237e-16
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 1.491634e-16 -4.640385e-17
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## -2.426915e-16 -4.280316e-17
apply(Xcr[,],2,sd) # = ~ 1
## TxAct15_64 TxAct15_24
## 1 1
## TxPauvrete MedianeNvVie
## 1 1
## SalNetHorMoy SalNetHorMoyF
## 1 1
## SalNetHorMoyH TxLgt
## 1 1
## TxPerso15_24 TxPerso15_64
## 1 1
## TxPerso25_64 TxEntrp
## 1 1
## TxEntrpConstru TxEntrpCommerceTransportRestau
## 1 1
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 1 1
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 1
# C.A.H. (distance choisie : average)
cah = hclust(dist(Xcr), method = "average")
# On affichage l'arbre : option hang = -1 (part de la fenêtre graphique réservée aux labels)
plot(cah, hang = -1)
# les hauteurs (sauts)
cah$height
## [1] 0.9223665 1.3217616 1.3889098 1.4498312 1.4858378 1.5499853 1.5510968
## [8] 1.5582454 1.5676527 1.7001485 1.7009260 1.7898770 1.8239343 1.8411734
## [15] 1.8713834 1.8929501 1.9756086 1.9965207 2.0128280 2.0586660 2.1205835
## [22] 2.2224407 2.2401110 2.2590869 2.2869752 2.2933011 2.2943771 2.3360247
## [29] 2.3924217 2.4614456 2.4618501 2.4763436 2.5211761 2.5258168 2.5457048
## [36] 2.5830655 2.6095068 2.6225977 2.6464150 2.7727479 2.9054614 2.9542775
## [43] 2.9871725 3.0220281 3.0343405 3.1355070 3.1487346 3.1583674 3.2381475
## [50] 3.2700645 3.2708998 3.2732072 3.2841945 3.2915984 3.3018945 3.4379324
## [57] 3.4467392 3.5238668 3.5683971 3.7250855 3.9979860 4.0603519 4.0633945
## [64] 4.1319466 4.3733633 4.4956228 4.5261368 4.5287182 4.7948365 5.1509416
## [71] 5.6229603 5.8552851 6.1610805 6.1674491 7.6047328
# afficher le nombre de classes en abscisse, les sauts en ordonnees
plot(rev(cah$height),type="b")
# nombre de classes
q=3
# ré-afficher l'arbre, avec les classes choisies
plot(cah, hang = -1)
rect.hclust(cah, q)
# classifier (= couper l'arbre)
classif= cutree(cah,q)
classif
## Ain Aisne Allier
## 1 1 1
## Alpes-de-Haute-Provence Ardèche Ardennes
## 2 1 1
## Ariège Aube Aude
## 1 1 3
## Aveyron Bouches-du-Rhône Calvados
## 1 2 1
## Cantal Charente Charente-Maritime
## 1 1 1
## Cher Corrèze Côte-d'Or
## 1 1 1
## Côtes-d'Armor Creuse Dordogne
## 1 1 1
## Doubs Drôme Eure
## 1 2 1
## Eure-et-Loir Finistère Gard
## 1 1 2
## Gers Hérault Ille-et-Vilaine
## 1 2 1
## Indre Indre-et-Loire Jura
## 1 1 1
## Landes Loir-et-Cher Loire
## 1 1 1
## Haute-Loire Loiret Lot
## 1 1 1
## Lot-et-Garonne Lozère Maine-et-Loire
## 1 1 1
## Manche Marne Haute-Marne
## 1 1 1
## Mayenne Meurthe-et-Moselle Meuse
## 1 1 1
## Morbihan Moselle Nièvre
## 1 1 1
## Nord Oise Orne
## 1 1 1
## Pas-de-Calais Puy-de-Dôme Pyrénées-Atlantiques
## 1 1 2
## Hautes-Pyrénées Pyrénées-Orientales Haut-Rhin
## 1 3 1
## Haute-Saône Saône-et-Loire Sarthe
## 1 1 1
## Seine-Maritime Deux-Sèvres Somme
## 1 1 1
## Tarn Tarn-et-Garonne Var
## 1 1 2
## Vaucluse Vendée Vienne
## 2 1 1
## Haute-Vienne Vosges Yonne
## 1 1 1
## Territoire de Belfort
## 1
# afficher les villes par classe
sort(classif)
## Ain Aisne Allier
## 1 1 1
## Ardèche Ardennes Ariège
## 1 1 1
## Aube Aveyron Calvados
## 1 1 1
## Cantal Charente Charente-Maritime
## 1 1 1
## Cher Corrèze Côte-d'Or
## 1 1 1
## Côtes-d'Armor Creuse Dordogne
## 1 1 1
## Doubs Eure Eure-et-Loir
## 1 1 1
## Finistère Gers Ille-et-Vilaine
## 1 1 1
## Indre Indre-et-Loire Jura
## 1 1 1
## Landes Loir-et-Cher Loire
## 1 1 1
## Haute-Loire Loiret Lot
## 1 1 1
## Lot-et-Garonne Lozère Maine-et-Loire
## 1 1 1
## Manche Marne Haute-Marne
## 1 1 1
## Mayenne Meurthe-et-Moselle Meuse
## 1 1 1
## Morbihan Moselle Nièvre
## 1 1 1
## Nord Oise Orne
## 1 1 1
## Pas-de-Calais Puy-de-Dôme Hautes-Pyrénées
## 1 1 1
## Haut-Rhin Haute-Saône Saône-et-Loire
## 1 1 1
## Sarthe Seine-Maritime Deux-Sèvres
## 1 1 1
## Somme Tarn Tarn-et-Garonne
## 1 1 1
## Vendée Vienne Haute-Vienne
## 1 1 1
## Vosges Yonne Territoire de Belfort
## 1 1 1
## Alpes-de-Haute-Provence Bouches-du-Rhône Drôme
## 2 2 2
## Gard Hérault Pyrénées-Atlantiques
## 2 2 2
## Var Vaucluse Aude
## 2 2 3
## Pyrénées-Orientales
## 3
# Effectifs des classes
table(classif)
## classif
## 1 2 3
## 66 8 2
# Variances des Ecarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
round(variances_classes,2)
## [1] 13.93 11.00 1.52
round(variance_totale,2)
## [1] 17.76
# et donc écarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
sqrt(round(variances_classes,2))
## [1] 3.732292 3.316625 1.232883
sqrt(round(variance_totale,2))
## [1] 4.214262
# i. Calcul des individus moyens (= moyennes, centres de gravite, centroïde)
moyennes = aggregate(Xcr[,],list(classif),mean)[,-1]
round(moyennes,2)
## TxAct15_64 TxAct15_24 TxPauvrete MedianeNvVie SalNetHorMoy SalNetHorMoyF
## 1 0.13 0.13 -0.18 0.07 -0.07 -0.06
## 2 -0.67 -0.88 0.91 -0.06 0.87 0.70
## 3 -1.77 -0.73 2.36 -1.89 -1.07 -0.76
## SalNetHorMoyH TxLgt TxPerso15_24 TxPerso15_64 TxPerso25_64 TxEntrp
## 1 -0.09 -0.10 0.00 0.02 0.05 -0.29
## 2 0.98 0.35 0.17 0.09 -0.08 2.05
## 3 -1.09 1.87 -0.54 -1.09 -1.36 1.36
## TxEntrpConstru TxEntrpCommerceTransportRestau TxEntrpServMarch
## 1 -0.24 -0.28 -0.30
## 2 1.69 1.82 2.23
## 3 1.32 1.82 1.14
## TxEntrpServMarchAupresEntrp TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 -0.29 -0.30 -0.05
## 2 2.19 2.10 0.49
## 3 0.82 1.41 -0.23
# ii. Matrice des distances entre individus moyens
round(dist(moyennes),2)
## 1 2
## 2 6.16
## 3 6.35 5.23
matplot(t(moyennes), type="b")
abline(h=0)
abline(h=c(-1,1),lty=2)
text(1:ncol(X), max(moyennes)*1.1,colnames(X), xpd= NA, srt = 90 )
Encore une fois, réalisons une autre classification.
# Seulement les villes de la classe 1
X3 = X2[classif==1,]
dim(X3)
## [1] 66 18
# On centre et on réduit :
Xcr=scale(X3)
# On vérifie les nouvelles moyennes et nouveaux écarts-type :
apply(Xcr[,],2,mean) # = ~ 0
## TxAct15_64 TxAct15_24
## 3.792248e-15 -3.895785e-16
## TxPauvrete MedianeNvVie
## 2.915995e-16 2.777660e-16
## SalNetHorMoy SalNetHorMoyF
## 8.622496e-16 3.822470e-16
## SalNetHorMoyH TxLgt
## -5.791019e-16 -4.479151e-17
## TxPerso15_24 TxPerso15_64
## 2.872561e-16 -8.617699e-16
## TxPerso25_64 TxEntrp
## -2.221431e-15 8.933826e-17
## TxEntrpConstru TxEntrpCommerceTransportRestau
## -2.355938e-16 -3.593440e-16
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 3.675289e-16 2.630192e-16
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 4.389852e-16 3.968098e-16
apply(Xcr[,],2,sd) # = ~ 1
## TxAct15_64 TxAct15_24
## 1 1
## TxPauvrete MedianeNvVie
## 1 1
## SalNetHorMoy SalNetHorMoyF
## 1 1
## SalNetHorMoyH TxLgt
## 1 1
## TxPerso15_24 TxPerso15_64
## 1 1
## TxPerso25_64 TxEntrp
## 1 1
## TxEntrpConstru TxEntrpCommerceTransportRestau
## 1 1
## TxEntrpServMarch TxEntrpServMarchAupresEntrp
## 1 1
## TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 1
# C.A.H. (distance choisie : average)
cah = hclust(dist(Xcr), method = "average")
# On affichage l'arbre : option hang = -1 (part de la fenêtre graphique réservée aux labels)
plot(cah, hang = -1)
# les hauteurs (sauts)
cah$height
## [1] 1.051902 1.456970 1.575028 1.676584 1.709589 1.753569 1.821924 1.896595
## [9] 1.908438 1.950279 1.976908 2.008783 2.043770 2.054348 2.071069 2.212601
## [17] 2.223165 2.290010 2.329900 2.428729 2.478351 2.490967 2.517138 2.535825
## [25] 2.544008 2.552762 2.579529 2.595246 2.687711 2.704186 2.724338 2.757243
## [33] 2.782326 2.826187 2.850436 2.867792 2.937167 2.980391 3.130780 3.131758
## [41] 3.163174 3.165492 3.322079 3.442635 3.533015 3.595594 3.631026 3.698953
## [49] 3.787273 3.865123 3.871622 3.893991 3.973715 4.024198 4.060528 4.353851
## [57] 4.385961 4.473562 4.603228 4.919754 5.247990 5.362926 5.589785 6.274283
## [65] 6.593231
# afficher le nombre de classes en abscisse, les sauts en ordonnees
plot(rev(cah$height),type="b")
# nombre de classes
q=4
# ré-afficher l'arbre, avec les classes choisies
plot(cah, hang = -1)
rect.hclust(cah, q)
# classifier (= couper l'arbre)
classif= cutree(cah,q)
classif
## Ain Aisne Allier
## 1 2 3
## Ardèche Ardennes Ariège
## 4 2 4
## Aube Aveyron Calvados
## 1 4 1
## Cantal Charente Charente-Maritime
## 4 3 4
## Cher Corrèze Côte-d'Or
## 3 4 1
## Côtes-d'Armor Creuse Dordogne
## 4 4 4
## Doubs Eure Eure-et-Loir
## 1 1 1
## Finistère Gers Ille-et-Vilaine
## 1 4 1
## Indre Indre-et-Loire Jura
## 3 1 4
## Landes Loir-et-Cher Loire
## 4 3 4
## Haute-Loire Loiret Lot
## 4 1 4
## Lot-et-Garonne Lozère Maine-et-Loire
## 4 4 1
## Manche Marne Haute-Marne
## 3 1 3
## Mayenne Meurthe-et-Moselle Meuse
## 3 1 3
## Morbihan Moselle Nièvre
## 4 1 3
## Nord Oise Orne
## 2 1 3
## Pas-de-Calais Puy-de-Dôme Hautes-Pyrénées
## 2 1 4
## Haut-Rhin Haute-Saône Saône-et-Loire
## 1 3 3
## Sarthe Seine-Maritime Deux-Sèvres
## 3 1 3
## Somme Tarn Tarn-et-Garonne
## 2 4 4
## Vendée Vienne Haute-Vienne
## 3 1 1
## Vosges Yonne Territoire de Belfort
## 3 3 1
# afficher les villes par classe
sort(classif)
## Ain Aube Calvados
## 1 1 1
## Côte-d'Or Doubs Eure
## 1 1 1
## Eure-et-Loir Finistère Ille-et-Vilaine
## 1 1 1
## Indre-et-Loire Loiret Maine-et-Loire
## 1 1 1
## Marne Meurthe-et-Moselle Moselle
## 1 1 1
## Oise Puy-de-Dôme Haut-Rhin
## 1 1 1
## Seine-Maritime Vienne Haute-Vienne
## 1 1 1
## Territoire de Belfort Aisne Ardennes
## 1 2 2
## Nord Pas-de-Calais Somme
## 2 2 2
## Allier Charente Cher
## 3 3 3
## Indre Loir-et-Cher Manche
## 3 3 3
## Haute-Marne Mayenne Meuse
## 3 3 3
## Nièvre Orne Haute-Saône
## 3 3 3
## Saône-et-Loire Sarthe Deux-Sèvres
## 3 3 3
## Vendée Vosges Yonne
## 3 3 3
## Ardèche Ariège Aveyron
## 4 4 4
## Cantal Charente-Maritime Corrèze
## 4 4 4
## Côtes-d'Armor Creuse Dordogne
## 4 4 4
## Gers Jura Landes
## 4 4 4
## Loire Haute-Loire Lot
## 4 4 4
## Lot-et-Garonne Lozère Morbihan
## 4 4 4
## Hautes-Pyrénées Tarn Tarn-et-Garonne
## 4 4 4
# Effectifs des classes
table(classif)
## classif
## 1 2 3 4
## 22 5 18 21
# Variances des Ecarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
round(variances_classes,2)
## [1] 9.40 6.49 5.88 9.47
round(variance_totale,2)
## [1] 17.73
# et donc écarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(Xcr)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
n=sum(classif==k)
variances_classes[k] = sum(diag(var(Xcr[classif==k,])))*(n-1)/n
}
sqrt(round(variances_classes,2))
## [1] 3.065942 2.547548 2.424871 3.077337
sqrt(round(variance_totale,2))
## [1] 4.210701
# i. Calcul des individus moyens (= moyennes, centres de gravite, centroïde)
moyennes = aggregate(Xcr[,],list(classif),mean)[,-1]
round(moyennes,2)
## TxAct15_64 TxAct15_24 TxPauvrete MedianeNvVie SalNetHorMoy SalNetHorMoyF
## 1 0.13 -0.64 -0.51 1.01 1.00 0.97
## 2 -1.86 -0.69 2.08 -1.49 0.22 0.15
## 3 0.23 0.97 -0.11 -0.36 -0.46 -0.42
## 4 0.11 0.00 0.14 -0.39 -0.71 -0.69
## SalNetHorMoyH TxLgt TxPerso15_24 TxPerso15_64 TxPerso25_64 TxEntrp
## 1 1.01 -0.65 0.96 1.01 0.58 -0.35
## 2 0.07 -1.01 1.00 1.09 0.69 -1.29
## 3 -0.49 0.04 -0.51 -0.53 -0.29 -0.56
## 4 -0.66 0.89 -0.81 -0.86 -0.52 1.15
## TxEntrpConstru TxEntrpCommerceTransportRestau TxEntrpServMarch
## 1 -0.51 -0.52 0.05
## 2 -1.29 -0.95 -1.18
## 3 -0.36 -0.41 -0.77
## 4 1.15 1.13 0.88
## TxEntrpServMarchAupresEntrp TxEntrpServMarchAupresMenages TxEntrpIndustrie
## 1 0.30 -0.21 -0.65
## 2 -1.22 -0.95 -1.21
## 3 -0.71 -0.70 -0.05
## 4 0.59 1.04 1.01
# ii. Matrice des distances entre individus moyens
round(dist(moyennes),2)
## 1 2 3
## 2 5.06
## 3 4.37 4.97
## 4 5.86 7.50 4.29
matplot(t(moyennes), type="b")
abline(h=0)
abline(h=c(-1,1),lty=2)
text(1:ncol(X), max(moyennes)*1.1,colnames(X), xpd= NA, srt = 90 )
Pour finir, on peut réaliser une silhouette des différentes individus
library(cluster)
sil = silhouette(classif, dist(X3))
rownames(sil)=rownames(X3)
sil
## cluster neighbor sil_width
## Ain 1 3 0.42029683
## Aisne 2 4 0.61690546
## Allier 3 4 0.21571109
## Ardèche 4 3 -0.34465909
## Ardennes 2 4 0.62284038
## Ariège 4 2 -0.64942316
## Aube 1 3 -0.75904773
## Aveyron 4 3 -0.33468648
## Calvados 1 3 0.15658912
## Cantal 4 3 -0.27059432
## Charente 3 4 0.27898645
## Charente-Maritime 4 3 -0.20034870
## Cher 3 4 0.28725371
## Corrèze 4 3 -0.27494239
## Côte-d'Or 1 3 0.55460942
## Côtes-d'Armor 4 3 -0.18706862
## Creuse 4 2 -0.66389325
## Dordogne 4 2 -0.29577481
## Doubs 1 3 0.53629346
## Eure 1 3 0.50705279
## Eure-et-Loir 1 3 0.59663013
## Finistère 1 3 0.44835963
## Gers 4 3 -0.36409135
## Ille-et-Vilaine 1 3 0.59879722
## Indre 3 2 0.10854845
## Indre-et-Loire 1 3 0.56869490
## Jura 4 1 -0.55348449
## Landes 4 1 -0.21609164
## Loir-et-Cher 3 1 -0.31472535
## Loire 4 3 -0.36436993
## Haute-Loire 4 3 -0.34173521
## Loiret 1 3 0.59878646
## Lot 4 3 -0.35955066
## Lot-et-Garonne 4 2 -0.51256772
## Lozère 4 3 -0.30270071
## Maine-et-Loire 1 3 -0.47826693
## Manche 3 4 0.29288056
## Marne 1 3 0.50409738
## Haute-Marne 3 2 -0.11156519
## Mayenne 3 4 0.29416087
## Meurthe-et-Moselle 1 3 0.46905370
## Meuse 3 4 0.26656897
## Morbihan 4 1 -0.38918965
## Moselle 1 3 0.46550053
## Nièvre 3 4 0.23134770
## Nord 2 3 0.31759796
## Oise 1 3 0.59727838
## Orne 3 2 -0.19264636
## Pas-de-Calais 2 4 0.50459676
## Puy-de-Dôme 1 3 0.58879880
## Hautes-Pyrénées 4 3 -0.33342694
## Haut-Rhin 1 3 0.43638793
## Haute-Saône 3 4 0.26756405
## Saône-et-Loire 3 4 0.29525824
## Sarthe 3 4 0.17841191
## Seine-Maritime 1 3 -0.10872244
## Deux-Sèvres 3 4 0.29279686
## Somme 2 3 -0.37384502
## Tarn 4 3 -0.30923810
## Tarn-et-Garonne 4 2 -0.38695190
## Vendée 3 4 0.09418831
## Vienne 1 3 -0.49134763
## Haute-Vienne 1 3 -0.46333596
## Vosges 3 2 -0.01708901
## Yonne 3 4 0.26598204
## Territoire de Belfort 1 3 0.54375817
## attr(,"Ordered")
## [1] FALSE
## attr(,"call")
## silhouette.default(x = classif, dist = dist(X3))
## attr(,"class")
## [1] "silhouette"
plot(sil,nmax=70, cex.names = 0.5)
Afin d’avoir une meilleur vision de la silhouette, on peut utiliser le package factoextra servant à la même chose mais représentant les différents départements.
library(factoextra) # clustering algorithms & visualization
Xtest <- kmeans(scale(X3), 4, nstart = 25)
# 3. Visualize
library("factoextra")
fviz_cluster(Xtest, data = Xcr,
palette = c("#00AFBB","#FF6347", "#E7B800", "#DA70D6"),
ggtheme = theme_minimal(),
main = "Partitioning Clustering Plot"
)
Pour conclure cette classification, on peut distinguer 4 grands profils dans notre jeu de données, premièrement, on peut observer à l’aide du matplot que ces 4 classes sont les suivantes :
Cette première classe, contenant pour la plupart des départements du nord, se définit premièrement par un taux d’activité des jeunes assez faible, on retrouve deuxièmement un taux de pauvreté assez faible aussi en corrélation avec une médiane de niveau de vie, et des salaires horaires net moyens important environ 1 écart type, aucune distinction entre les femmes et les hommes semblent notable. Cependant, cette classe se démarque négativement de part un taux d’entreprise assez faible, avec tout de même un secteur dans les services marchands auprès des marchands remarquable.
On retrouve ensuite une deuxième classe très identifiable par un taux d’activité de la population extrêmement faible, plus de deux écarts-types ainsi qu’un taux de pauvreté très significativement élevée, cela reste en adéquation avec une i une médiane de niveau vie faible avec plus d’un écart type. Cette classe possède aussi un taux de logement faible, mais elle se démarque encore plus de part son taux d’entreprise inégalement faible, soit plus de deux écarts-types. En analysant les différents individus de la classe, Nord, Somme, Pas de Calais, on remarque qu’il s’agit de départements très ruraux, ce qui expliquerait donc ces derniers relevés.
Quant à la classe 3, on peut voir qu’il s’agit d’une classe contenant des départements ou le taux d’activité des jeunes est important, mais qui semble tout de même être assez en deçà dans l’ensemble comme le témoigne le matplot. En effet hormis le taux d’activité, cette classe se distingue par des taux dans l’ensemble des catégories assez faible, souvent proche de la moyenne.
Finalement, cette dernière classe contient 21 individus, ou on retrouve de manière significative un taux de logement élevé et un taux d’entreprise important, paradoxalement, on remarque que les salaires nets moyens sont assez faibles.
Intéressons-nous maintenant à la silhouette ainsi qu’au plot du package factorextra. À l’aide de ces deux plots, on peut venir renforcer notre analyse, ainsi, on remarque que dans l’ensemble les classes 1,2,3 sont assez homogènes, en effet les valeurs de leurs silhouettes sont positifs, cependant quelques individus de ces classes semblent avoir tendance à être voisins d’une autre classe.
En observant avec la fonction sil et a l’aide du plot final on remarque que dans la classe 1 l’Aube,le Maine-et-Loire,la Seine-Maritime,Vienne et Haute-Vienne sont des départements très voisins à la classe 3, de plus cela est visible sur la representation en 2 dimensions que nous fournit le plot.
Concernant la classe 2, on peut voir que la Somme est elle aussi un département très proche de la classe 3, cependant sur le plot étant donné qu’il n’est qu’en 2 dimensions, on ne peut pas apercevoir ce rapprochement, réaliser un plot en 3 dimensions nous aiderait sûrement plus.
Pour la classe 3 d’autres individus posent “problèmes” comme le département de la Loir-et-Cher, de la Haute-Marne, de l’Orne, ainsi que celui des Vosges. Ces départements semblent très liés a la classe 2. Enfin la classe 4, elle possède contrairement aux autres une valeur de silhouette très négative, la plupart des individus de cette classe sont voisins avec la classe 3.
Pour conclure cette classification, nous avons pu voir plusieurs profils intéressants grâce à l’aide du matplot et des différents boxplots, de plus par le biais de la silhouette et du plot nous avons vu voir le voisinage des différentes classes entre elles.