---
title: "Résumé minimal du script ACP_villeUS_v5.R pour les ACP sur les villeUS v5"
author: "Vincent GODARD"
date: "16/11/2021"
output: 
  html_document: 
    toc: yes
---

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

Analyse en composantes principales (ACP) avec R et FactoMineR sur les données relatives à la qualité de la vie dans 18 grandes métropoles américaines (Sources : M.V. JONES and M.J. FLEX, The quality of life in Washington D.C., The Urban Institute, Washington D.C, 1970. in SANDERS 1989, p. 57)



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

- Calcul de la matrice des corrélations ;
- Module ACP ;
- Valeurs propres et vecteurs propres ;
- Coordonnées ;
- Contributions ;
- Qualités (COS2) ;
- Aide à l’interprétation ;
- Edition des rapports.


## 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/vgodard/ADD/villeUS/R")
### respecter ce cheminement si "geographie2"
getwd()

# Remove all objects
rm(list = ls() )
```

## 2. Lecture des données

```{r}
villeUS <- read.table("ta1fm02d.csv",
                      header=TRUE,
                      sep=";",
                      dec=".",### Pour la C210 remplacer le "." par une ","
                      row.names=1,
                      check.names=FALSE,
                      fileEncoding="latin1",
                      stringsAsFactors = TRUE) # si stringsAsFactors = FALSE on perd les modalités
                      

```

## 3. Matrice des corrélations et significativité

Installer et exécuter préalablement la librairie "Hmisc"

```{r message=FALSE}
### Avec la librairie Hmisc
## install.packages("Hmisc") ## si pas déjà installé !
 library(Hmisc)
```

Script de la matrice des corrélations arrondie à un chiffre après la virgule et matrice des significativités des corrélations (p-value).

```{r}
rcorr(as.matrix(villeUS[,1:10]), type=c("pearson"))

```

Faire un copier-coller dans un tableur pour mettre en évidence les corrélations positives ou négatives les plus élevées.


## 4. Module ACP

Si ce n'est déjà fait, installer le package "FactoMineR", puis le charger

```{r}
## install.packages("FactoMineR")

library("FactoMineR")

```


L'ACP avec tous les éléments actifs (18 lignes et 10 variables)

- PCA centrée réduite par défaut (pour ne pas réduire et utiliser la covariance scale.unit = FALSE)
- PCA avec graphe par défaut (pour ne pas afficher le graphe graph = FALSE)
- ncp = nb de dimensions gardé dans le résultat final

```{r}
res.villeUS.pca <- PCA(villeUS,
                       quanti.sup=NULL,
                       quali.sup=11,
                       ncp = 10,
                       scale.unit = TRUE,
                       graph = TRUE)

```


## 5. Les sorties de la fonction ACP

Si ce n'est déjà fait, installer le package "factoextra", puis le charger

```{r}
## install.packages("factoextra")

library("factoextra")
```

Si on veut connaître tous les résultats de la fonction ACP dans Factominer et/ou factoextra :

```{r}

### Listage des résultats

print(res.villeUS.pca)
```


### 5.1. Les *eigenvalues* ou valeurs propres

La somme des *eigenvalues* égale le nombre d'axes (ici 10).

Une *eigenvalue* > 1 a plus d'information (d'inertie) qu'une variable d'origine.

```{r}
eig.val <- get_eigenvalue(res.villeUS.pca)
eig.val
```


### 5.2. Coordonnées des variables et des individus sur les axes

Interprétation des coordonnées des variables sur les axes factoriels.

```{r}
res.villeUS.pca$var$coord[, 1:4] ### [toutes les lignes ; colonnes 1 à 4, cf résultats *eigenvalue*]
```

S'il y a des variables qualitatives supplémentaires.

```{r}
res.villeUS.pca$quali.sup$coord  ## coord. for the supplementary categories            

```

A évaluer au regard des valeurs test.

```{r}
res.villeUS.pca$quali.sup$v.test ## v-test of the supplementary categories, signif. si > 1.96 (on arrondi à 2 !)
```

Interprétation des coordonnées des individus sur les axes factoriels (avec variante peu utile (: à modifier !)

```{r}
res.villeUS.pca$ind$coord[2:5 , 1:3] ### [ligne 2 à 5 ; colonnes 1 à 3]
```


### 5.3. Contribution des variables et des individus sur les axes

Interprétation des contributions des variables sur les axes factoriels.

```{r}
res.villeUS.pca$var$contrib[, 1:10] ### [toutes les lignes ; colonnes toutes, cf résultats *eigenvalue*] pour rechercher les plus contributives dans un tableur.
```

Interprétation des contributions des individus sur les axes factoriels.

```{r}
res.villeUS.pca$ind$contrib[, 1:10] ### [ligne toutes ; colonnes toutes] pour rechercher les plus contributifs dans un tableur.
```


Pour sauvegarder dans un fichier csv

```{r}
contrib_var <- res.villeUS.pca$var$contrib[, 1:10] ### [toutes les lignes ; colonnes toutes, cf résultats *eigenvalue*] pour rechercher les plus contributives dans un tableur.

contrib_var

write.csv(contrib_var, "contrib_var.csv") ## le collage dans Excel marche aussi avec assistant d'importation !

```




### 5.4. Qualité de la représentation (COS2) des variables et des individus sur les axes

Interprétation des corrélations des variables sur les axes factoriels.

```{r}
res.villeUS.pca$var$cor[, 1:10] ### [toutes les lignes ; colonnes toutes, cf résultats *eigenvalue* si adaptation nécessaire] pour rechercher les plus corrélées aux axes.

```

Interprétation des COS2 des variables sur les axes factoriels.

```{r}
res.villeUS.pca$var$cos2[, 1:10] ### [toutes les lignes ; colonnes toutes, cf résultats *eigenvalue* si adaptation nécessaire] pour rechercher la meilleure représentation des variables sur les axes ou plans factoriels.

```

Interprétation des qualités de représentation des individus sur les axes factoriels.

```{r}
res.villeUS.pca$ind$cos2[, 1:10] ### il n'y a pas de "cor", [ligne toutes ; colonnes toutes] pour rechercher la meilleure représentation des individus sur les axes ou plans factoriels.

```

Pour sauvegarder dans un fichier csv

```{r}
cos2_var <- res.villeUS.pca$var$cos2[, 1:10] ### [toutes les lignes ; colonnes toutes, cf résultats *eigenvalue*] pour rechercher la meilleure représentation des variables sur les axes ou plans factoriels.

cos2_var

write.csv(cos2_var, "cos2_var.csv") ## le collage dans Excel marche aussi avec assistant d'importation !

```



## 6. Aide à l'interprétation

### 6.1. Graphiques un peu plus sophistiqués


- simple Plan factoriel avec les variables et les points

```{r}

          ### Simple Biplot (comme dans SPAD de base)
          ### valable si peu de variables et d'individus !)
          fviz_pca_biplot(res.villeUS.pca,
                          repel = TRUE,# pour éviter l'écrasement
                          col.var = "#2E9FDF", # Variables color
                          col.ind = "#696969")  # Individuals color
```

- habillage plus sophistiqué

```{r}
### pour changer l'habillage des "ggplots", utilisation de la fonction  ggpar() [ggpubr package] 
### ici reprise du précédent garphique
          res.biplot <- fviz_pca_biplot(res.villeUS.pca, 
                          col.ind = villeUS$lieu,
                          palette = "jco", # palette du journal "JCO" (journal of clinical oncology)  
                          addEllipses = TRUE,
                          ellipse.type = "confidence", # affiche les ellipses de confiance
                          ellipse.level=0.95, # Agit sur la taille des ellipses
                          label = "var",# pas d'étiquette pour les individus que pour les "var"
                          col.var = "black",
                          axes = c(1,2), # /!\ faire varier les axes ! Les régions sont-elles toujours discriminates ? /!\
                          repel = TRUE,# pour éviter l'écrasement
                          legend.title = "Régions")
```

          
- mise en forme

```{r}
ggpubr::ggpar(res.biplot,
                        title = "Analyse en composante principale",
                        subtitle = "Villes US",
                        caption = "Source: JONES and FLEX, The quality of life [...] 1970. in SANDERS 1989, p. 57",
                        xlab = "PC1",
                        ylab = "PC2",
                        legend.title = "Régions",
                        legend.position = "top",
                        ggtheme = theme_gray(),# voir dans "http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/112-pca-principal-component-analysis-essentials/#r-packages" les thèmes possibles
                        palette = "jco") # palette du journal "JCO" (journal of clinical oncology)
```

### 6.2. Aide à la description et à l'interprétation

Identification des variables les plus significatives par composante.

```{r}
### fonction dimdesc() [in FactoMineR]

res.desc <- dimdesc(res.villeUS.pca,
                    axes = c(1:4),
                    proba = 0.05)
```

Aide sur l'axe 1

```{r}
### Description of dimension 1
res.desc$Dim.1
```

Aide sur l'axe 2

```{r}
### Description of dimension 2
res.desc$Dim.2
```

etc.

## 6.4 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... (mais semble inaccessible en ce moment ! http://factominer.free.fr/reporting/index_fr.html)

```{r}
## install.packages(FactoInvestigate)

## library(Investigate)

## Investigate(res.villeUS.pca)
```




