Iris K-Means Clustering

Author

TRA BI

1 Classification

1.1 Introduction

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).

1.2 WHY

classification supervisée,
  • on connaît déjà le nombre de groupes qui existent dans la population;

  • on connaît le groupe auquel appartient chaque observation de la population;

  • on veut classer les observations dans les bons groupes à partir de différentes variables.

classification non supervisée,
  • 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.

2 WHO USE ?

classification supervisée,

On peut ensuite utiliser une règle de classification pour prédire les groupes auxquels appartiennent de nouvelles observations. Des exemples classiques d’applications sont:

  • identifier si une transaction bancaire est frauduleuse ou pas;

  • reconnaître des chiffres écrits à la main;

  • identifier le type de cancer dont souffre un patient.

classification non supervisée,

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);

2.1 How Does One Use it ?

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 .

2.1.1 Mesures de distance

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\)

Attention

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\]\(μ_k\) = moyenne de la variable \(k\); \(s_k\) = écart-type de la variable \(k\)

2.2 Librairies et fonctions

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.

Code
me <- read.table("http://pbil.univ-lyon1.fr/R/donnees/mortality_Europe.txt", h=TRUE)
Code
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

Code
mame <- me[,c(5:9,11:24)]
Code
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
Code
rownames(mame) <- me$Code

On vérifier si la variable Code est un idendtifiant

Code
sum(summary(factor(me$Code))>1)
[1] 0
Code
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
Code
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

Code
dis_aut_belg_euc <- sqrt(sum((mame[1,]-mame[2,])^2))
dis_aut_belg_euc
[1] 13.49074
Code
dis_all_fra_euc <- sqrt(sum((mame[8,]-mame[9,])^2))
dis_all_fra_euc
[1] 198.2435
Code
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

Code
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

Code
as.matrix(dist_mame)[9,8]#on n'a plus qu'à la convertir comme matrice 
[1] 198.2435
  • Exemple
Code
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
Code
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
Code
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
2.2.0.1 première methode
Code
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.

Code
res1$merge
     [,1] [,2]
[1,]   -1   -2
[2,]   -3    1
[3,]   -4    2
Code
names(res1)
[1] "merge"       "height"      "order"       "labels"      "method"     
[6] "call"        "dist.method"
Code
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"
Code
plot(hclust(dw,"single"),hang=-1)

2.2.0.2 deuxieme methode qui associe les liens max d’abbord
Code
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"
Code
plot(hclust(dw,"complete"),hang=-1)

2.2.0.3 troisieme methode de moyenne
Code
plot(hclust(dw,"average"),han=-1)

Code
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"
Code
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
Code
plot(w,type="n",asp=1, main = "Table 3.1 page 36")
text(w[,1],w[,2],1:7)

Code
dw <- dist(w)
Code
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
2.2.0.4 peut-être une quartrième
Code
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"
Code
plot(hc1,hang=-1)

3 On reprend avec notre base de donnée du début

Code
datatable(mame, filter = "top")
Code
plot(mame[,1]~mame[,2], mame)
with(mame, text(mame[,1]~mame[,2], labels=me$Code, pos = 4, cex = 0.4))

Code
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)
Code
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)

Code
parti <- cutree(classif, h = 250)
parti
AUT 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 
Code
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)

Code
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]
}
Code
plot(RSQ, type="l")
points(RSQ)

Code
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