Analyses factorielles

Avant-propos

Ce cours requiert d’avoir déjà été initié à R (https://r-tools.huma-num.fr/s/43bd15bd5bab7ea43ea61/rmd_output/3/initiationR.html).

La table est disponible sur le dépôt gitlab : https://gitlab.huma-num.fr/tfeuillet/cours/

Préalablement à l’exercice, chargez les packages, puis ouvrez et préparez la table ainsi :

# Chargez les packages
library(readxl)
library(psych)
library(gtools)
library(FactoMineR)
library(factoextra)

# Importez la table (disponible ici : https://gitlab.huma-num.fr/tfeuillet/cours/data)
df <- read_excel("data/table_climato.xlsx")

# Définir les variables continues en type "numeric"
df$temp <- as.numeric(df$temp)
df$ampl <- as.numeric(df$ampl)
df$jrs_neige <- as.numeric(df$jrs_neige)
df$Y <- as.numeric(df$Y)

# Discrétisez la variable "ampl" en terciles et renommez les niveaux
df$amplDisc <- quantcut(df$ampl, 3) 
levels(df$amplDisc) <- c("faible","moyenne","forte") 

# Discrétise la variable "jrs_neige" en quartiles et renommez les niveaux
df$neigeDisc <- quantcut(df$jrs_neige, 4) 
levels(df$neigeDisc) <- c("faible","moyenne","forte","très forte") 

 

Le package de référence pour les analyses factorielles est FactoMineR, et son extension factoextra pour la visualisation des résultats.
Note : Les codes ci-dessous proviennent de ce site : http://www.sthda.com/french/

1 ACP

Pour réaliser une ACP, il convient d’extraire dans un nouveau data frame toutes les variables quantiatives qu’on veut analyser :

dfACP <- df[,2:7]

 

Puis on lance l’ACP proprement dite :

library(FactoMineR)
pca <- PCA(dfACP, graph=FALSE)
Warning in PCA(dfACP, graph = FALSE): Missing values are imputed by the mean of
the variable: you should use the imputePCA function of the missMDA package

 

2 Visualisation des résultats

Il convient ensuite d’explorer les résultats, d’abord le poids de chaque composante principale en termes de variance expliquée (scree plot) :

library(factoextra)
fviz_eig(pca, addlabels = TRUE, ylim = c(0, 50))
Warning in geom_bar(stat = "identity", fill = barfill, color = barcolor, :
Ignoring empty aesthetic: `width`.

 

Puis à l’aide du cercle des corrélations :

fviz_pca_var(pca, col.var="contrib",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE)
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
ℹ The deprecated feature was likely used in the ggpubr package.
  Please report the issue at <https://github.com/kassambara/ggpubr/issues>.
Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
ℹ Please use tidy evaluation idioms with `aes()`.
ℹ See also `vignette("ggplot2-in-packages")` for more information.
ℹ The deprecated feature was likely used in the factoextra package.
  Please report the issue at <https://github.com/kassambara/factoextra/issues>.

 

Et du graphique des individus :

fviz_pca_ind(pca, col.ind = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE)

Enfin, la contribution de chaque variable aux deux premiers axes :

fviz_contrib(pca, choice = "var", axes = 1)

fviz_contrib(pca, choice = "var", axes = 2)

et de chaque individu :

fviz_contrib(pca, choice = "ind", axes = 1)

fviz_contrib(pca, choice = "ind", axes = 2)

Vous pourrez consulter le site web [http://www.sthda.com/french/] pour développer des extensions (analyses factorielles sur données qualitatives, classification, etc.)