Análise de componentes principais (PCA)

A Análise de Componentes Principais (PCA) encontra uma representação de dimensão menor dos dados que captura o máximo de variância possível. Ela faz isso girando o sistema de coordenadas para alinhá-lo com as direções de máxima variância nos dados. O resultado é um conjunto de componentes não correlacionadas, ordenadas pela quantidade de variância que explicam. Para dados categóricos organizados como uma tabela de contingência, a mesma ideia se aplica por meio da análise de correspondência.

O que o PCA faz geometricamente

Dadas \(n\) observações de \(p\) variáveis, o PCA encontra uma sequência de direções ortogonais \(\mathbf{v}_1, \mathbf{v}_2, \ldots, \mathbf{v}_p\) (as componentes principais) tais que:

  • \(\mathbf{v}_1\) é a direção de máxima variância nos dados.
  • \(\mathbf{v}_2\) é a direção de máxima variância no subespaço ortogonal a \(\mathbf{v}_1\).
  • E assim por diante.

A projeção dos dados sobre \(\mathbf{v}_k\) dá os escores \(\mathbf{z}_k = \mathbf{X}\mathbf{v}_k\): as coordenadas de cada observação no novo sistema de coordenadas. As direções \(\mathbf{v}_k\) são chamadas de cargas (loadings): elas dizem o quanto cada variável original contribui para cada componente.

Diagrama de dispersão mostrando os dados originais com as direções da primeira e segunda componente principal sobrepostas como setas

Derivação matemática

Centralize os dados: \(\tilde{\mathbf{X}} = \mathbf{X} - \bar{\mathbf{X}}\). A matriz de covariância amostral é:

\[\mathbf{S} = \frac{1}{n-1}\tilde{\mathbf{X}}^T\tilde{\mathbf{X}}\]

As componentes principais são os autovetores de \(\mathbf{S}\):

\[\mathbf{S}\mathbf{v}_k = \lambda_k \mathbf{v}_k\]

em que \(\lambda_k\) é a variância explicada pela \(k\)-ésima componente. Os autovetores são ortonormais (\(\mathbf{v}_j^T\mathbf{v}_k = 0\) para \(j \neq k\), \(\|\mathbf{v}_k\|=1\)) e ordenados por autovalor decrescente \(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_p \geq 0\).

Conexão com a SVD: a decomposição em valores singulares de \(\tilde{\mathbf{X}} = \mathbf{U}\mathbf{D}\mathbf{V}^T\) dá imediatamente:

\[\tilde{\mathbf{X}}^T\tilde{\mathbf{X}} = \mathbf{V}\mathbf{D}^2\mathbf{V}^T\]

Os vetores singulares direitos \(\mathbf{V}\) são as cargas das componentes principais, e os valores singulares \(d_k\) se relacionam com os autovalores via \(\lambda_k = d_k^2/(n-1)\). Calcular o PCA via SVD é numericamente mais estável do que a autodecomposição de \(\mathbf{S}\) quando \(p\) é grande ou algumas variáveis são quase colineares.

PCA de covariância vs correlação

O PCA sobre a matriz de covariância preserva a escala original: variáveis com grande variância dominam as componentes. O PCA sobre a matriz de correlação (equivalente a padronizar cada variável para variância unitária primeiro) dá peso igual a todas as variáveis, independentemente de sua escala.

Sempre padronize quando as variáveis são medidas em unidades diferentes (por exemplo, altura em cm e peso em kg). Quando todas as variáveis estão na mesma escala (por exemplo, contagens de expressão génica), o PCA de covariância é apropriado e preserva diferenças significativas na variância.

Escolhendo o número de componentes

A proporção de variância explicada pela componente \(k\):

\[\text{PVE}_k = \frac{\lambda_k}{\sum_{j=1}^p \lambda_j}\]

Gráfico de sedimentação (scree plot): plote \(\lambda_k\) (ou \(\text{PVE}_k\)) vs \(k\). Procure o “cotovelo” em que a curva se achata. Componentes à esquerda do cotovelo capturam a maior parte da estrutura; as à direita capturam ruído.

Critério de Kaiser: retenha componentes com \(\lambda_k > 1\) (para PCA de correlação: componentes que explicam mais do que uma única variável original).

Limiar de variância acumulada: retenha componentes suficientes para explicar 80-90% da variância total.

Gráfico de sedimentação e gráfico de variância acumulada explicada para um PCA em um conjunto de dados de 10 variáveis

O biplot

Um biplot sobrepõe os escores (observações no espaço das componentes) e as cargas (variáveis originais como setas) no mesmo gráfico. Ele permite a interpretação simultânea de ambos:

  • Observações próximas entre si têm perfis semelhantes.
  • Variáveis (setas) apontando na mesma direção são positivamente correlacionadas; em direções opostas, negativamente correlacionadas; setas perpendiculares são não correlacionadas.
  • O comprimento da seta indica quanto da variância da variável é capturado pelas duas componentes mostradas.
  • Uma observação próxima de uma seta tem escore alto nessa variável.

Biplot do PCA no conjunto de dados USArrests mostrando os escores dos estados e as cargas das variáveis de criminalidade

A CP1 (horizontal) separa estados de alta criminalidade (direita) dos de baixa criminalidade (esquerda): Murder, Assault e Rape todos apontam para a direita, o que significa que a CP1 é um índice geral de criminalidade. A CP2 (vertical) é impulsionada principalmente por UrbanPop: estados com alta população urbana têm escore alto na CP2, independentemente das taxas de criminalidade.

PCA vs LDA

Tanto o PCA quanto a LDA projetam os dados em um espaço de dimensão menor, mas com objetivos diferentes:

  • PCA: não supervisionado. Maximiza a variância total dos dados projetados. Ignora os rótulos de classe. Útil para visualização, redução de ruído e pré-processamento.
  • LDA: supervisionada. Maximiza a variância entre classes em relação à variância dentro da classe. Usa os rótulos de classe. Útil quando o objetivo é a classificação ou encontrar direções que separam classes conhecidas.

Ambos também são estritamente lineares: quando a estrutura nos dados é genuinamente não linear, o t-SNE e o UMAP são as alternativas não lineares padrão para visualização. Se as direções de máxima variância forem as mesmas que as direções que separam as classes, o PCA e a LDA concordam. Quando a direção mais variável é ruído dentro da classe (por exemplo, indivíduos variam muito dentro de cada classe, mas as classes diferem em uma direção de baixa variância), o PCA não encontra a estrutura discriminante e a LDA é necessária.

⚠️ O PCA não garante componentes interpretáveis

Cada componente principal é uma combinação linear de todas as variáveis originais. Mesmo que a CP1 capture 60% da variância, ela pode ser uma média ponderada de 20 variáveis com cargas semelhantes: não há garantia de que corresponda a um conceito científico significativo.

Técnicas como o PCA esparso (impõe penalidade L1 sobre as cargas para forçar a maioria a zero) e a rotação varimax (gira as componentes para maximizar a simplicidade da estrutura de cargas) podem melhorar a interpretabilidade, ao custo de perder a propriedade de otimalidade de variância máxima.

💡 PCA em R

# Fit PCA
pca <- prcomp(X, center=TRUE, scale.=TRUE)
summary(pca)            # variance explained per component
pca$rotation            # loadings (eigenvectors)
pca$x                   # scores (projected data)

# Scree plot
plot(pca, type="l")

# Biplot
biplot(pca, scale=0)

# Choose number of components
cumsum(pca$sdev^2) / sum(pca$sdev^2)  # cumulative PVE

# Project new data onto existing PCA
predict(pca, newdata=X_new)

# Sparse PCA for interpretable loadings
library(sparsepca)
spca <- spca(X, k=3, alpha=1e-3, beta=1e-3)