Queria esclarecer um comentário que deixei sob a resposta de @ Peter-Flom, mas provavelmente vale a pena escrever uma resposta. Até que ponto você pode reduzir dimensões executando o PCA em dados quase ortogonais? A resposta é "depende" se você executa o PCA na matriz de correlação ou covariância .
Se você estiver usando o PCA na matriz de correlação, como isso será um pouco diferente da matriz de identidade, haverá uma simetria esférica que torna todas as direções "igualmente informativas". Reescalonar as variações de suas variáveis para uma anterior ao PCA é uma abordagem matematicamente equivalente que produzirá o mesmo resultado. Embora a saída do PCA identifique alguns componentes com variação ligeiramente mais baixa que outros, isso pode ser atribuído (se assumirmos correlação zero na população) a nada mais do que variação aleatória na amostra, portanto, não seria um bom motivo para descartar esses componentes. De fato, essa disparidade entre os desvios padrão dos componentes deve diminuir em magnitude à medida que aumentamos o tamanho da amostra. Podemos confirmar isso em uma simulação.
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)
}
Resultado:
> 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
No entanto, se você fizer o PCA usando a matriz de covariância em vez da matriz de correlação (equivalentemente: se não escalarmos os desvios padrão para 1 antes de aplicar o PCA), a resposta dependerá da dispersão de suas variáveis. Se suas variáveis têm a mesma variação, ainda temos simetria esférica, portanto não há uma "direção privilegiada" e a redução dimensional não pode ser alcançada.
> 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
Porém, com uma mistura de variáveis de alta e baixa variância, a simetria é mais como um elipsóide com alguns eixos largos e outros finos. Nesta situação, haverá componentes de alta variância carregando nas variáveis de alta variância (onde o elipsóide é largo) e componentes de baixa variância carregando nas variáveis de baixa variância (em quais direções o elipsóide é estreito).
> 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
Se as variáveis tiverem variações muito diferentes (geometricamente um elipsóide novamente, mas com todos os eixos diferentes), a ortogonalidade permitirá que o primeiro PC carregue muito na variável de maior variação e assim por diante.
> 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
Nos dois últimos casos, houve componentes de baixa variação que você pode considerar jogar fora para obter uma redução dimensional, mas fazer isso é exatamente equivalente a jogar fora as variáveis de menor variação em primeiro lugar . Essencialmente, a ortogonalidade permite identificar componentes de baixa variação com variáveis de baixa variação; portanto, se você pretende reduzir a dimensionalidade dessa maneira, não está claro se você se beneficiaria do uso do PCA para fazer isso.
Nota bene: o tempo gasto discutindo o caso em que as variáveis não são redimensionadas para a variação unitária - isto é, usando a covariância em vez da matriz de correlação - não deve ser tomada como uma indicação de que essa abordagem é de alguma forma mais importante, e certamente não que é melhor". A simetria da situação é simplesmente mais sutil, sendo necessária uma discussão mais longa.