Document complémentaire au module 6 du cours SDD II de 2025-2026. Distribué sous licence CC BY-NC-SA 4.0.

Veuillez vous référer au cours en ligne pour les explications et les interprétations de cette analyse.

Installer un environnement R adéquat pour reproduire cette analyse.

Indices et matrices de distances

#Configure SciViews::R for multivariate data exploration
SciViews::R("explore")

# Read the zooplankton dataset
zoo <- read("zooplankton", package = "data.io")
zoo
## # A data.trame: [1,262 × 20]
##      ecd  area perimeter feret major minor  mean  mode   min   max std_dev range  size aspect elongation compactness transparency circularity density class           
##    <dbl> <dbl>     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl> <dbl> <dbl>  <dbl>      <dbl>       <dbl>        <dbl>       <dbl>   <dbl> <fct>           
##  1 0.770 0.465      4.45 1.32  1.16  0.509 0.363 0.036 0.004 0.908   0.231 0.904 0.837  0.437       8.50        3.38     0.0798        0.296   0.169  Poecilostomatoid
##  2 0.700 0.385      2.32 0.728 0.713 0.688 0.361 0.492 0.024 0.676   0.183 0.652 0.700  0.965       1           1.12     0.000123      0.896   0.139  Egg_round       
##  3 0.815 0.521      4.15 1.33  1.11  0.598 0.308 0.032 0.008 0.696   0.204 0.688 0.854  0.538       6.10        2.63     0.0461        0.380   0.161  Calanoid        
##  4 0.785 0.484      4.44 1.78  1.56  0.394 0.332 0.036 0.004 0.728   0.218 0.724 0.979  0.252       8.07        3.24     0.198         0.308   0.161  Poecilostomatoid
##  5 0.361 0.103      1.71 0.739 0.694 0.188 0.153 0.016 0.008 0.452   0.110 0.444 0.441  0.271       4.89        2.26     0.181         0.443   0.0157 Harpacticoid    
##  6 0.832 0.544      5.27 1.66  1.36  0.511 0.371 0.02  0.004 0.844   0.268 0.84  0.934  0.377      10.6         4.05     0.108         0.247   0.202  Poecilostomatoid
##  7 1.23  1.20      15.7  3.92  1.37  1.11  0.217 0.012 0.004 0.784   0.214 0.78  1.24   0.810      49.7        16.5      0.00548       0.0608  0.260  Calanoid        
##  8 0.620 0.302      3.98 1.19  1.04  0.370 0.316 0.012 0.004 0.756   0.246 0.752 0.704  0.356      11.1         4.19     0.120         0.239   0.0952 Poecilostomatoid
##  9 1.19  1.12      15.3  3.85  1.34  1.06  0.176 0.012 0.004 0.728   0.172 0.724 1.20   0.794      50.5        16.7      0.00666       0.0599  0.198  Calanoid        
## 10 1.04  0.856      7.60 1.89  1.66  0.656 0.404 0.044 0.004 0.88    0.264 0.876 1.16   0.396      14.8         5.37     0.0987        0.186   0.346  Calanoid        
## # ℹ 1,252 more rows
# Sous-ensemble des 6 premiers individus de zoo dans zoo6
zoo %>.%
  sselect(., -class) %>.% # Élimination de la colonne class
  head(., n = 6) ->
  zoo6 # Récupération des 6 premiers individus
# Calcul de la matrice de distance euclidienne
zoo6_dist <- dissimilarity(zoo6, method = "euclidean")
zoo6_dist
## Dissimilarity matrix with metric: euclidean
##   labels      1      2      3      4      5
## 1      1                                   
## 2      2  8.219                            
## 3      3  2.565  5.732                     
## 4      4  0.858  7.881  2.222              
## 5      5  4.848  4.295  3.012  4.615       
## 6      6  2.427 10.620  4.923  2.848  7.177

Regroupement avec CAH

# Sous-enseble de zoo (individus 13 à 18)
zoo %>.%
  select(., -class) %>.%   # Élimination de la colonne class
  slice(., 13:18) ->       # Récupération des lignes 13 à 18
  zoo6

# Matrice de dissimilarité sur données standardisées
zoo6 %>.%
  dissimilarity(., method = "euclidean", scale = TRUE) ->
  zoo6std_dist

# Dendrogramme
zoo6std_dist %>.%
  cluster(.) ->
  zoo6std_clust # Calcul du dendrogramme
  chart(zoo6std_clust) +
    ylab("Hauteur")

# Classes des individus 13 à 18
zoo$class[13:18]
## [1] Egg_round        Poecilostomatoid Poecilostomatoid Decapod          Calanoid         Appendicularian 
## 17 Levels: Annelid Appendicularian Calanoid Chaetognath Cirriped Cladoceran Cnidarian Cyclopoid Decapod Egg_elongated Egg_round Fish Gastropod ... Protist
# Coupure du dendrogramme à 8 (2 groupes)
chart(zoo6std_clust) +
  geom_dendroline(h = 8, color = "red")

# Coupure du dendrogramme à 5,8 (3 groupes)
chart(zoo6std_clust) +
  geom_dendroline(h = 5.8, color = "red")

# Détail sur les noeuds du dendrogramme
str(zoo6std_clust)
## --[dendrogram w/ 2 branches and 6 members at h = 9.45]
##   |--[dendrogram w/ 2 branches and 2 members at h = 5.63]
##   |  |--leaf 1 
##   |  `--leaf 6 
##   `--[dendrogram w/ 2 branches and 4 members at h = 6.16]
##      |--leaf 4 
##      `--[dendrogram w/ 2 branches and 3 members at h = 4.17]
##         |--leaf 3 
##         `--[dendrogram w/ 2 branches and 2 members at h = 2.38]
##            |--leaf 2 
##            `--leaf 5
# Deux groupes
chart(zoo6std_clust) +
  geom_dendroline(h = 7.5, color = "red")

# Extraction des deux groupes
(group2 <- predict(zoo6std_clust, h = 7.5))
## [1] 1 2 2 2 2 1
# Quatre groupes
chart(zoo6std_clust) +
  geom_dendroline(h = 5, color = "red")

# Extraction des quatre groupes
(group4 <- predict(zoo6std_clust, h = 5))
## [1] 1 2 2 3 2 4
# Ajout du regroupement dans zoo6
zoo6g <- augment(data = zoo6, zoo6std_clust, h = 7.5)
names(zoo6g) # Nom des variables dans ce tableau
##  [1] "ecd"          "area"         "perimeter"    "feret"        "major"        "minor"        "mean"         "mode"         "min"          "max"          "std_dev"     
## [12] "range"        "size"         "aspect"       "elongation"   "compactness"  "transparency" "circularity"  "density"      ".fitted"
# Nous transformons ces groupes en variable facteur
zoo6g$group <- factor(zoo6g$.fitted)
# Graphique des deux variables en utilisant la couleur en fonction des groupes CAH
chart(data = zoo6g, area ~ circularity %col=% group) +
  geom_point()

# Dendrogramme avec liens simples
zoo6std_dist %>.%
  cluster(., method = "single") %>.%
  chart(.)

# Dendrogramme avec liens moyens
zoo6std_dist %>.%
  cluster(., method = "average") %>.%
  chart(.)

# Dendrogramme avec liens Ward D2
zoo6std_dist %>.%
  cluster(., method = "ward.D2") %>.%
  chart(.)

# Dendrogramme avec liens centroïdes
zoo6std_dist %>.%
  cluster(., method = "centroid") %>.%
  chart(.)

# Dendrogramme sur le jeu de données complet zoo
zoo %>.%
  sselect(., -class) %>.% # Élimination de la colonne class
  # Matrice de dissimilarité sur données standardisées
  dissimilarity(., method = "euclidean", scale = TRUE) %>.%
  # CAH Ward D2
  cluster(., method = "ward.D2") -> # CAH avec Ward D2
  zoo_clust

# Dendrogramme horizontal et sans labels (plus lisible si beaucoup d'items)
chart$horizontal(zoo_clust, labels = FALSE) +
  geom_dendroline(h = 70, color = "red") + # Séparation en 3 groupes
  ylab("Hauteur")

# Ajout des groupes dans zoo
augment(data = zoo, zoo_clust, h = 70) %>.%
  smutate(., group = as.factor(.fitted)) ->
  zoog

# Nuage de points avec mise en évidence des groupes par la couleur
chart(data = zoog, compactness ~ ecd %col=% group) +
  geom_point() +
  coord_trans(x = "log10", y = "log10") # Axes en log10

# Tableau de contingence entre classes et groupes CAH
table(classe = zoog$class, cah = zoog$group)
##                   cah
## classe               1   2   3
##   Annelid           31  13   6
##   Appendicularian    0  36   0
##   Calanoid           9 237  42
##   Chaetognath        0  17  34
##   Cirriped           1  21   0
##   Cladoceran        47   3   0
##   Cnidarian          3   5  14
##   Cyclopoid          0  50   0
##   Decapod          121   5   0
##   Egg_elongated      2  48   0
##   Egg_round         44   0   5
##   Fish               4  46   0
##   Gastropod         48   2   0
##   Harpacticoid       0  39   0
##   Malacostracan     27  66  28
##   Poecilostomatoid  20 136   2
##   Protist            0  50   0

K-moyennes

# Dialect SciViews::R avec l'extension d'exploration de données multivariées
SciViews::R("explore")

# Jeu de données zooplankton
zoo <- read("zooplankton", package = "data.io")
zoo
## # A data.trame: [1,262 × 20]
##      ecd  area perimeter feret major minor  mean  mode   min   max std_dev range  size aspect elongation compactness transparency circularity density class           
##    <dbl> <dbl>     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl> <dbl> <dbl>  <dbl>      <dbl>       <dbl>        <dbl>       <dbl>   <dbl> <fct>           
##  1 0.770 0.465      4.45 1.32  1.16  0.509 0.363 0.036 0.004 0.908   0.231 0.904 0.837  0.437       8.50        3.38     0.0798        0.296   0.169  Poecilostomatoid
##  2 0.700 0.385      2.32 0.728 0.713 0.688 0.361 0.492 0.024 0.676   0.183 0.652 0.700  0.965       1           1.12     0.000123      0.896   0.139  Egg_round       
##  3 0.815 0.521      4.15 1.33  1.11  0.598 0.308 0.032 0.008 0.696   0.204 0.688 0.854  0.538       6.10        2.63     0.0461        0.380   0.161  Calanoid        
##  4 0.785 0.484      4.44 1.78  1.56  0.394 0.332 0.036 0.004 0.728   0.218 0.724 0.979  0.252       8.07        3.24     0.198         0.308   0.161  Poecilostomatoid
##  5 0.361 0.103      1.71 0.739 0.694 0.188 0.153 0.016 0.008 0.452   0.110 0.444 0.441  0.271       4.89        2.26     0.181         0.443   0.0157 Harpacticoid    
##  6 0.832 0.544      5.27 1.66  1.36  0.511 0.371 0.02  0.004 0.844   0.268 0.84  0.934  0.377      10.6         4.05     0.108         0.247   0.202  Poecilostomatoid
##  7 1.23  1.20      15.7  3.92  1.37  1.11  0.217 0.012 0.004 0.784   0.214 0.78  1.24   0.810      49.7        16.5      0.00548       0.0608  0.260  Calanoid        
##  8 0.620 0.302      3.98 1.19  1.04  0.370 0.316 0.012 0.004 0.756   0.246 0.752 0.704  0.356      11.1         4.19     0.120         0.239   0.0952 Poecilostomatoid
##  9 1.19  1.12      15.3  3.85  1.34  1.06  0.176 0.012 0.004 0.728   0.172 0.724 1.20   0.794      50.5        16.7      0.00666       0.0599  0.198  Calanoid        
## 10 1.04  0.856      7.60 1.89  1.66  0.656 0.404 0.044 0.004 0.88    0.264 0.876 1.16   0.396      14.8         5.37     0.0987        0.186   0.346  Calanoid        
## # ℹ 1,252 more rows
# Initialisation du générateur de nombres psuedo-aléatoires
set.seed(38)

# Individus 13 à 18 uniquement
zoo %>.%
  select(., -class) %>.% # Élimination de la colonne class
  slice(., 13:18) ->   # Récupération des lignes 13 à 18
  zoo6

# K-moyennes, ne pas oublier de standardiser avec scale()
zoo6_kmn <- k_means(scale(zoo6), k = 2)
zoo6_kmn
## K-means clustering with 2 clusters of sizes 3, 3
## 
## Cluster means:
##          ecd       area  perimeter      feret      major      minor       mean       mode        min        max    std_dev      range       size      aspect elongation
## 1  0.8513216  0.8392524  0.8799568  0.7696708  0.6691858  0.7425983  0.5437486  0.3144358 -0.5201565  0.6542561  0.7043179  0.6597191  0.8271838  0.06931258  0.7375994
## 2 -0.8513216 -0.8392524 -0.8799568 -0.7696708 -0.6691858 -0.7425983 -0.5437486 -0.3144358  0.5201565 -0.6542561 -0.7043179 -0.6597191 -0.8271838 -0.06931258 -0.7375994
##   compactness transparency circularity    density
## 1   0.7373144   -0.4355018  -0.5926864  0.7253086
## 2  -0.7373144    0.4355018   0.5926864 -0.7253086
## 
## Clustering vector:
## [1] 2 1 2 1 1 2
## 
## Within cluster sum of squares by cluster:
## [1] 14.32167 28.69886
##  (between_SS / total_SS =  54.7 %)
## 
## Available components:
## 
##  [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"       "data"
# Taille des groupes K-moyennes
zoo6_kmn$size
## [1] 3 3
# Information sur la classification K-moyennes
glance(zoo6_kmn)
## # A tibble: 1 × 4
##   totss tot.withinss betweenss  iter
##   <dbl>        <dbl>     <dbl> <int>
## 1    95         43.0      52.0     1
# Profil de la somme des carrés intragroupes en fonction de k
profile_k(scale(zoo6)) # ou zoo6_kmn$data

# Récupération des groupes K-moyennes dans le jeu de données
augment(zoo6_kmn, zoo6) %>.%
  srename(., cluster = .cluster) ->
  zoo6b
names(zoo6b)
##  [1] "ecd"          "area"         "perimeter"    "feret"        "major"        "minor"        "mean"         "mode"         "min"          "max"          "std_dev"     
## [12] "range"        "size"         "aspect"       "elongation"   "compactness"  "transparency" "circularity"  "density"      "cluster"
# Contenu de la variable cluster
zoo6b$cluster
## [1] 2 1 2 1 1 2
## Levels: 1 2
# Variable factor
class(zoo6b$cluster)
## [1] "factor"
# Centres des groupes K-moyennes
zoo6_centers <- tidy(zoo6_kmn, col.names = names(zoo6))
zoo6_centers
## # A tibble: 2 × 21
##      ecd   area perimeter  feret  major  minor   mean   mode    min    max std_dev  range  size  aspect elongation compactness transparency circularity density withinss
##    <dbl>  <dbl>     <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>  <dbl> <int>   <dbl>      <dbl>       <dbl>        <dbl>       <dbl>   <dbl>    <dbl>
## 1  0.851  0.839     0.880  0.770  0.669  0.743  0.544  0.314 -0.520  0.654   0.704  0.660     3  0.0693      0.738       0.737       -0.436      -0.593   0.725     14.3
## 2 -0.851 -0.839    -0.880 -0.770 -0.669 -0.743 -0.544 -0.314  0.520 -0.654  -0.704 -0.660     3 -0.0693     -0.738      -0.737        0.436       0.593  -0.725     28.7
## # ℹ 1 more variable: cluster <fct>
# Graphique des K-moyennes
kmn_chart <- chart(zoo6_kmn, choices = c("circularity", "area"),
  alpha = 0.8, c.size = 5, c.shape = 17)
kmn_chart

# Meilleurs labels des axes
kmn_chart +
  labs(x = "Circularité standardisée", y = "Aire standardisée")

# Données standardisées + classe pour les individus de 13 à 18 de zoo
zoo6std <- scale(zoo6)
zoo6std$class <- zoo$class[13:18] 
# Graphique annoté des classes
kmn_chart +
  labs(x = "Circularité standardisée", y = "Aire standardisée") +
  ggrepel::geom_text_repel(data = zoo6std, aes(label = class))

# Initialisation du générateur pseudo-aléatoire
set.seed(9768)

# K-moyennes
k_means(zoo6, k = 2, nstart = 50) # 50 positions de départ différentes
## K-means clustering with 2 clusters of sizes 3, 3
## 
## Cluster means:
##         ecd      area perimeter    feret    major     minor      mean      mode        min       max   std_dev     range      size    aspect elongation compactness
## 1 0.6292647 0.3188667  3.224133 1.159200 1.096433 0.4023333 0.1871667 0.1026667 0.01066667 0.5400000 0.1166667 0.5293333 0.7493833 0.4753843   6.333315    2.727708
## 2 1.1926500 1.1279667 10.346667 2.201133 1.677067 0.8596333 0.3217333 0.3533333 0.00400000 0.8986667 0.2620000 0.8946667 1.2683500 0.5149422  23.046713    7.987806
##   transparency circularity    density
## 1   0.14732060   0.4900333 0.06943333
## 2   0.06173831   0.1357000 0.37630000
## 
## Clustering vector:
## [1] 1 2 1 2 2 1
## 
## Within cluster sum of squares by cluster:
## [1]  54.18647 200.03837
##  (between_SS / total_SS =  68.1 %)
## 
## Available components:
## 
##  [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"       "data"
# Profil K sur le jeu entier zoo
zoo %>.%
  sselect(., -class) %>.%
  scale(.) %>.%
  profile_k(., k.max = 15)

# Initialisation pseudo-aléatoire
set.seed(562)
# K-moyennes sur jeu complet standardisé
sselect(zoo, -class) %>.%
  scale(.) %>.%
  k_means(., k = 3, nstart = 50) ->
  zoo_kmn
zoo_kmn
## K-means clustering with 3 clusters of sizes 511, 661, 90
## 
## Cluster means:
##          ecd       area   perimeter       feret      major       minor       mean       mode        min        max    std_dev      range       size      aspect
## 1 -0.2517071 -0.1819975 -0.41913500 -0.42842705 -0.2767871 -0.15229969  0.7646541  0.3099542  0.5011815  0.8338167  0.8004033  0.8284225 -0.2808581  0.10273406
## 2 -0.1702276 -0.1483124 -0.01053525 -0.05604782 -0.1944370 -0.08840095 -0.5364261 -0.2654678 -0.3404820 -0.6855013 -0.5263938 -0.6824966 -0.1926062  0.07589772
## 3  2.6793643  2.1226136  2.45713094  2.84415368  2.9995675  1.51397969 -0.4017846  0.1898626 -0.3449459  0.3004002 -0.6784421  0.3089594  3.0092357 -1.14072772
##   elongation compactness transparency circularity     density
## 1 -0.5798725  -0.5782663  -0.23720081   0.5630402 -0.03959989
## 2  0.2925602   0.2911364  -0.07155467  -0.3378906 -0.23950775
## 3  1.1436952   1.1450326   1.87230280  -0.7151979  1.98389075
## 
## Clustering vector:
##    [1] 1 1 1 1 2 1 2 1 2 1 3 2 1 1 1 1 2 2 2 2 1 2 1 1 2 1 1 2 1 1 1 2 1 1 2 1 2 2 2 1 2 1 2 2 1 1 2 1 1 1 1 2 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1
##   [83] 1 1 1 2 2 1 2 1 1 2 1 3 1 1 1 2 1 2 1 1 1 1 2 1 2 2 2 2 1 1 1 1 1 2 2 1 1 1 2 2 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 3 3 3 2 2 1 1 1 1 2 1 3 2 2 1 2 2 1 2 2
##  [165] 1 1 1 2 1 1 2 2 1 1 1 1 2 2 2 2 1 1 2 1 2 1 1 2 1 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 2 1 2 2 2 1 2 2 1 1 2 1 2 2 2 2
##  [247] 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 2 1 1 2 2 3 3 3 1 1 3 1 2 2 1 2 1 1 3 1 1 3 1 1 3 2 3 2 2 1 1 1 1 1 2 3 1 2 1 2 2 1 2 2 1 3 1 2 2 2 1 3 3 3 1 3 2 2 2 2 1 2 2 1 2
##  [329] 2 2 2 1 1 2 2 2 1 2 1 2 2 1 1 2 1 1 2 2 2 1 2 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 1 1 2 1 1
##  [411] 1 2 2 1 1 1 1 1 1 2 2 2 2 2 1 2 2 1 1 1 2 2 3 1 1 2 1 2 1 1 2 3 2 2 2 2 2 1 2 1 2 1 3 2 1 2 2 2 2 1 1 1 2 1 2 1 1 2 1 1 1 2 2 2 2 2 2 1 2 1 1 1 1 2 2 1 1 2 1 2 2 2
##  [493] 2 2 1 2 2 2 2 2 1 2 2 1 2 2 1 1 3 3 2 3 2 3 1 2 2 1 3 1 2 3 3 1 1 2 2 1 2 2 3 2 2 2 1 1 2 1 2 1 2 1 2 2 2 1 3 2 1 1 3 1 2 2 1 3 2 3 1 2 1 2 2 2 3 2 2 1 2 1 2 2 2 2
##  [575] 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 3 1 3 2 2 1 2 3 3 1 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 1 1 1 1 2 1 1 1 1 2 2 3 2 2 1 2 2 2 3 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2
##  [657] 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 2 2 2 1 2 2 3 3 2 1 1 1 2 1 2 2 1 1 2 2 1 1 2 2 2 2 2 2 1 3 1 2 3 2 1 2 1 2 2 3 2 2 1 1 3 2 1 2 2 2 2 3 1 1 2 3 1 2 2 1 3 2 2 3 1 3
##  [739] 2 2 2 2 2 2 2 2 3 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 2 2 2 1 2 2 1 2 1 2 2 2 3 1 2 2 2 2 2 2 3 2 2 2 2 1 3 2 2 1 2 1 1 2 2 2 2 2 1 1 2 1 2 1 2 1 3 2 2 2 2 1 2
##  [821] 2 1 1 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2 1 1 1 1 2 2 2 1 1 3 3 2 1 1 2 1 1 1 2 3 2 2 1 2 2 2 2 1 2 2 1 2 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 1 2 2 1 1 2 2 2
##  [903] 2 2 2 1 2 2 1 2 2 2 2 1 1 2 2 2 1 2 3 1 1 2 3 1 1 2 2 1 2 2 2 2 3 2 2 1 3 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 2 1 2 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 3 1 1 2 2 2 1 2 2 1 1
##  [985] 1 2 2 1 2 2 2 2 1 2 2 2 2 2 2 2
##  [ reached getOption("max.print") -- omitted 262 entries ]
## 
## Within cluster sum of squares by cluster:
## [1] 4967.123 5371.726 4498.727
##  (between_SS / total_SS =  38.1 %)
## 
## Available components:
## 
##  [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"         "ifault"       "data"
# Récupération des groupes K-moyennes dans le jeu de données zoo
augment(zoo_kmn, zoo) %>.%
  srename(., cluster = .cluster) ->
  zoob

# Graphique K-moyennes ECD vs Compacité
chart(zoo_kmn, choices = c("ecd", "compactness"), alpha = 0.2) +
  labs(x = "ECD standardisée", y = "Compacité standardisée") +
  stat_ellipse()

# Table de con,tingence entre classes et groupes K-moyennes
table(zoob$class, zoob$cluster)
##                   
##                      1   2   3
##   Annelid           39   8   3
##   Appendicularian    1  34   1
##   Calanoid          30 257   1
##   Chaetognath        0   6  45
##   Cirriped           3  19   0
##   Cladoceran        50   0   0
##   Cnidarian          1   9  12
##   Cyclopoid          0  50   0
##   Decapod          126   0   0
##   Egg_elongated      9  41   0
##   Egg_round         37   9   3
##   Fish              43   7   0
##   Gastropod         50   0   0
##   Harpacticoid       0  39   0
##   Malacostracan     49  47  25
##   Poecilostomatoid  73  85   0
##   Protist            0  50   0

Indices de diversité

# Dialecte SciViews::R avec module d'exploration multivariée
SciViews::R("explore")

# Jeu de données BCI
bci <- read("BCI", package = "vegan")

# Sous-échantillon de 5 parcelles
set.seed(2003)
bci_sub <- sample_n(bci, 5) 

# Exploration partielle des données (15 premières espèces)
skimr::skim(bci_sub[, 1:15])
Data summary
Name bci_sub[, 1:15]
Number of rows 5
Number of columns 15
_______________________
Column type frequency:
numeric 15
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Abarema.macradenia 0 1 0.0 0.00 0 0 0 0 0 ▁▁▇▁▁
Vachellia.melanoceras 0 1 0.4 0.89 0 0 0 0 2 ▇▁▁▁▂
Acalypha.diversifolia 0 1 0.0 0.00 0 0 0 0 0 ▁▁▇▁▁
Acalypha.macrostachya 0 1 0.2 0.45 0 0 0 0 1 ▇▁▁▁▂
Adelia.triloba 0 1 0.2 0.45 0 0 0 0 1 ▇▁▁▁▂
Aegiphila.panamensis 0 1 0.4 0.55 0 0 0 1 1 ▇▁▁▁▅
Alchornea.costaricensis 0 1 2.2 0.45 2 2 2 2 3 ▇▁▁▁▂
Alchornea.latifolia 0 1 0.2 0.45 0 0 0 0 1 ▇▁▁▁▂
Alibertia.edulis 0 1 0.0 0.00 0 0 0 0 0 ▁▁▇▁▁
Allophylus.psilospermus 0 1 0.4 0.55 0 0 0 1 1 ▇▁▁▁▅
Alseis.blackiana 0 1 15.8 5.40 12 12 14 16 25 ▇▂▁▁▂
Amaioua.corymbosa 0 1 0.0 0.00 0 0 0 0 0 ▁▁▇▁▁
Anacardium.excelsum 0 1 1.4 1.34 0 0 2 2 3 ▇▁▁▇▃
Andira.inermis 0 1 0.6 0.55 0 0 1 1 1 ▅▁▁▁▇
Annona.spraguei 0 1 0.6 0.89 0 0 0 1 2 ▇▁▂▁▂
# Calcul de la Richesse spécifique pour chacune des parcelles
vegan::specnumber(bci_sub)
## [1] 85 91 99 85 93
# Indice de Shannon
bci_sub_h <- vegan::diversity(bci_sub)
bci_sub_h
## [1] 3.693896 3.913725 3.969925 3.776575 4.018412
# Richesse spécifique S
bci_sub_s <- vegan::specnumber(bci_sub)
bci_sub_s
## [1] 85 91 99 85 93
# Indice d'équitabilité de Piélou J 
bci_sub_j <- bci_sub_h / ln(bci_sub_s)
bci_sub_j  
## [1] 0.8314621 0.8676229 0.8639438 0.8500724 0.8865579
# Indice de diversité de Simpson
bci_sub_e <- vegan::diversity(bci_sub, index = "simpson")
bci_sub_e
## [1] 0.9499296 0.9676412 0.9686058 0.9627557 0.9746293
# Indice de diversité de Jaccard
dissimilarity(bci_sub, method = "jaccard", binary = TRUE)
## Dissimilarity matrix with metric: jaccard
##   labels     1     2     3     4
## 1      1                        
## 2      2 0.483                  
## 3      3 0.492 0.480            
## 4      4 0.455 0.533 0.528      
## 5      5 0.517 0.551 0.545 0.425
if (exists("assignment2"))
  assignment2("B06Ga_open_data", part = "I",
    url = "https://github.com/BioDataScience-Course/B06Ga_open_data",
    course.ids = c(
      'S-BIOG-061' = !"B06Ga_{YY}M_open_data"),
    course.urls = c(
      'S-BIOG-061' = !"{assign_url$B06Ga_open_data}"),
    course.starts = c(
      'S-BIOG-061' = !"{class2_start(mod, 'B06')}"),
    course.ends = c(
      'S-BIOG-061' = !"{n4_end(mod, 'B10')}"),
    term = "Q2", level = 4, n = 4,
    toc = "Étude de données ouvertes choisies librement (I)")