Je voulais clarifier un commentaire que j'ai laissé sous la réponse de @ Peter-Flom, mais cela vaut probablement la peine d'écrire une réponse. Dans quelle mesure pouvez-vous réduire les dimensions en exécutant PCA sur des données presque orthogonales? La réponse est "cela dépend" si vous effectuez l'ACP sur la matrice de corrélation ou de covariance .
Si vous utilisez PCA sur la matrice de corrélation, alors comme cela ne diffère que légèrement de la matrice d'identité, il y a une symétrie sphérique qui rend toutes les directions "également informatives". Redimensionner les variances de vos variables à une avant l'ACP est une approche mathématiquement équivalente qui produira le même résultat. Bien que la sortie de l'ACP identifie certaines composantes avec une variance légèrement plus faible que d'autres, cela peut être attribué (si nous supposons une corrélation nulle dans la population) à rien de plus qu'une variation aléatoire de l'échantillon, donc ce ne serait pas une bonne raison de les abandonner. Composants. En fait, une telle disparité entre les écarts-types des composants devrait diminuer en ampleur à mesure que nous augmentons la taille de l'échantillon. Nous pouvons le confirmer dans une simulation.
set.seed(123)
princompn <- function(n, sd1=1, sd2=1, sd3=1, sd4=1, cor=TRUE) {
x1 <- rnorm(n, mean=0, sd=sd1)
x2 <- rnorm(n, mean=0, sd=sd2)
x3 <- rnorm(n, mean=0, sd=sd3)
x4 <- rnorm(n, mean=0, sd=sd4)
prcomp(cbind(x1,x2,x3,x4), scale.=cor)
}
Production:
> pc100 <- princompn(100)
> summary(pc100)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0736 1.0243 0.9762 0.9193
Proportion of Variance 0.2882 0.2623 0.2382 0.2113
Cumulative Proportion 0.2882 0.5505 0.7887 1.0000
>
> pc1m <- princompn(1e6)
> summary(pc1m)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.0008 1.0004 0.9998 0.9990
Proportion of Variance 0.2504 0.2502 0.2499 0.2495
Cumulative Proportion 0.2504 0.5006 0.7505 1.0000
Cependant, si vous effectuez l'ACP en utilisant la matrice de covariance au lieu de la matrice de corrélation (de manière équivalente: si nous ne mettons pas les écarts-types à 1 avant d'appliquer l'ACP), la réponse dépend de la répartition de vos variables. Si vos variables ont la même variance, nous avons toujours une symétrie sphérique, donc il n'y a pas de "direction privilégiée" et la réduction dimensionnelle ne peut pas être obtenue.
> pcEqual <- princompn(n=1e6, sd1=4, sd2=4, sd3=4, sd4=4, cor=FALSE)
> summary(pcEqual)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0056 4.0010 3.9986 3.9936
Proportion of Variance 0.2507 0.2502 0.2499 0.2492
Cumulative Proportion 0.2507 0.5009 0.7508 1.0000
Cependant, avec un mélange de variables de variance élevée et faible, la symétrie ressemble plus à un ellipsoïde avec des axes larges et d'autres fins. Dans cette situation, des composants à variance élevée se chargeront sur les variables à variance élevée (où l'ellipsoïde est large) et des composants à faible variance se chargeront sur les variables à faible variance (dans quelles directions l'ellipsoïde est étroit).
> pcHiLo <- princompn(n=1e6, sd1=4, sd2=4, sd3=1, sd4=1, cor=FALSE)
> summary(pcHiLo)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 4.0018 3.9985 1.0016 1.00005
Proportion of Variance 0.4709 0.4702 0.0295 0.02941
Cumulative Proportion 0.4709 0.9411 0.9706 1.00000
> round(pcHiLo$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.460 0.888 0.000 0.000
x2 -0.888 0.460 0.000 0.000
x3 0.000 0.000 -0.747 -0.664
x4 0.000 0.000 0.664 -0.747
Si les variables ont des variances très différentes (géométriquement un ellipsoïde à nouveau mais avec tous les axes différents), alors l'orthogonalité permet au premier PC de se charger très fortement sur la variable de variance la plus élevée et ainsi de suite.
> pc1234 <- princompn(n=1e6, sd1=1, sd2=2, sd3=3, sd4=4, cor=FALSE)
> summary(pc1234)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 3.9981 3.0031 1.9993 1.00033
Proportion of Variance 0.5328 0.3006 0.1332 0.03335
Cumulative Proportion 0.5328 0.8334 0.9667 1.00000
> round(pc1234$rotation, 3)
PC1 PC2 PC3 PC4
x1 0.000 0.000 -0.001 1.000
x2 0.001 -0.001 1.000 0.001
x3 0.003 -1.000 -0.001 0.000
x4 1.000 0.003 -0.001 0.000
Dans les deux derniers cas, il y avait des composants à faible variance que vous pourriez envisager de jeter pour obtenir une réduction dimensionnelle, mais cela équivaut exactement à jeter les variables de variance les plus faibles en premier lieu . Essentiellement, l'orthogonalité vous permet d'identifier les composants à faible variance avec des variables à faible variance.Par conséquent, si vous avez l'intention de réduire la dimensionnalité de cette manière, il n'est pas clair que vous bénéficieriez de l'utilisation de PCA pour ce faire.
Nota bene: le temps passé à discuter du cas où les variables ne sont pas redimensionnées en variance unitaire - c'est-à-dire en utilisant la covariance plutôt que la matrice de corrélation - ne doit pas être considéré comme une indication que cette approche est en quelque sorte plus importante, et certainement pas qu'elle est mieux". La symétrie de la situation est tout simplement plus subtile et nécessite donc une discussion plus longue.