Isso explica a dica perspicaz fornecida em um comentário por @ttnphns.
As variáveis adjacentes quase correlacionadas aumentam a contribuição de seu fator subjacente comum para o PCA. Podemos ver isso geometricamente. Considere estes dados no plano XY, mostrados como uma nuvem de pontos:
Há pouca correlação, covariância aproximadamente igual e os dados são centralizados: o PCA (não importa como conduzido) reportaria dois componentes aproximadamente iguais.
Vamos agora lançar uma terceira variável igual a mais uma pequena quantidade de erro aleatório. A matriz de correlação de mostra isso com os pequenos coeficientes fora da diagonal, exceto entre a segunda e a terceira linhas e colunas ( e ):Y ( X , Y , Z ) Y ZZY( X, Y, Z)YZ
⎛⎝⎜1- 0,0344018- 0,046076- 0,034401810.941829- 0,0460760.9418291⎞⎠⎟
Geometricamente, deslocamos todos os pontos originais quase na vertical, levantando a imagem anterior diretamente do plano da página. Essa nuvem de pontos pseudo 3D tenta ilustrar o levantamento com uma vista em perspectiva lateral (com base em um conjunto de dados diferente, embora gerado da mesma maneira que antes):
Os pontos originalmente estão no plano azul e são elevados aos pontos vermelhos. O eixo original aponta para a direita. A inclinação resultante também estende os pontos ao longo das direções YZ, dobrando assim sua contribuição para a variação. Consequentemente, um PCA desses novos dados ainda identificaria dois componentes principais principais, mas agora um deles terá o dobro da variação do outro.Y
Essa expectativa geométrica é confirmada com algumas simulações no R
. Por isso, repeti o procedimento de "levantamento" criando cópias quase colineares da segunda variável pela segunda, terceira, quarta e quinta vez, nomeando-as de a . Aqui está uma matriz de gráfico de dispersão mostrando como essas quatro últimas variáveis estão bem correlacionadas:X 5X2X5
O PCA é feito usando correlações (embora realmente não importe para esses dados), usando as duas primeiras variáveis, depois três, ... e finalmente cinco. Mostro os resultados usando gráficos das contribuições dos principais componentes para a variação total.
Inicialmente, com duas variáveis quase não correlacionadas, as contribuições são quase iguais (canto superior esquerdo). Depois de adicionar uma variável correlacionada à segunda - exatamente como na ilustração geométrica -, ainda existem apenas dois componentes principais, um agora com o dobro do tamanho da outra. (Um terceiro componente reflete a falta de correlação perfeita; mede a "espessura" da nuvem semelhante a uma panqueca no gráfico de dispersão 3D.) Após adicionar outra variável correlacionada ( ), o primeiro componente agora representa cerca de três quartos do total ; após a adição de um quinto, o primeiro componente representa quase quatro quintos do total. Nos quatro casos, os componentes após o segundo provavelmente seriam considerados inconseqüentes pela maioria dos procedimentos de diagnóstico da PCA; no último caso,X4um componente principal que vale a pena considerar.
Podemos ver agora que pode haver mérito em descartar variáveis que se pensa estarem medindo o mesmo aspecto subjacente (mas "latente") de uma coleção de variáveis , porque a inclusão de variáveis quase redundantes pode fazer com que o PCA superestime sua contribuição. Não há nada matematicamente certo (ou errado) nesse procedimento; é uma chamada de julgamento com base nos objetivos analíticos e no conhecimento dos dados. Mas deve ficar bem claro que deixar de lado variáveis conhecidas por serem fortemente correlacionadas com outras pode ter um efeito substancial nos resultados da APC.
Aqui está o R
código.
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)