La rotation Varimax

Adapter ses résultats d'ACP (en langage R)

L'essentiel de cette page !

Dans le domaine des sciences humaines, en particulier de la pyschologie, on apprécie de pouvoir entraîner une rotations des données de l'ACP pour que les composantes principales se superposent artificiellement à certains paramètres regroupés (exemple ci-dessous).

C'est la rotation varimax que l'on peut réaliser avec la librairie psych de R et sa commande principal() qui réalise aussi des ACP simples.

Je vous invite à consulter la page générale d'aide à la réalisation d'analyse en composantes principales avec R si vous désirez faire des études ACP et mettre en forme vos résultats.

La rotation varimax permet ainsi de modifier les composantes afin que les axes se superposent à des ensembles de facteurs représentatifs et corrélés afin de faciliter la lecture (cf. exemple ci-dessous).

rotation varimax et ACP avec R project CRAN
Le but recherché de cette rotation est une facilitation de l'interprétation. on voit ici qu'il sera possible de définir les personnes selon 2 axes (motivation/enthousiasme versus rigueur/connaissances/savoir-faire). (Exemple artificiel)

# Simulation de la population

data_bac = read.table("data_bac.txt",sep="\t",header=T)

# ACP avec la librairie ade4

library(ade4) ; acp <- dudi.pca(data_bac[,c(3:7)], scannf= F,scale=T, center=T) ; 3

# Visualiser les étudiants par bac

plot(acp$li[,1],acp$li[,2],pch=16,col=data_bac$bac,xlab="Composante 1",ylab="Composante 2")

    • 2) Exécuter la librairie psych pour réaliser une ACP avec varimax

# Installation de psych et exécution

install.packages("psych")

library(psych)

# Réaliser l'ACP

acp.varimax <- principal(r=data_bac[,c(3:7)], nfactors=3, rotate="varimax", scores=T)

# Afficher les résultats de l'ACP (bilan complet, dur à exploiter)

biplot(acp.varimax)

# description du résultat d'ACP

head(acp.varimax)

acp.varimax$scores # résultats d'acp par individus (lignes) et composantes (col)

print(acp.varimax$scores[1:5,]) # afficher les premières lignes de chaque composante

# Afficher l'ACP varimax

plot(acp.varimax$scores[,1],acp.varimax$scores[,2],pch=16,,col=data_bac$bac)

    • 3) Comparer les résultats de l'ACP normale avec l'ACP avec rotation varimax

# Combiner le tout sur 1 fenêtre grahique

layout(matrix(1:4,2,2,byrow=F))

plot(acp.varimax$scores[,1],acp.varimax$scores[,2],pch=16,,col=data_bac$bac,

xlab="Varimax 1",ylab="Varimax 2",main="Varimax")

s.corcircle(acp.varimax$loadings[1:5,], xax = 1, yax = 2);mtext("Variabilité sur les axes 1 et 2")

plot(acp$li[,1],acp$li[,2],pch=16,col=data_bac$bac,

xlab="Composante 1",ylab="Composante 2",main="ACP normale")

acp$c1[,1]<-acp$c1[,1]*(-1) # On inverse le signe car dans cette exemple varimax à donner une composante 1 de signe opposée à la composante 1 obtenue par acp normale avec la librairie ade4.

s.corcircle(acp$c1, xax = 1, yax = 2);mtext("Variabilité sur les axes 2 et 3")

Analyse en composantes principales - rotation varimax avec R - diagramme circulaire de corrélation - R project CRAN

On voit ainsi clairement par cette ACP que l'on peut décrire les étudiants en fonction de leur connaissances et de leurs aptitudes à la manipulation et la conversion d'unité.

Attention : une autre étude réalisée avec les données iris (exemple qu'on peut obtenir sur R avec la commande data(iris) montre que la rotation varimax est susceptible de détruire les différences entre catégories d'individus. Varimax doit donc être évitée.