Regroument(clusterisation) des variables avec R

L'essentiel de cette page !

Comment classer des variables ? Certaines sont corrélées négativement, d'autres positivement ! Mais lesquelles agissent de concert ? On peut les clustériser facilement pour voir et comprendre comment ces variables interagissent.

Théorie des graphs : clusterisation de variables corrélées avec R

Figure ci-dessus

Regroupement de variables corrélées : les vertex (ronds) correspondent aux variables. Plus une variable est connectée, plus elle apparait en grand. La couleur des traits traduit la nature de la corrélation (positive ou négative). La taille des traits la valeur de la corrélation de 0 à 1. Toutes ces corrélations sont significatives (pval < 0.01). Les regroupements colorés traduisent des familles de variables inter-corrélées.

1- Prenons un exemple

Le jeu de données mtcars décrit des voitures. On peut se demander quels descripteurs de ces voitures sont liés. La première approche serait un corrélogramme.

data(mtcars)

View(mtcars)

library(corrplot)

corrplot(cor(mtcars),

type="lower")

Cette première approche montre ainsi que de nombreuses variables sont liées. Le nombre de cyclindres est corrélé positivement à disp (déplacement) , hp (puissance brute ) et aà wt (poids) tout en étant corrélé négativement à vs (la forme du moteur).

2- Clusteriser les variables en dendrogramme

Mettre en forme le tableau en matrice renversée :

mymat <- as.matrix(mtcars)

mymat <- scale(mymat)

mymat <- t(mymat)

Calculer la distance entre les variables :

#install.packages("amap")


library("amap")

mydi = Dist(mymat,method="abspearson") # Distance sur la valeur absolue des corrélation (peut importe que ce soit neg ou pos)

Dendrogramme :

myclust <- hclust(mydi)

plot(myclust)

Et voilà ! Clairement, on retrouve les liens du corrélogramme entre les variables : en particulier l'association du cyclindré à disp et hp.

Ca reste un peu flou à lire : pourquoi ne pas proposer mieux !!! cf ci-après

Clusterisation catégorisation de variables avec R

3- Clusteriser les variables en réseau (théorie des graphs)

Voici une fonction simple (faite maison : si vous l'utilisez, merci d'en indiquer la source) pour réaliser une clusterisation de variable.

Elle permet de voir ainsi les variables inter-liées dans cet exemple quand il s'agit de décrire des voitures.

Ci-dessous : un exemple, suivi du code source de la fonction à copier-coller.

data(mtcars)

corrigraph(mtcars,exclude=0.6,

pval=0.01)

Regroupement de variables corrélées : les vertex (ronds) correspondent aux variables. Plus une variable est connectée, plus elle apparait en grand. La couleur des traits traduit la nature de la corrélation (positive ou négative). La taille des traits la valeur de la corrélation de 0 à 1. Toutes ces corrélations sont significatives (pval < 0.01). Les regroupements colorés traduisent des familles de variables inter-corrélées.


BLEU : corrélation positive - ROUGE : négative

Regroupement de variables corrélées de façon significative sous forme de réseau igraph avec R

Pour installer la fonction corrigraph, il faut faire appel à ma librairie personnelle {KefiR}.

install.packages("devtools") ; require(devtools) # Risque d'erreur si RTools non installé.

devtools::install_github("Antoine-Masse/KefiR")

library("KefiR")

Voici une autre version de corrélogramme rendue possible par la fonction corrigraph() : cela permet d'estimer quelles variables pourront permettre de prédire une ou plusieurs variables de son choix.

data(swiss)

corrigraph(swiss,"Education")