Analyse des composantes principales dans R : exemple étape par étape



L’analyse en composantes principales, souvent abrégée PCA, est une technique d’apprentissage automatique non supervisée qui cherche à trouver les composantes principales – des combinaisons linéaires des prédicteurs d’origine – qui expliquent une grande partie de la variation dans un ensemble de données.

L’objectif de l’ACP est d’expliquer l’essentiel de la variabilité d’un ensemble de données avec moins de variables que l’ensemble de données d’origine.

Pour un ensemble de données donné avec p variables, nous pourrions examiner les nuages de points de chaque combinaison de variables par paire, mais le nombre de nuages de points peut devenir très rapidement important.

Pour p prédicteurs, il existe des nuages de points p(p-1)/2.

Ainsi, pour un ensemble de données avec p = 15 prédicteurs, il y aurait 105 nuages de points différents !

Heureusement, la PCA offre un moyen de trouver une représentation de faible dimension d’un ensemble de données qui capture autant que possible la variation des données.

Si nous parvenons à capturer l’essentiel de la variation dans seulement deux dimensions, nous pourrions projeter toutes les observations de l’ensemble de données d’origine sur un simple nuage de points.

La manière dont nous trouvons les composants principaux est la suivante :

Étant donné un ensemble de données avec p prédicteurs : X 1 , X 2 , … , X p, , calculez Z 1 , … , Z M comme étant les M combinaisons linéaires des p prédicteurs d’origine où :

  • Z m = ΣΦ jm X j pour certaines constantes Φ 1m , Φ 2m , Φ pm , m = 1, …, M.
  • Z 1 est la combinaison linéaire des prédicteurs qui capture le plus de variance possible.
  • Z 2 est la prochaine combinaison linéaire des prédicteurs qui capture le plus de variance tout en étant orthogonale (c’est-à-dire non corrélée) à Z 1 .
  • Z 3 est alors la prochaine combinaison linéaire des prédicteurs qui capture le plus de variance tout en étant orthogonale à Z 2 .
  • Et ainsi de suite.

En pratique, nous utilisons les étapes suivantes pour calculer les combinaisons linéaires des prédicteurs originaux :

1. Mettez à l’échelle chacune des variables pour avoir une moyenne de 0 et un écart type de 1.

2. Calculez la matrice de covariance pour les variables mises à l’échelle.

3. Calculez les valeurs propres de la matrice de covariance.

En utilisant l’algèbre linéaire, on peut montrer que le vecteur propre qui correspond à la plus grande valeur propre est la première composante principale. En d’autres termes, cette combinaison particulière de prédicteurs explique la plus grande variance dans les données.

Le vecteur propre correspondant à la deuxième plus grande valeur propre est la deuxième composante principale, et ainsi de suite.

Ce didacticiel fournit un exemple étape par étape de la façon d’effectuer ce processus dans R.

Étape 1 : Charger les données

Nous allons d’abord charger le package Tidyverse , qui contient plusieurs fonctions utiles pour visualiser et manipuler les données :

library(tidyverse)

Pour cet exemple, nous utiliserons l’ensemble de données USArrests intégré à R, qui contient le nombre d’arrestations pour 100 000 habitants dans chaque État américain en 1973 pour meurtre , agression et viol .

Il comprend également le pourcentage de la population de chaque État vivant dans des zones urbaines, UrbanPop .

Le code suivant montre comment charger et afficher les premières lignes de l’ensemble de données :

#load data
data("USArrests")

#view first six rows of data
head(USArrests)

           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

Étape 2 : Calculer les composantes principales

Après avoir chargé les données, nous pouvons utiliser la fonction intégrée de R prcomp() pour calculer les principales composantes de l’ensemble de données.

Assurez-vous de spécifier scale = TRUE afin que chacune des variables de l’ensemble de données soit mise à l’échelle pour avoir une moyenne de 0 et un écart type de 1 avant de calculer les composantes principales.

Notez également que les vecteurs propres dans R pointent dans le sens négatif par défaut, nous allons donc multiplier par -1 pour inverser les signes.

#calculate principal components
results <- prcomp(USArrests, scale = TRUE)

#reverse the signs
results$rotation <- -1*results$rotation

#display principal components
results$rotation

               PC1        PC2        PC3         PC4
Murder   0.5358995 -0.4181809  0.3412327 -0.64922780
Assault  0.5831836 -0.1879856  0.2681484  0.74340748
UrbanPop 0.2781909  0.8728062  0.3780158 -0.13387773
Rape     0.5434321  0.1673186 -0.8177779 -0.08902432

Nous pouvons voir que la première composante principale (PC1) a des valeurs élevées pour le meurtre, l’agression et le viol, ce qui indique que cette composante principale décrit la plus grande variation de ces variables.

Nous pouvons également voir que la deuxième composante principale (PC2) a une valeur élevée pour UrbanPop, ce qui indique que cette composante principale met l’accent sur la population urbaine.

Notez que les scores des composants principaux pour chaque état sont stockés dans results$x . On multipliera également ces scores par -1 pour inverser les signes :

#reverse the signs of the scores
results$x <- -1*results$x

#display the first six scores
head(results$x)

                  PC1        PC2         PC3          PC4
Alabama     0.9756604 -1.1220012  0.43980366 -0.154696581
Alaska      1.9305379 -1.0624269 -2.01950027  0.434175454
Arizona     1.7454429  0.7384595 -0.05423025  0.826264240
Arkansas   -0.1399989 -1.1085423 -0.11342217  0.180973554
California  2.4986128  1.5274267 -0.59254100  0.338559240
Colorado    1.4993407  0.9776297 -1.08400162 -0.001450164

Étape 3 : Visualisez les résultats avec un biplot

Ensuite, nous pouvons créer un biplot – un tracé qui projette chacune des observations de l’ensemble de données sur un nuage de points qui utilise les première et deuxième composantes principales comme axes :

Notez que scale = 0 garantit que les flèches du tracé sont mises à l’échelle pour représenter les chargements.

biplot(results, scale = 0)

Biplot pour l'analyse des composantes principales dans R

À partir du tracé, nous pouvons voir chacun des 50 états représentés dans un espace simple à deux dimensions.

Les États proches les uns des autres sur le graphique ont des modèles de données similaires en ce qui concerne les variables de l’ensemble de données d’origine.

Nous pouvons également constater que certains États sont plus fortement associés à certains crimes qu’à d’autres. Par exemple, la Géorgie est l’État le plus proche de la variable Meurtre dans l’intrigue.

Si nous examinons les États ayant les taux de meurtres les plus élevés dans l’ensemble de données d’origine, nous pouvons voir que la Géorgie est en fait en tête de liste :

#display states with highest murder rates in original dataset
head(USArrests[order(-USArrests$Murder),])

               Murder Assault UrbanPop Rape
Georgia          17.4     211       60 25.8
Mississippi      16.1     259       44 17.1
Florida          15.4     335       80 31.9
Louisiana        15.4     249       66 22.2
South Carolina   14.4     279       48 22.5
Alabama          13.2     236       58 21.2

Étape 4 : Trouver l’écart expliqué par chaque composante principale

Nous pouvons utiliser le code suivant pour calculer la variance totale dans l’ensemble de données d’origine expliquée par chaque composante principale :

#calculate total variance explained by each principal component
results$sdev^2 / sum(results$sdev^2)

[1] 0.62006039 0.24744129 0.08914080 0.04335752

A partir des résultats, nous pouvons observer ce qui suit :

  • La première composante principale explique 62 % de la variance totale de l’ensemble de données.
  • La deuxième composante principale explique 24,7 % de la variance totale de l’ensemble de données.
  • La troisième composante principale explique 8,9 % de la variance totale de l’ensemble de données.
  • La quatrième composante principale explique 4,3 % de la variance totale de l’ensemble de données.

Ainsi, les deux premières composantes principales expliquent la majorité de la variance totale des données.

C’est un bon signe car le biplot précédent projetait chacune des observations des données originales sur un nuage de points qui ne prenait en compte que les deux premières composantes principales.

Ainsi, il est valable d’examiner les modèles dans le biplot pour identifier les états similaires les uns aux autres.

Nous pouvons également créer un graphique d’éboulis – un graphique qui affiche la variance totale expliquée par chaque composante principale – pour visualiser les résultats de l’ACP :

#calculate total variance explained by each principal component
var_explained = results$sdev^2 / sum(results$sdev^2)

#create scree plot
qplot(c(1:4), var_explained) + 
  geom_line() + 
  xlab("Principal Component") + 
  ylab("Variance Explained") +
  ggtitle("Scree Plot") +
  ylim(0, 1)

Terrain d'éboulis en R

Analyse en composantes principales en pratique

En pratique, la PCA est utilisée le plus souvent pour deux raisons :

1. Analyse exploratoire des données – Nous utilisons l’ACP lorsque nous explorons pour la première fois un ensemble de données et que nous voulons comprendre quelles observations dans les données sont les plus similaires les unes aux autres.

2. Régression des composantes principales – Nous pouvons également utiliser l’ACP pour calculer les composantes principales qui peuvent ensuite être utilisées dans la régression des composantes principales . Ce type de régression est souvent utilisé lorsqu’il existe une multicolinéarité entre les prédicteurs d’un ensemble de données.


Le code R complet utilisé dans ce tutoriel peut être trouvé ici .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *