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).
1) Partons de l'exemple suivant - Télécharger les données daca_bac.txt
# 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")
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.
Source interne :
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.
Source extérieure à envisager :