Ceci explique l'explication fournie dans un commentaire de @ttnphns.
Les variables presque corrélées adjacentes augmentent la contribution de leur facteur sous-jacent commun à l'APC. Nous pouvons voir cela géométriquement. Considérez ces données dans le plan XY, représentées par un nuage de points:
Il y a peu de corrélation, une covariance à peu près égale, et les données sont centrées: la CPA (quelle que soit la manière dont elle a été menée) rendrait compte de deux composantes à peu près égales.
Ajoutons maintenant une troisième variable égale à plus une petite quantité d’erreur aléatoire. La matrice de corrélation de montre cela avec les petits coefficients non diagonaux sauf entre les deuxième et troisième lignes et les colonnes ( et ):ZY(X,Y,Z)YZ
⎛⎝⎜1.−0.0344018−0.046076−0.03440181.0.941829−0.0460760.9418291.⎞⎠⎟
Géométriquement, nous avons déplacé presque verticalement tous les points d'origine, soulevant ainsi l'image précédente hors du plan de la page. Ce pseudo nuage de points 3D tente d'illustrer l'élévation avec une vue en perspective latérale (basée sur un jeu de données différent, bien que généré de la même manière que précédemment):
Les points se situent à l'origine dans le plan bleu et sont levés vers les points rouges. L' axe origine est vers la droite. L'inclinaison qui en résulte étend également les points le long des directions YZ, doublant ainsi leur contribution à la variance. Par conséquent, une ACP de ces nouvelles données identifierait toujours deux composantes principales principales, mais l'une d'elles présentera désormais une variabilité deux fois plus grande que l'autre.Y
Cette attente géométrique est confirmée par quelques simulations dans R
. Pour cela, j'ai répété la procédure de "levage" en créant des copies quasi-colinéaires de la deuxième variable une deuxième, troisième, quatrième et cinquième fois, en les nommant à . Voici une matrice de diagrammes de dispersion montrant comment ces quatre dernières variables sont bien corrélées:X2X5
La PCA utilise des corrélations (même si peu importe pour ces données), en utilisant les deux premières variables, puis trois, ... et enfin cinq. Je présente les résultats à l'aide de graphiques représentant les contributions des principales composantes à la variance totale.
Initialement, avec deux variables presque non corrélées, les contributions sont presque égales (coin supérieur gauche). Après avoir ajouté une variable corrélée à la seconde - exactement comme dans l'illustration géométrique -, il ne reste plus que deux composants principaux, l'un deux fois plus grand que l'autre. (Une troisième composante reflète l’absence de corrélation parfaite; elle mesure «l’épaisseur» du nuage en forme de pancake dans le diagramme de dispersion 3D.) Après l’ajout d’une autre variable corrélée ( ), la première composante représente maintenant environ les trois quarts du total. ; après l'ajout d'un cinquième, le premier composant représente près des quatre cinquièmes du total. Dans les quatre cas, les composants après le second seraient probablement considérés comme sans importance par la plupart des procédures de diagnostic de la PCA; dans le dernier cas c'estX4une composante principale à considérer.
Nous pouvons maintenant voir qu’il serait peut-être avantageux d’écarter des variables censées mesurer le même aspect sous-jacent (mais "latent") d’un ensemble de variables , car l’inclusion des variables presque redondantes peut amener l’APC à surestimer leur contribution. Il n'y a rien mathématiquement juste (ou faux) dans une telle procédure; c'est un jugement qui repose sur les objectifs analytiques et la connaissance des données. Mais il devrait être très clair que le fait de mettre de côté des variables dont on sait qu’elles sont fortement corrélées avec d’autres peut avoir un effet substantiel sur les résultats de l’ACP.
Voici le R
code.
n.cases <- 240 # Number of points.
n.vars <- 4 # Number of mutually correlated variables.
set.seed(26) # Make these results reproducible.
eps <- rnorm(n.vars, 0, 1/4) # Make "1/4" smaller to *increase* the correlations.
x <- matrix(rnorm(n.cases * (n.vars+2)), nrow=n.cases)
beta <- rbind(c(1,rep(0, n.vars)), c(0,rep(1, n.vars)), cbind(rep(0,n.vars), diag(eps)))
y <- x%*%beta # The variables.
cor(y) # Verify their correlations are as intended.
plot(data.frame(y)) # Show the scatterplot matrix.
# Perform PCA on the first 2, 3, 4, ..., n.vars+1 variables.
p <- lapply(2:dim(beta)[2], function(k) prcomp(y[, 1:k], scale=TRUE))
# Print summaries and display plots.
tmp <- lapply(p, summary)
par(mfrow=c(2,2))
tmp <- lapply(p, plot)