Я хотел уточнить комментарий, который оставил под ответом @ Peter-Flom, но, вероятно, его стоит написать в ответе. В какой степени вы можете уменьшить размеры, используя PCA для почти ортогональных данных? Ответ «это зависит» от того, выполняете ли вы 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.
Примечание: продолжительность времени, затрачиваемого на обсуждение случая, когда переменные не масштабируются до единичной дисперсии - то есть с использованием ковариации, а не матрицы корреляции, - не должна рассматриваться как указание на то, что этот подход как-то более важен, и, конечно, не на том, что он это лучше". Симметрия ситуации просто более тонкая, поэтому требуется более длительное обсуждение.