---
title: Résumé minimal du script ZEA_ACM_v1.R pour une CAH après ACM sur les
  zones d'égales apparence (ZEA) vectorisées sur une photointerprétation de données Landsat TM.
author: "Vincent GODARD"
date: "26/03/2021 - V2"
output: 
  html_document: 
    toc: yes
    keep_md: yes
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(message = TRUE)
```

Classification ascendante hiérarchique (CAH) après une Analyse des correspondances multiples (ACM) avec R et FactoMineR sur une vectorisation de la photointerprétation d'une composition colorée en RVB TM543 de la région des Howe Hills à l'ouest de Worcester, Massachusetts  (Sources : https://clarklabs.org/download/terrset-tutorial-data/ paquet Images Processing)


Pour aller plus loin :

- http://factominer.free.fr/factomethods/classification-hierarchique-sur-composantes-principales.html

- http://factominer.free.fr/factomethods/analyse-des-correspondances-multiples.html

- http://www.sthda.com/french/articles/38-methodes-des-composantes-principales-dans-r-guide-pratique/75-acm-analyse-des-correspondances-multiples-avec-r-l-essentiel/#mca-data-format


## Résumé des principales étapes du code R

- Import des données ;
- Module MCA ;
- Module CAH
- Dendrogramme ;
- Cartes factorielles ;
- Cas des variables catégorielles.


## 1. Import des données

Avec mes fichiers exemples, préférez les paramètres nord-américains ("." séparateur de décimales, "," séparateur de miliers).

Salle C210, identifiant => "geographie2" !

```{r}
### setwd("D:/Users/geographie2/votre nom/TD/teled/TD42/R")
### respecter ce cheminement si "geographie2"
### getwd()
### setwd("D:\\3VG\\UP8\\enseignement\\teled\\TD42\\R")
# Remove all objects
rm(list = ls() )
```

## 2. Lecture des données

### 2.1 Toutes les données

```{r}

zea06 <- read.csv("zea06.csv",
                     sep = ";",
                      ) # si stringsAsFactors = FALSE on perd les modalités si qualitative


head(zea06[, 1:4], 5) # pour voir les 5 premières lignes et 4 variables du tableau

```

### 2.2 Sélection des variables actives

```{r}

zea06.active <- zea06[1:29, 2:4] # on élimine l'identifiant pour le moment

head(zea06.active[, 1:3], 5)


```

### 2.3 Résumé des données actives

```{r}

summary(zea06.active)[, 1:3]


```


## 3. Déterminer le nombre de classes de la partition


Ce fait sur le tableau des variables actives à la suite d'une ACP, AFC, ACM...


### 3.1 Le module ACM sur des données nominales

*Nota bene* : pour un descritif plus complet de l'ACM sur l'analyse des données qualitatives, voir le script "en travaux" au chapitre [http://margaux.ipt.univ-paris8.fr/vgodard/enseigne/dea/memodea/mem03mas.htm].

Installer et exécuter préalablement les librairies "FactoMineR", "factoextra", puis les charger

*-* Si le nom des polygones est en première colonne :

+ le tableau "utile" va de la deuxième colonne à la 4ème [,2:4] ;

+ les variables quantitatives (appelées fréquences en ACM) supplémentaires ne sont pas présentes ici ;

+ les variables qualitatives (appelées modalités en ACM) supplémentaires ne sont pas présentes ici.

Ces variables supplémentaires ne sont pas utilisées pour calculer le nombre optimal de classes de la partition.


```{r message = FALSE}
### Avec la librairie FactoMineR et factoextra
## install.packages(c("FactoMineR", "factoextra")) ## si pas déjà installés !

library("FactoMineR")
library("factoextra")

res.mca <- MCA (zea06.active, graph = TRUE) # format simplifié



```


### 3.2 Part de l'information portée par les axes de l'ACM

+ Liste des résultats possibles de l'ACM

```{r}

print(res.mca) # liste des résultats possibles de l'ACM

```

+ La valeur propre de chaque axe

```{r}

eig.val <- get_eigenvalue(res.mca)

head(eig.val)

```

+ Combien d'axes retenir pour l'étude ?

```{r}

fviz_screeplot (res.mca, addlabels = TRUE, ylim = c (0, 45))

```



## 4. Le module Classification Ascendante Hiérarchique (CAH)

La CAH avec tous les éléments actifs (29 lignes et 3 variables)

*-* HCPC est le nom de la CAH dans Factominer 

*-* HCPC fonctionne sur une analyse précédente du type :

+ Variables continues : ACP (tableau de mesure), AFC (tableau de contingence) ;

+ variables catégorielles : ACM (tableau disjonctif complet) ; 

+ Données mixtes : AFM (analyse factorielle multiple sur des données continues et des données catégorielles).



*-* La méthode HCPC de Factominer requiert :

+ x : le fichier résultats de l'étape précédente (ACP, CAH, AFM...) ;

+ ncp : nb de dimensions gardé pour calculer les partitions (si on ne précise pas, par défaut 5) ;

++ Si ncp = -1 => 3 graphiques (dendrogramme en 2D, en 3D, carte factorielle en 2D) avec nb de classes fixes ;

++  Si ncp = 0 ou 1 => 1 graphiques (dendrogramme en 2D) pour déterminer la "hauteur de coupe" ;

++  Si ncp = 2 ou + => 3 graphiques (dendrogramme en 2D, en 3D, carte factorielle en 2D) avec nb de classes fixes = à ncp.;

+ graph : le graphe par défaut (pour ne pas afficher le graphe graph = FALSE).


### 4.1 Choisir le nombre de classes pour la future légende 

```{r message = FALSE}
## library("FactoMineR)

## recherche des sauts d'inertie pour déterminer le nombre de classes

res.mca.hcpc <- HCPC(res.mca, graph = TRUE, nb.clust = -1) ## modifier "nb.clust = 4," si on en veut 4, etc. !

```

### 4.2 Listage des résultats possibles

```{r}
print(res.mca.hcpc)

```

### 4.3 Les sorties de la fonction HCPC


*-* affichage de l'appartenance des individus à chaque cluster avec "data.clust" en dernière colonnne


```{r}
res.mca.hcpc$data.clust

```



### 4.4 Description des classes

*-* description des classes par les variables quantitatives (appelées fréquences en ACM) actives (quelles sont les sur ou sous rerésentations significatives ?)

+ Intern % => % de la fréquence dans la classe ;

+ glob % => % de la fréquence dans l'échantillon ;

++ Calculer ligne à ligne [(Intern % - glob %) / glob %] donne la sur ou la sous représentation de la fréquence dans la classe

+ Intern freq => Somme de la fréquence dans la classe

+ Glob freq => Somme de la fréquence dans l’échantillon

++ Calculer ligne à ligne (Intern freq - Glob freq) donne le % de la classe dans la fréquence


Cla/Mod % de la modalité dans la classe
Mod/Cla % de la classe dans la modalité
Global % de la modalité dans l'échantillon



```{r}

res.mca.hcpc$desc.var ## faire un copier-coller dans un bloc note avant import dans tableur [tableau non compatible avec write.table()])

```



## 5. Aide à l'interprétation

### 5.1 Dendrogramme avec fviz_dend


-  version sobre

```{r}

fviz_dend(res.mca.hcpc,
          palette = "jco",
          main = "Regroupements des classes",
          ylab = "Inertie") 



## Sources : https://rpkgs.datanovia.com/factoextra/reference/fviz_dend.html

```


### 5.2 Visualisation des individus coloriés par groupe avec fviz_cluster() [factoextra].



```{r}

          fviz_cluster(res.mca.hcpc,
             repel = TRUE,            # Evite le chevauchement des textes
             show.clust.cent = TRUE,  # Montre le centre des clusters
             palette = "jco",         # Palette de couleurs, voir ?ggpubr::ggpar
             ggtheme = theme_minimal(),
             main = "1er plan factoriel"
             )
                  
## Sources : http://www.sthda.com/french/articles/38-methodes-des-composantes-principales-dans-r-guide-pratique/78-classification-hierarchique-sur-composantes-principales-l-essentiel/

```


### 5.3 Exporter des résultats

- Exporter des pdf ou des png

-- En premier, exemple de création de graphes

```{r message = FALSE}
# Dendrogramme
fviz_dend <- fviz_dend(res.mca.hcpc,
          palette = "jco",
          main = "Regroupements des classes",
          ylab = "Inertie") 

# Clusters sur le plan factoriel
fviz_cluster <- fviz_cluster(res.mca.hcpc,
             repel = TRUE,            # Evite le chevauchement des textes
             show.clust.cent = TRUE,  # Montre le centre des clusters
             palette = "jco",         # Palette de couleurs, voir ?ggpubr::ggpar
             ggtheme = theme_minimal(),
             main = "1er plan factoriel"
             )


```

-- En second, export des graphes

```{r message = FALSE}

library("ggpubr")

## Export d'un pdf (un graphe par page)
ggexport(plotlist = list(fviz_dend, fviz_cluster), 
         filename = "res.mca.hcpc.pdf")

## Export d'un png par graphe
ggexport(plotlist = list(fviz_dend, fviz_cluster), 
         filename = "res.mca.hcpc.png")


```
- Exporter des résultats en csv

A l'aide de write.table() [package FactoMineR], write.infile semble inaccessible à la date de rédaction !

```{r message = FALSE}

# Export d'un fichier CSV avec les affectations des individus aux classes

write.table(res.mca.hcpc$data.clust, file="res.mca.hcpc$data.clust.csv", col.names=TRUE, sep = ";")



```           


## 7. Le couteau suisse

Le package FactoInvestigate décrit et interprète automatiquement les résultats de votre analyse factorielle (ACP, AFC ou ACM) en choisissant les graphes les plus appropriés pour le rapport (sources :  http://factominer.free.fr/reporting/index_fr.html, mais ce package semble inaccessible à la date de rédaction !)

```{r message = FALSE}
 ## install.packages("FactoInvestigate")

library(FactoInvestigate)

Investigate(res.mca.hcpc)
```




