Я хотів уточнити коментар, який я залишив під відповіддю @ Пітера-Флома, але, мабуть, варто написати у відповідь. Наскільки ви можете зменшити розміри, застосувавши ПКС на майже ортогональних даних? Відповідь - це "залежить" від того, чи виконуєте Ви PCA на кореляційній або коваріаційній матриці .
Якщо ви використовуєте PCA на кореляційній матриці, то оскільки це лише трохи відрізнятиметься від матриці ідентичності, існує сферична симетрія, яка робить усі напрямки "однаково інформативними". Призначення відхилень змінних до однієї до PCA - це математично еквівалентний підхід, який дасть той самий результат. У той час як вихід PCA визначатиме деякі компоненти з дещо меншою дисперсією, ніж інші, це можна віднести (якщо припустити нульову кореляцію у сукупності) не що інше, як випадкові зміни в вибірці, тому це не буде вагомою причиною для вимкнення цих компоненти. Насправді така невідповідність між стандартними відхиленнями компонентів повинна зменшуватися в міру збільшення розміру вибірки. Ми можемо підтвердити це в симуляції.
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)
}
Вихід:
> 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
Однак якщо ви робите PCA, використовуючи матрицю коваріації замість матриці кореляції (рівнозначно: якщо ми не масштабуємо стандартні відхилення до 1 перед застосуванням PCA), то відповідь залежить від поширення ваших змінних. Якщо ваші змінні мають однакову дисперсію, то ми все ще маємо сферичну симетрію, тому немає "привілейованого напрямку" і зменшення розмірів неможливо досягти.
> 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
Однак із сумішшю змінних великої та низької дисперсії симетрія більше нагадує еліпсоїд із широкими осями та іншими тонкими. У цій ситуації буде великодисперсне навантаження компонентів на великодисперсні змінні (де еліпсоїд широкий) та низько-дисперсійні компоненти, що завантажуються на змінні з низькою дисперсією (у яких напрямках еліпсоїд вузький).
> 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
Якщо змінні мають дуже різні відхилення (геометрично знову еліпсоїд, але всі осі відрізняються), то ортогональність дозволяє першому ПК дуже сильно завантажуватися на змінну з найвищою дисперсією тощо.
> 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
В останніх двох випадках були компоненти з дисперсією з низькою дисперсією, які ви можете розглянути, як викинути, щоб досягти зменшення розмірів, але це абсолютно рівнозначно, перш за все, викидання найменших змінних дисперсій . По суті, ортогональність дозволяє ідентифікувати компоненти з низькою дисперсією зі змінними з низькою дисперсією, тому, якщо ви маєте намір зменшити розмірність таким чином, не ясно, ви б отримали користь від використання PCA для цього.
Nota bene: тривалість часу, витраченого на обговорення випадку, коли змінні не віднесені до одиничної дисперсії - тобто з використанням коваріації, а не кореляційної матриці - не слід сприймати як ознаку того, що цей підхід якось важливіший, і, звичайно, не те, що він краще". Симетрія ситуації просто більш тонка, тому потрібна тривала дискусія.