ACP dans R avec Ade4: Scripts Faciles
Cet article fournit le code R pour calculer facilement l’analyse en composantes principales (ACP) en utilisant la fonction dudi.pca() du package R ade4. Nous utiliserons le package factoextra pour visualiser les résultats de l’ACP. Nous décrirons également comment prédire les coordonnées de nouvelles données individus / variables en utilisant les fonctions ade4.
Apprendre plus sur l’ACP: ACP - Analyse en Composantes Principales avec R: L’Essentiel.
Contents:
Livre (en anglais):

Practical Guide to Principal Component Methods in R
Installer et charger les packages
Installer:
install.packages("magrittr") # pour le pipe %>%
install.packages("ade4") # Calcul de l'ACP
install.packages("factoextra")# Visualisation de l'ACP
Charger:
library(ade4)
library(factoextra)
library(magrittr)
Données
- Données démo:
decathlon2
[factoextra]. - Contenu des données:
- Individus actifs (lignes 1 à 23) et variables actives (colonnes 1 à 10). Utilisé pour l’ACP.
- Individus supplémentaires (lignes 24 à 27) et variables supplémentaires (colonnes 11 à 13). Coordonnées prédites à l’aide de l’information de l’ACP et des paramètres obtenus avec les individus / variables actifs.
Extraction des individus et variables actifs:
library("factoextra")
data(decathlon2)
decathlon2.active <- decathlon2[1:23, 1:10]
head(decathlon2.active[, 1:6])
## X100m Long.jump Shot.put High.jump X400m X110m.hurdle
## SEBRLE 11.0 7.58 14.8 2.07 49.8 14.7
## CLAY 10.8 7.40 14.3 1.86 49.4 14.1
## BERNARD 11.0 7.23 14.2 1.92 48.9 15.0
## YURKOV 11.3 7.09 15.2 2.10 50.4 15.3
## ZSIVOCZKY 11.1 7.30 13.5 2.01 48.6 14.2
## McMULLEN 10.8 7.31 13.8 2.13 49.9 14.4
Calculer l’ACP avec dudi.pca()
library(ade4)
res.pca <- dudi.pca(decathlon2.active,
scannf = FALSE, # Cacher le scree plot
nf = 5 # Nombre d'axes gardés
)
Visualisation des résultats de l’ACP
Visualisation avec factoextra
Le package factoextra crée des graphiques de type ggplot2
- Visualiser les valeurs propres. Montre le pourcentage de variances expliquées par chaque axe principal.
fviz_eig(res.pca)
- Graphique des individus. Coloration en fonction du cos2 (qualité de représentation). Les individus similaires sont groupés ensemble.
fviz_pca_ind(res.pca,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE
)
- Graphique des variables. Coloration en fonction de la contribution des variables. Les variables corrélées positivement sont du même côté du graphique. Les variables corrélées négativement sont sur des côtés opposés du graphique.
fviz_pca_var(res.pca,
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE
)
- Biplot des individus et des variables
fviz_pca_biplot(res.pca, repel = TRUE,
col.var = "#2E9FDF",
col.ind = "#696969"
)
Visualisation avec ade4
Le package ad4 crée des graphiques de base
# Valeurs propres
screeplot(res.pca, main = "Screeplot - Eigenvalues")
# Cercle de corrélation des variables
s.corcircle(res.pca$co)
# Graphique des individus (lignes)
s.label(res.pca$li,
xax = 1, # Dimension 1
yax = 2) # Dimension 2
# Biplot des individus et des variables
scatter(res.pca,
posieig = "none", # Cacher le scree plot
clab.row = 0 # Caché l'annotation de slignes
)
## NULL
Accéder aux résultats de l’ACP
library(factoextra)
# Valeurs propres
eig.val <- get_eigenvalue(res.pca)
eig.val
# Résultats des variables
res.var <- get_pca_var(res.pca)
res.var$coord # Coordonnées
res.var$contrib # Contributions aux axes
res.var$cos2 # Qualité de représentation
# Résultats des individus
res.ind <- get_pca_ind(res.pca)
res.ind$coord # Coordonnées
res.ind$contrib # Contributions aux axes
res.ind$cos2 # Qualité de représentation
Prediction avec l’ACP
Dans cette section, nous allons montrer comment prédire les coordonnées des individus et des variables supplémentaires en utilisant uniquement les informations fournies par l’ACP précédemment effectuée.
Individus supplémentaires
- Données: lignes 24 à 27 et colonnes 1 à 10 [jeu de données decathlon2]. Les nouvelles données doivent contenir les colonnes (variables) portant les mêmes noms et dans le même ordre que les données actives utilisées pour calculer l’ACP.
# Individus supplémentaires
ind.sup <- decathlon2[24:27, 1:10]
ind.sup[, 1:6]
## X100m Long.jump Shot.put High.jump X400m X110m.hurdle
## KARPOV 11.0 7.30 14.8 2.04 48.4 14.1
## WARNERS 11.1 7.60 14.3 1.98 48.7 14.2
## Nool 10.8 7.53 14.3 1.88 48.8 14.8
## Drews 10.9 7.38 13.1 1.88 48.5 14.0
- Predire les coordonnées des individus.
ind.sup.coord <- suprow(res.pca, ind.sup) %>%
.$lisup
ind.sup.coord[, 1:4]
## Axis1 Axis2 Axis3 Axis4
## KARPOV -0.795 0.7795 1.633 1.724
## WARNERS 0.386 -0.1216 1.739 -0.706
## Nool 0.559 1.9775 0.483 -2.278
## Drews 1.109 0.0174 3.049 -1.534
- Graphique des individus incluant les individus supplémentaires:
# Individus actifs
p <- fviz_pca_ind(res.pca, repel = TRUE)
# Ajouter les individus supplementaires
fviz_add(p, ind.sup.coord, color ="blue")
Variables supplémentaires
Variables catégorielles
Le jeu de données decathlon2
contient une variable qualitative supplémentaire, la colonne 13 correspondant aux types de compétition.
Les variables qualitatives / catégorielles peuvent être utilisées pour colorer les individus par groupes. La variable catégorielle doit être de même longueur que le nombre d’individus actifs (ici 23).
- Graphique factoextra
groups <- as.factor(decathlon2$Competition[1:23])
fviz_pca_ind(res.pca,
col.ind = groups, # colorer par groupes
palette = c("#00AFBB", "#FC4E07"),
addEllipses = TRUE, # Ellipses de concentrations
ellipse.type = "confidence",
legend.title = "Groups",
repel = TRUE
)
- Graphiques ade4
groups <- as.factor(decathlon2$Competition[1:23])
s.class(res.pca$li,
fac = groups, # colorer par groupes
col = c("#00AFBB", "#FC4E07")
)
# Biplot
res <- scatter(res.pca, clab.row = 0, posieig = "none")
s.class(res.pca$li,
fac = groups,
col = c("#00AFBB", "#FC4E07"),
add.plot = TRUE, # Add onto the scatter plot
cstar = 0, # Remove stars
cellipse = 0 # Remove ellipses
)
Variables quantitatives
Données: colonnes 11:12. Doit être de la même longueur que le nombre d’individus actifs (ici 23).
quanti.sup <- decathlon2[1:23, 11:12, drop = FALSE]
head(quanti.sup)
## Rank Points
## SEBRLE 1 8217
## CLAY 2 8122
## BERNARD 4 8067
## YURKOV 5 8036
## ZSIVOCZKY 7 8004
## McMULLEN 8 7995
Les coordonnées d’une variable quantitative donnée sont calculées comme étant la corrélation entre les variables quantitatives et les composantes principales.
# Predire les coordonées et calculer le cos2
quanti.coord <- supcol(res.pca, scale(quanti.sup)) %>%
.$cosup
quanti.cos2 <- quanti.coord^2
# Graphique des variables incluants les variables supplementaires
p <- fviz_pca_var(res.pca)
fviz_add(p, quanti.coord, color ="blue", geom="arrow")