Code
me <- read.table("http://pbil.univ-lyon1.fr/R/donnees/mortality_Europe.txt", h=TRUE)La classification a pour but de regrouper (partitionner, segmenter) n observations en un certain nombre de groupes ou de classes homogènes. Il existe deux principaux types de classification:
la classification supervisée, souvent appelée simplement classification (Classification en anglais);
la classification non supervisée, parfois appelée partitionnement, segmentation ou regroupement (Clustering en anglais).
on ne connaît souvent pas le nombre de groupes qui existent dans la population;
on ne connaît pas le groupe auquel appartient chaque observation de la population;
on veut classer les observations dans des groupes homogènes à partir de différentes variables.
Les applications typiques sont nombreuses. Par exemple:
en biologie : l’élaboration de la taxonomie animale;
en psychologie : la détermination des types de personnalités présents dans un groupe d’individus;
en text mining : le partitionnement de courriels ou de textes en fonction du sujet traité;
Il existe plusieurs familles de méthodes de classification non supervisée. Les plus communes sont:
la classification hiérarchique;
la classification non hiérarchique, par exemple la méthode des k-moyennes (k-means);
Pour regrouper des observations en groupes homogènes, il faut tout d’abord avoir une définition de ce que sont des observations similaires ou des observations différentes. Il faut donc être en mesure de quantifier la similarité ou la distance entre deux observations .
Une mesure de distance \(d\) doit satisfaire les propriétés suivantes pour tout \(i,j,k∈\{1,…,n\}\)
\(d(i,j)≥0;\)
\(d(i,i)=0\)
\(d(i,j)=d(j,i)\)
\(d(i,k)≤d(i,j)+d(j,k)\)
La distance \(\mathscr{L}_q\) entre deux vecteurs dans $^p \(est définie par\)\(||x_i−x_j||_q= \left(\displaystyle\sum_{i = 1}^{p}\left|x_{ik} - x_{jk}\right|^q\right)^{\frac{1}{q}}\)$.La distance euclidienne correspond au cas où \(q=2\)
Remarquez que la distance \(L_q\) n’est PAS invariante à un changement d’échelle.
Cette remarque et cet exemple expliquent pourquoi dans plusieurs situations en pratique on préfère travailler avec la distance standardisée entre les variables
\[ d^2(x_i,x_j) = \displaystyle\sum_{i=1}^{p}\left( \frac{x_{ik}-u_k}{s_k} - \frac{x_{jk}-u_k}{s_k} \right)^2 = \displaystyle\sum_{i=1}^{p}\left( \frac{x_{ik}-x_{jk}}{s_k} \right)^2\] où \(μ_k\) = moyenne de la variable \(k\); \(s_k\) = écart-type de la variable \(k\)
La librairie stats est une librairie de base de R. Elle contient une fonction pour effectuer la classification par l’algorithme des k-moyennes (la fonction kmeans) et une fonction pour effectuer une classification hiérarchique ascendante (la fonction hclust). Ces deux fonctions sont efficaces et offrent plusieurs options intéressantes. Malheureusement, elles ne permettent pas de traiter des variables de natures différentes (par exemple, des variables numériques et catégorielles). Or une grande partie des jeux de données utilisés en segmentation contiennent des variables de nature différentes. Pour cette raison, nous nous concentrerons sur les fonctions de la librairie cluster, plus particulièrement sur les trois fonctions suivantes: daisy, agnes et pam.
me <- read.table("http://pbil.univ-lyon1.fr/R/donnees/mortality_Europe.txt", h=TRUE)names(me) [1] "State" "Code" "CS0" "CS1" "CS1A" "CS1B" "CS1C" "CS1D" "CS1E"
[10] "CS2" "CS2A" "CS2B" "CS2C" "CS2D" "CS2E" "CS2F" "CS2H" "CS2I"
[19] "CS2J" "CS2K" "CS2L" "CS2M" "CS2N" "CS2P" "CS3" "CS3A" "CS3B"
on remarque qu’on prend les causes sans les totaux
mame <- me[,c(5:9,11:24)]head(mame) CS1A CS1B CS1C CS1D CS1E CS2A CS2B CS2C CS2D CS2E CS2F CS2H CS2I CS2J CS2K
1 0.5 0.9 0 0.1 0.0 21.0 0.7 3.1 1.1 0.6 4.1 32.7 3.7 3.2 2.0
2 1.6 6.2 0 0.2 0.4 29.2 1.5 1.8 1.5 0.7 11.0 30.5 8.7 5.2 3.1
3 0.4 0.6 0 0.1 0.0 14.1 0.3 1.7 0.1 0.4 2.1 25.6 2.3 2.2 1.2
4 1.9 3.3 0 0.2 0.3 27.2 0.6 3.8 0.7 0.5 4.4 50.8 5.0 4.8 1.7
5 0.8 2.2 0 0.1 0.1 16.3 0.3 1.4 0.5 0.9 4.9 12.2 4.6 2.4 0.9
6 0.1 0.2 0 0.0 0.0 3.8 0.1 0.1 0.0 0.3 0.3 7.9 0.3 0.6 0.4
CS2L CS2M CS2N CS2P
1 0.1 0.2 0.3 0
2 0.3 0.5 0.3 0
3 0.0 0.1 0.1 0
4 0.2 0.2 0.2 0
5 0.1 0.3 0.1 0
6 0.0 0.0 0.0 0
rownames(mame) <- me$CodeOn vérifier si la variable Code est un idendtifiant
sum(summary(factor(me$Code))>1)[1] 0
head(mame) CS1A CS1B CS1C CS1D CS1E CS2A CS2B CS2C CS2D CS2E CS2F CS2H CS2I CS2J CS2K
AUT 0.5 0.9 0 0.1 0.0 21.0 0.7 3.1 1.1 0.6 4.1 32.7 3.7 3.2 2.0
BEL 1.6 6.2 0 0.2 0.4 29.2 1.5 1.8 1.5 0.7 11.0 30.5 8.7 5.2 3.1
HRV 0.4 0.6 0 0.1 0.0 14.1 0.3 1.7 0.1 0.4 2.1 25.6 2.3 2.2 1.2
CZE 1.9 3.3 0 0.2 0.3 27.2 0.6 3.8 0.7 0.5 4.4 50.8 5.0 4.8 1.7
DNK 0.8 2.2 0 0.1 0.1 16.3 0.3 1.4 0.5 0.9 4.9 12.2 4.6 2.4 0.9
EST 0.1 0.2 0 0.0 0.0 3.8 0.1 0.1 0.0 0.3 0.3 7.9 0.3 0.6 0.4
CS2L CS2M CS2N CS2P
AUT 0.1 0.2 0.3 0
BEL 0.3 0.5 0.3 0
HRV 0.0 0.1 0.1 0
CZE 0.2 0.2 0.2 0
DNK 0.1 0.3 0.1 0
EST 0.0 0.0 0.0 0
mame CS1A CS1B CS1C CS1D CS1E CS2A CS2B CS2C CS2D CS2E CS2F CS2H CS2I CS2J
AUT 0.5 0.9 0.0 0.1 0.0 21.0 0.7 3.1 1.1 0.6 4.1 32.7 3.7 3.2
BEL 1.6 6.2 0.0 0.2 0.4 29.2 1.5 1.8 1.5 0.7 11.0 30.5 8.7 5.2
HRV 0.4 0.6 0.0 0.1 0.0 14.1 0.3 1.7 0.1 0.4 2.1 25.6 2.3 2.2
CZE 1.9 3.3 0.0 0.2 0.3 27.2 0.6 3.8 0.7 0.5 4.4 50.8 5.0 4.8
DNK 0.8 2.2 0.0 0.1 0.1 16.3 0.3 1.4 0.5 0.9 4.9 12.2 4.6 2.4
EST 0.1 0.2 0.0 0.0 0.0 3.8 0.1 0.1 0.0 0.3 0.3 7.9 0.3 0.6
FIN 0.3 0.3 0.0 0.0 0.0 12.2 0.4 0.5 0.2 1.0 10.3 19.1 1.8 2.4
FRA 9.0 21.2 0.1 1.4 4.4 172.0 7.5 12.5 7.2 5.7 64.1 144.3 31.3 25.1
DEU 14.1 23.5 0.0 1.1 1.0 233.3 7.6 24.1 9.2 7.1 62.5 329.6 54.3 40.0
HUN 0.8 1.1 0.0 0.3 0.1 32.6 0.5 2.7 0.4 0.7 4.4 60.0 6.3 6.2
ISL 0.0 0.1 0.0 0.0 0.0 0.6 0.0 0.0 0.0 0.0 0.3 0.7 0.1 0.1
IRL 0.2 1.2 0.0 0.1 0.0 8.8 0.2 0.6 0.2 0.3 3.0 9.0 2.7 1.2
ITA 11.4 13.9 0.0 0.8 2.2 174.0 8.8 22.8 7.3 1.6 49.1 221.9 38.7 27.5
LVA 0.3 0.4 0.0 0.1 0.0 6.2 0.1 0.5 0.0 0.3 0.5 16.7 0.4 1.1
LTU 0.7 0.6 0.0 0.1 0.0 8.7 0.2 0.3 0.1 0.5 0.7 23.9 0.9 2.1
LUX 0.0 0.1 0.0 0.0 0.0 1.0 0.0 0.1 0.0 0.0 0.3 1.2 0.3 0.2
MLT 0.0 0.2 0.0 0.0 0.0 0.9 0.0 0.1 0.0 0.0 0.2 1.4 0.2 0.1
NLD 2.5 5.4 0.0 0.3 0.3 45.9 1.7 3.0 1.0 0.6 18.9 38.6 11.2 4.7
NOR 0.6 2.0 0.0 0.1 0.2 11.4 0.3 0.7 0.3 0.6 4.4 11.8 3.1 1.3
MDA 0.5 1.1 0.0 0.3 0.0 6.4 0.1 0.4 0.0 0.5 0.3 26.3 1.0 3.9
ROU 2.9 7.1 0.0 0.6 0.1 51.6 0.3 2.5 0.1 1.4 3.6 150.4 9.5 14.6
SVK 0.3 1.9 0.0 0.2 0.0 14.2 0.1 0.9 0.2 0.3 2.5 21.5 1.3 3.1
SVN 0.2 0.8 0.0 0.0 0.0 6.3 0.1 0.3 0.1 0.1 0.4 8.0 0.7 0.9
ESP 5.3 11.3 0.0 0.8 1.0 110.0 4.3 9.7 3.9 1.3 43.0 113.7 38.4 20.5
SWE 1.3 3.6 0.0 0.1 0.2 23.1 1.1 2.1 0.6 0.7 10.7 32.0 5.1 3.0
CHE 0.5 1.9 0.0 0.1 0.1 17.6 0.7 1.3 0.5 0.5 9.0 20.6 3.4 2.7
MKD 0.1 0.1 0.0 0.1 0.0 4.1 0.0 0.9 0.0 0.0 0.2 12.1 0.9 0.4
GBR 5.9 32.2 0.1 1.5 0.3 166.1 3.8 6.0 2.9 3.7 87.6 146.6 50.3 27.8
CS2K CS2L CS2M CS2N CS2P
AUT 2.0 0.1 0.2 0.3 0.0
BEL 3.1 0.3 0.5 0.3 0.0
HRV 1.2 0.0 0.1 0.1 0.0
CZE 1.7 0.2 0.2 0.2 0.0
DNK 0.9 0.1 0.3 0.1 0.0
EST 0.4 0.0 0.0 0.0 0.0
FIN 0.5 0.0 0.2 0.2 0.0
FRA 10.3 1.3 3.7 1.9 0.2
DEU 26.7 1.5 2.9 1.8 0.1
HUN 1.5 0.1 0.3 0.3 0.0
ISL 0.0 0.0 0.0 0.0 0.0
IRL 0.7 0.0 0.2 0.2 0.0
ITA 16.2 1.1 2.8 1.4 0.0
LVA 0.5 0.1 0.1 0.1 0.0
LTU 0.4 0.0 0.1 0.1 0.0
LUX 0.1 0.0 0.0 0.0 0.0
MLT 0.1 0.0 0.0 0.0 0.0
NLD 3.6 0.3 0.8 0.5 0.0
NOR 0.9 0.1 0.2 0.1 0.0
MDA 0.5 0.0 0.0 0.3 0.0
ROU 6.5 0.1 0.0 0.5 0.0
SVK 0.9 0.2 0.1 0.2 0.0
SVN 0.4 0.0 0.1 0.0 0.0
ESP 13.1 1.4 3.6 1.0 0.0
SWE 1.5 0.2 0.4 0.3 0.0
CHE 1.4 0.1 0.4 0.3 0.0
MKD 0.4 0.0 0.0 0.0 0.0
GBR 10.0 1.9 4.2 2.0 0.2
la diistance se calcule entre les observations
Elle mesure la dissimilarité entre les individus. c’est le critère selon lequel l’ont détermine des groupes hommogènes distinct
dis_aut_belg_euc <- sqrt(sum((mame[1,]-mame[2,])^2))
dis_aut_belg_euc[1] 13.49074
dis_all_fra_euc <- sqrt(sum((mame[8,]-mame[9,])^2))
dis_all_fra_euc[1] 198.2435
summary(factor(me$Code))AUT BEL CHE CZE DEU DNK ESP EST FIN FRA GBR HRV HUN IRL ISL ITA LTU LUX LVA MDA
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
MKD MLT NLD NOR ROU SVK SVN SWE
1 1 1 1 1 1 1 1
distance entre deux valeurs
dist_mame <- dist(mame)
dist_mame AUT BEL HRV CZE DNK EST
BEL 13.4907376
HRV 10.4374326 20.5319264
CZE 19.4676655 22.1262288 28.9967240
DNK 21.2362897 24.2383993 14.1753307 40.3004963
EST 30.9460821 37.6239286 20.8019230 49.7370084 14.9946657
FIN 17.7648529 22.8742213 10.7624347 36.1289358 10.3155223 17.3899396
FRA 202.2012117 194.0090977 212.3643332 187.2142623 217.3057063 231.2487622
DEU 377.4411875 372.4488555 387.6928294 359.1983018 396.2647221 408.2991183
HUN 29.9472870 31.0570443 39.5570474 11.1789982 50.7103540 60.3163328
ISL 38.6507438 44.4825809 28.6318005 57.5587526 20.8456230 7.9158070
IRL 26.9449439 32.1320712 17.5365333 46.0992408 8.8141931 6.4117080
ITA 253.0672243 247.6213238 263.4101365 235.3154691 271.4110536 283.8505240
LVA 22.6784038 31.0475442 12.2902400 40.9643748 12.8883668 9.1536878
LTU 16.1613737 26.1956103 6.2201286 33.5708207 15.1818971 16.8353794
LUX 37.9863133 43.8298985 27.9764186 56.9043935 20.2049499 7.2869747
MLT 37.8989446 43.8026255 27.8691586 56.7947181 20.2185558 7.1505245
NLD 30.9961288 20.4205779 39.8311436 27.5323446 42.9392594 57.0327976
NOR 23.2830410 28.0082131 14.4118007 42.4314742 5.3478968 10.1262036
MDA 16.9584787 27.4526866 8.3779472 32.9733226 18.3382115 18.9206237
ROU 122.5579455 122.6399201 131.4070394 103.3161168 143.4634797 151.6012203
SVK 13.7258879 21.6194357 4.6195238 32.5866537 10.4498804 17.5840837
SVN 29.4345036 35.6509467 19.5082034 48.3985537 12.6510869 2.6438608
ESP 133.5405556 125.7742422 143.7400431 118.0832334 149.5553409 163.0892394
SWE 7.7556431 8.2395388 14.6850264 20.4191087 21.8254439 33.3216146
CHE 13.6872203 17.1924402 9.4180677 32.2916398 9.5603347 21.1627030
MKD 27.4091226 34.9605492 17.1160743 45.9348452 13.9749776 4.3474130
GBR 211.9059697 202.7968935 221.8027502 197.3532619 226.1775409 240.1791415
FIN FRA DEU HUN ISL IRL
BEL
HRV
CZE
DNK
EST
FIN
FRA 215.4142521
DEU 392.8699021 198.2435371
HUN 46.5346108 178.5649182 348.9120090
ISL 24.1497412 237.9859029 415.8990142 68.1565844
IRL 13.0583307 225.7062250 403.7421454 56.6846540 12.3995968
ITA 268.3138274 80.8460883 126.2676126 225.2417368 291.3273417 279.0895376
LVA 11.9214093 224.2098125 399.8906350 51.5273714 17.0091152 8.8532480
LTU 11.3569362 218.0495357 392.6360656 44.0643847 24.6975707 15.2387664
LUX 23.5514331 237.3499737 415.2319713 67.5008148 0.6928203 11.7409540
MLT 23.5061694 237.3431693 415.1617757 67.3963649 0.7937254 11.7209215
NLD 41.6349613 174.6180689 355.5255124 29.9903318 63.5652421 51.2896676
NOR 9.7503846 221.5918545 399.7216907 53.0311229 16.5233169 4.2130749
MDA 13.7688053 218.3488951 391.9455319 43.3493945 26.5772459 17.9688620
ROU 138.3429073 138.8761319 269.6287448 93.1712939 159.4653254 148.7714354
SVK 8.6539009 214.4788335 390.8443552 43.1736030 25.2606413 13.8538803
SVN 16.1480649 229.1952879 406.6742923 58.9865239 9.3600214 4.3081318
ESP 147.2570881 74.0122287 252.0346603 109.3084626 170.0466995 157.6776776
SWE 17.6906755 198.7639806 375.5936368 30.5442302 40.6264692 28.5114012
CHE 6.3490157 210.3803936 388.3843843 42.6851262 28.0492424 15.8981131
MKD 14.9321800 228.5221433 404.7494410 56.5170771 11.9974997 6.7134194
GBR 223.9084858 34.4559139 199.0411264 189.1348196 246.6801168 234.4641337
ITA LVA LTU LUX MLT NLD
BEL
HRV
CZE
DNK
EST
FIN
FRA
DEU
HUN
ISL
IRL
ITA
LVA 275.6536051
LTU 268.5785732 7.7265775
LUX 290.6603860 16.3948163 24.0813206
MLT 290.6028389 16.2449992 23.9361651 0.3000000
NLD 230.2157684 50.7348992 45.7358721 62.9301200 62.9289282
NOR 275.0447236 8.7584245 13.2427339 15.8745079 15.8477128 47.1881341
MDA 268.1142480 10.0558441 3.8574603 25.9863426 25.8282791 46.9624318
ROU 154.7456300 142.4951227 134.8023739 158.8417766 158.6985192 113.5017621
SVK 266.4307039 9.9242128 6.5566760 24.6060968 24.5138736 41.2262053
SVN 282.1319018 8.7258237 16.1437294 8.7000000 8.6151030 54.9551635
ESP 127.0785584 155.7156062 149.3101805 169.3867763 169.3716328 107.3433743
SWE 251.0110157 25.8058133 20.1628371 39.9798699 39.9184168 26.1042142
CHE 263.6699073 15.2810340 13.0341858 27.4109467 27.3771803 36.2394812
MKD 280.4166899 5.1797683 12.8386136 11.3833211 11.2280898 54.5675728
GBR 89.9505420 233.3534872 227.3541950 246.0577981 246.0608665 183.6011983
NOR MDA ROU SVK SVN ESP
BEL
HRV
CZE
DNK
EST
FIN
FRA
DEU
HUN
ISL
IRL
ITA
LVA
LTU
LUX
MLT
NLD
NOR
MDA 16.2668374
ROU 145.2980729 133.1339927
SVK 10.6009434 9.5231297 135.2180831
SVN 8.0492236 18.5623274 150.6539744 16.0084353
ESP 153.6011719 149.3044206 85.7019836 146.2380252 161.1914080
SWE 24.4481083 21.2042449 122.7882731 16.6826257 31.6777524 130.3354518
CHE 11.8330047 15.6176183 135.1808049 7.7627315 19.3682730 142.3409288
MKD 9.0255194 14.8664051 147.5448745 14.3833237 4.7843495 160.0733582
GBR 230.3475201 227.5416665 150.7729750 223.8130917 238.1974181 82.9686688
SWE CHE MKD
BEL
HRV
CZE
DNK
EST
FIN
FRA
DEU
HUN
ISL
IRL
ITA
LVA
LTU
LUX
MLT
NLD
NOR
MDA
ROU
SVK
SVN
ESP
SWE
CHE 13.0571819
MKD 30.1726698 18.6895693
GBR 207.6637908 219.1514545 237.5083999
on remarque que la ligne est décalé d’un individu et qu’elle commence pas le \(2ième\) individu. donc la \(i-ième\) ligne de la matrice est en faite le \(i+1 ième\) individu.
Pour aranger ça, on transforme en matrice pour réorganiser
la distance entre le \(10ième\) élément et le \(8ième\) individus
as.matrix(dist_mame)[9,8]#on n'a plus qu'à la convertir comme matrice [1] 198.2435
w <- c(0,1,2.1,3.3)
w <- data.frame(w)
w w
1 0.0
2 1.0
3 2.1
4 3.3
dw <- dist(w) # comme pour les pays, cela ramene des dist du coup elle est sym
dw 1 2 3
2 1.0
3 2.1 1.1
4 3.3 2.3 1.2
as.matrix(dw) 1 2 3 4
1 0.0 1.0 2.1 3.3
2 1.0 0.0 1.1 2.3
3 2.1 1.1 0.0 1.2
4 3.3 2.3 1.2 0.0
res1 <- hclust(dw,"single") res1$merge contient les différentes étapes de regroupement des individus. - Une entrée négative indique un regroupement de singletons ; - une entrée positive indique un regroupement de classes.
res1$merge [,1] [,2]
[1,] -1 -2
[2,] -3 1
[3,] -4 2
names(res1)[1] "merge" "height" "order" "labels" "method"
[6] "call" "dist.method"
unclass(res1)$merge
[,1] [,2]
[1,] -1 -2
[2,] -3 1
[3,] -4 2
$height
[1] 1.0 1.1 1.2
$order
[1] 4 3 1 2
$labels
NULL
$method
[1] "single"
$call
hclust(d = dw, method = "single")
$dist.method
[1] "euclidean"
plot(hclust(dw,"single"),hang=-1)unclass(hclust(dw,"complete")) $merge
[,1] [,2]
[1,] -1 -2
[2,] -3 -4
[3,] 1 2
$height
[1] 1.0 1.2 3.3
$order
[1] 1 2 3 4
$labels
NULL
$method
[1] "complete"
$call
hclust(d = dw, method = "complete")
$dist.method
[1] "euclidean"
plot(hclust(dw,"complete"),hang=-1)plot(hclust(dw,"average"),han=-1)unclass(hclust(dw,"average"))$merge
[,1] [,2]
[1,] -1 -2
[2,] -3 -4
[3,] 1 2
$height
[1] 1.0 1.2 2.2
$order
[1] 1 2 3 4
$labels
NULL
$method
[1] "average"
$call
hclust(d = dw, method = "average")
$dist.method
[1] "euclidean"
x <- c(9,18,24,25,32,34,40)
y <- c(33,7,23,40,47,30,16)
(w <- cbind(x,y)) x y
[1,] 9 33
[2,] 18 7
[3,] 24 23
[4,] 25 40
[5,] 32 47
[6,] 34 30
[7,] 40 16
plot(w,type="n",asp=1, main = "Table 3.1 page 36")
text(w[,1],w[,2],1:7)dw <- dist(w)dw^2 1 2 3 4 5 6
2 757
3 325 292
4 305 1138 290
5 725 1796 640 98
6 634 785 149 181 293
7 1250 565 305 801 1025 232
hc1 <- hclust(dw,"ward.D2")
unclass(hc1)$merge
[,1] [,2]
[1,] -4 -5
[2,] -3 -6
[3,] -7 2
[4,] -1 1
[5,] -2 3
[6,] 4 5
$height
[1] 9.899495 12.206556 17.559423 25.573424 26.583203 40.987803
$order
[1] 1 4 5 2 7 3 6
$labels
NULL
$method
[1] "ward.D2"
$call
hclust(d = dw, method = "ward.D2")
$dist.method
[1] "euclidean"
plot(hc1,hang=-1)datatable(mame, filter = "top")plot(mame[,1]~mame[,2], mame)
with(mame, text(mame[,1]~mame[,2], labels=me$Code, pos = 4, cex = 0.4))p <- ggplot(mame) +
aes(x=CS1A, y=CS1B, label = rownames(mame))+
geom_point(color="#69b3a2") +
geom_text()+
xlab("Date")+
ylab("niveau de l'eau")
ggplotly(p)dmame <- dist(mame)
classif <- hclust(d = dmame, method = "ward.D2")
plot(classif, main="Dendrogramme des pays \n methode de Ward", xlab = "Les pays",
sub = "")
abline(h = 250, col = "red", lwd = 1.5)parti <- cutree(classif, h = 250)
partiAUT BEL HRV CZE DNK EST FIN FRA DEU HUN ISL IRL ITA LVA LTU LUX MLT NLD NOR MDA
1 1 1 1 1 1 1 2 3 1 1 1 2 1 1 1 1 1 1 1
ROU SVK SVN ESP SWE CHE MKD GBR
2 1 1 2 1 1 1 2
plot(rev(classif$height), type = 'l', main = "hauteurs du dendrogramme décroissantes",
ylab = "classif$height", xlab = "", las = 1)
points(1:length(classif$height), rev(classif$height), pch = 20)RSQ <- rep(0, nrow(mame))
SQTot <- sum(scale(mame, scale = FALSE)^2)
for (i in 1:nrow(mame)) {
Cla <- as.factor(cutree(classif, i))
sum(t((t(sapply(1:ncol(mame), function(i) tapply(mame[,i], Cla, mean)))-
apply(mame, 2, mean))^2) * as.vector(table(Cla)))/SQTot -> RSQ[i]
}plot(RSQ, type="l")
points(RSQ)RSQ1 <- RSQ[2:27]
F <- ((RSQ1^2)*(28-2:27))/((1-(RSQ1^2))*(28-2:27))
points(F)
plot(F, type="l")
ward_data <- read.csv("http://195.220.111.166/R/serp.csv", h=T)
ward_data <- ward_data[,2:3]
rownames(ward_data) <- ward_data$Code
dward <- dist(ward_data)
classif1 <- hclust(d = dward, method = "ward.D2")
plot(classif1, main="Dendrogramme des pays \n methode de Ward", xlab = "Les pays",
sub = "")
plot(rev(classif1$height[1:30]), type = 'l', main = "hauteurs du dendrogramme décroissantes",
ylab = "classif$height", xlab = "", las = 1)
points(1:30, rev(classif1$height)[1:30], pch = 20)
#on projette le graphe du serpentin par un nuage de point en fonction des classes