Parte 1: Teoria da Análise de Componentes Principais (PCA)
1. Introdução à Análise de Componentes Principais (PCA)
Aqui está o texto unificado, integrando os contextos de uso com os exemplos correspondentes:
Aplicações da PCA em Ciências Agrárias:
A Análise de Componentes Principais (PCA) é amplamente utilizada em ciências agrárias para simplificar a interpretação de dados complexos e multidimensionais. Um exemplo disso é na redução de dimensionalidade em experimentos agrícolas, onde múltiplas variáveis, como características morfológicas de plantas, podem ser analisadas de maneira mais eficiente. A PCA ajuda a identificar os componentes principais que capturam a maior parte da variação entre as amostras, facilitando a compreensão das relações entre as variáveis.
Na análise de solo e qualidade ambiental, a PCA permite identificar padrões em conjuntos de dados complexos, como os relacionados à composição química do solo ou a indicadores de qualidade ambiental. Essa técnica possibilita a categorização de diferentes tipos de solos ou áreas ambientais, fornecendo informações valiosas para o manejo sustentável.
Outra aplicação importante é na seleção de variedades em melhoramento genético, onde a PCA é usada para visualizar e agrupar características fenotípicas ou genotípicas. Isso facilita a escolha de variedades com características desejáveis, otimizando o processo de desenvolvimento de novas cultivares.
A PCA também é útil na análise de dados climáticos, ajudando a resumir grandes conjuntos de dados e a identificar as variáveis climáticas mais relevantes que afetam o crescimento das culturas. Além disso, em estudos de biodiversidade, a PCA auxilia na identificação de padrões de distribuição de espécies em relação a fatores ambientais, contribuindo para uma melhor compreensão e conservação da biodiversidade.
2. Fundamentos Teóricos da PCA
Definição: PCA é uma técnica estatística usada para transformar um conjunto de observações de variáveis possivelmente correlacionadas em um conjunto de valores de variáveis linearmente não correlacionadas, chamadas de componentes principais.
Matrizes e Autovalores: A PCA envolve a decomposição da matriz de covariância (ou correlação) dos dados para extrair autovalores e autovetores. Esses autovetores representam as direções dos componentes principais, e os autovalores indicam a variância explicada por cada componente.
Componentes Principais:
- Primeiro Componente Principal: Captura a maior variabilidade possível nos dados, representando a direção de máxima variação.
- Componentes Subsequentes: Cada componente subsequente captura a maior variabilidade possível, sujeita à condição de ser ortogonal aos componentes anteriores.
Propriedades:
- Ortogonalidade: Os componentes principais são ortogonais entre si, garantindo que não exista correlação entre eles.
- Maximização da Variância: Cada componente principal é definido de forma a maximizar a variância explicada pelos dados.
3. Explicação de Autovalores e Autovetores
- Autovalor (Eigenvalue):
- Um autovalor representa a quantidade de variância capturada por cada componente principal. Em outras palavras, é um número associado a um vetor (autovetor) que indica a “importância” ou o “peso” daquele vetor na descrição da variação dos dados.
- Na PCA, os autovalores estão relacionados à matriz de covariância (ou correlação) dos dados. A PCA transforma as variáveis originais em componentes principais de forma que o primeiro componente principal (com o maior autovalor) captura a maior quantidade de variância nos dados, o segundo componente captura a maior quantidade de variância restante, e assim por diante.
- Autovetor (Eigenvector):
- Um autovetor é uma direção ou vetor que define o caminho ao longo do qual os dados variam mais fortemente. Na PCA, cada autovetor é um vetor unitário (de comprimento 1) que define uma nova dimensão no espaço transformado.
- Os autovetores na PCA correspondem às direções dos componentes principais. Eles apontam para as direções de maior variação nos dados e são ortogonais entre si, garantindo que cada componente principal seja independente dos outros.
- Como os Autovalores e Autovetores Funcionam na PCA:
- A matriz de covariância (ou correlação) dos dados é decomposta em autovalores e autovetores. Os autovalores indicam a quantidade de variância explicada por cada componente, enquanto os autovetores definem as direções (componentes principais) que capturam essa variância.
- Exemplo Intuitivo:
- Visualize um conjunto de dados em 2D. O autovetor associado ao maior autovalor (primeiro componente principal) apontará na direção de maior variação dos dados. O segundo autovetor, ortogonal ao primeiro, capturará a segunda maior variação.
4. Principais Resultados e Suas Interpretações
Proporção da Variância Explicada:
- Cada componente principal explica uma fração da variância total dos dados. Essa proporção é usada para decidir quantos componentes principais são necessários para representar os dados de forma adequada.
Gráfico Scree:
- O gráfico Scree mostra a variância explicada por cada componente principal e é utilizado para identificar o ponto onde a variância adicional explicada por componentes subsequentes se torna insignificante (“joelho do gráfico”).
Scores (Pontuações):
- Definição: Representam as coordenadas das observações (ou amostras) no novo espaço definido pelas componentes principais.
- Cálculo: São obtidos projetando os dados originais nas componentes principais. Matemáticamente, os scores são calculados como:
\[\text{Scores} = Z \cdot V\]
Onde:
- \(Z\) é a matriz de dados padronizados (\(n \times p\)).
- \(V\) é a matriz de autovetores (\(p \times k\)), onde \(k\) é o número de componentes principais selecionadas.
Interpretação: Cada ponto no biplot que representa uma observação é posicionado de acordo com seus scores, indicando sua posição relativa no espaço das componentes principais.
Loadings (Cargas):
- Definição: Representam as coordenadas das variáveis originais no espaço das componentes principais.
- Cálculo: São derivados dos autovetores e autovalores da decomposição PCA. A carga para a \(j\)-ésima variável na \(k\)-ésima componente principal é geralmente calculada como:
\[\text{Loading}_{jk} = \text{Autovetor}_{jk} \times \sqrt{\text{Autovalor}_k}\]
- Interpretação: As cargas indicam como cada variável contribui para as componentes principais. No biplot, as variáveis são representadas como vetores (setas) cuja direção e magnitude refletem sua relação com as componentes principais.
Intervalo
Parte 2: Aplicação Prática com R
1. Preparação do Ambiente no R Colab
- Introdução ao R Colab:
O Google Colab é uma ferramenta gratuita oferecida pelo Google que permite a execução de código diretamente no navegador, sem a necessidade de instalação de software ou configuração de ambiente. Ele é especialmente útil para trabalhar com a linguagem R e Python, permitindo que você escreva e execute scripts de forma colaborativa, salve seus projetos na nuvem e compartilhe facilmente com outras pessoas. Além disso, o Colab oferece acesso a recursos de computação em nuvem, facilitando o trabalho com grandes volumes de dados e a realização de análises complexas sem sobrecarregar o seu computador.
Para acessar o Google Colab clique aqui.
# Instalar pacotes necessários
#install.packages("factoextra")
#install.packages("corrplot")# Carregar pacotes necessários
library(factoextra)
library(ggplot2)
library(cluster)
library(corrplot)2. Exemplo 1: Dataset Iris
- Carregamento e Exploração Inicial dos Dados:
# Carregar o dataset
data(iris)
# Visualizar as primeiras linhas
head(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
# Resumo estatístico
summary(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
- Aplicação da PCA:
# Aplicar PCA, ignorando a coluna de espécies
pca_iris <- prcomp(iris[, 1:4], center = T, scale. = T) #centralizar proximo ao eixo - padronização dos dados)- Visualização e Interpretação dos Resultados:
Autovalores:
Os autovalores ou eigenvalues medem o quanto da variação foi captada por cada componente principal. Eles são maiores para os primeiros componentes em relação aos subsequentes. Ou seja, o primeiro componente corresponde ao sentido (direção) com a maior quantidade de variação captada.
Se deve examinar os autovalores afim de determinar o numero de componentes a serem considerados. Os autovalores e a proporção da variância (informação) captada pelo Componente principal (CP) podem ser extraídos através da função get_eigenvalue() do pacote factoextra.
#autovalores
eig.val <- get_eigenvalue(pca_iris)
eig.val eigenvalue variance.percent cumulative.variance.percent
Dim.1 2.91849782 72.9624454 72.96245
Dim.2 0.91403047 22.8507618 95.81321
Dim.3 0.14675688 3.6689219 99.48213
Dim.4 0.02071484 0.5178709 100.00000
E podem ser vizualizados pelo gráfico Scree plot usando a função fviz_eig().
# Gráfico Scree para determinar o número de componentes a reter
scree = fviz_eig(pca_iris, addlabels = TRUE)
scree# Configurando os rótulos (labels) do gráfico
ggpubr::ggpar(scree,
title = "",
subtitle = "",
caption = "",
xlab = "Dimensões", ylab = "Percentual da variância explicada (%)")Os dois primeiros componentes (dimensões) acumulam aprox. \(95,8\%\) da variação dos dados e são, portanto, suficientes para representa-los.
Loadings ou Coordenadas das variáveis:
Além dos autovalores, existem outros dois resultados muito relevantes: var$coord e var$cos2. O primeiro representa as coordenadas das variáveis para criar o gráfico de de dos CPs e o segundo representa a qualidade da representação de cada variável no mapa de fatores. Ele é calculado pelo quadrado das coordenadas var.cos2 = var.coord * var.coord. Para melhor interpretação var$contrib contém as contribuições (%) das variáveis (var) para os CPs.
Para extrair estes valores vamos usar o seguinte a função get_pca_var():
var <- get_pca_var(pca_iris)Agora podemos ver as coordenadas de cada variável nas quatro dimensões (CPs):
print(var$coord) Dim.1 Dim.2 Dim.3 Dim.4
Sepal.Length 0.8901688 -0.36082989 0.27565767 0.03760602
Sepal.Width -0.4601427 -0.88271627 -0.09361987 -0.01777631
Petal.Length 0.9915552 -0.02341519 -0.05444699 -0.11534978
Petal.Width 0.9649790 -0.06399985 -0.24298265 0.07535950
e visualizar graficamente:
cor_cir = fviz_pca_var(pca_iris, repel = TRUE)
ggpubr::ggpar(cor_cir,
title = "Gráfico de Correlação",
ggtheme= theme_minimal(),
xlab = "CP1 (73%)", ylab = "CP2 (22,9%)"
)No biplot, as coordenadas das variáveis são geralmente plotadas como vetores (setas) que partem da origem. O comprimento e a direção das setas indicam a contribuição e a correlação das variáveis com os componentes principais plotados.
A direção da seta indica o sentido da variável em relação aos componentes principais. O ângulo entre as setas de diferentes variáveis indica o grau de correlação entre essas variáveis (setas próximas indicam correlação positiva, setas perpendiculares indicam correlação próxima de zero).
Variáveis cujos vetores apontam para o mesmo lado são mais correlacionadas entre si e quanto maior a seta (vetor) maior o peso ou qualidade da representação desta para o CP.
Como dito, os valores da qualidade da representação são simplesmente as coordenadas elevadas ao quadrado, que no R visualizamos desta forma:
print(var$cos2) Dim.1 Dim.2 Dim.3 Dim.4
Sepal.Length 0.7924004 0.130198208 0.075987149 0.0014142127
Sepal.Width 0.2117313 0.779188012 0.008764681 0.0003159971
Petal.Length 0.9831817 0.000548271 0.002964475 0.0133055723
Petal.Width 0.9311844 0.004095980 0.059040571 0.0056790544
E graficamente:
corrplot(var$cos2, is.corr = FALSE)Veja que a qualidade de representação de cada variável esta de acordo com o tamanho da seta das coordenadas.
Contribuição das variáveis aos CPs.
A contribuição das variáveis aos PCs é cmputada em porcentagem. Variáveis que são correlacionadas com CP1 (Dim.1) e CP2 (Dim.2) são as mais importantes para explicar a varibilidade do conjunto de dados. O valor da contribuição é observado a seguir:
print(var$contrib) Dim.1 Dim.2 Dim.3 Dim.4
Sepal.Length 27.150969 14.24440565 51.777574 6.827052
Sepal.Width 7.254804 85.24748749 5.972245 1.525463
Petal.Length 33.687936 0.05998389 2.019990 64.232089
Petal.Width 31.906291 0.44812296 40.230191 27.415396
Para vizualizaramos a contribuição das variáveis ao CP 1 usamos o seguinte gráfico:
dim1 = fviz_contrib(pca_iris, choice = "var", axes = 1)
ggpubr::ggpar(dim1,
title = "Contribuição das variáveis para o CP 1",
ylab = "Contribuição (%)",
xlab = "Variáveis",
ggtheme= theme_minimal()
)Mas o mais importante é saber a Contribuição das variaveis para CP1 + CP2:
dim12 = fviz_contrib(pca_iris, choice = "var", axes = 1:2)
ggpubr::ggpar(dim12,
title = "Contribuição das variáveis para a soma dos componentes 1 e 2",
xlab = "Variáveis", ylab = "Contribuição (%)",
ggtheme = theme_minimal()
)Agora temos dois gráficos que são muito utilizados para representar os dados e checar por agrupamentos e realizar insights úteis: o gráfico da contribuição dos indivíduos nos CPs e o gráfico Biplot. Para isso usamos as funções fviz_pca_ind() e fviz_pca_biplot, respectivamente:
# Gráfico de indivíduos
fviz_pca_ind(pca_iris, geom.ind = "point",
col.ind = "cos2",
addEllipses = F, label = "var",
col.var = "black")Este grafico não é muito util para esta analise, uma vez que os indivíduos são meras repetições e não tem significado prático no estudo.
E o gráfico Biplot:
# Gráfico de agrupamento (Biplot)
fviz_pca_biplot(pca_iris, geom.ind = "point", repel = TRUE,
col.ind = iris$Species, palette = "jco",
addEllipses = TRUE, label = "var",
col.var = "black")Interpretação do ultimo gráfico:
A separação clara das diferentes espécies ao longo do CP1 e do CP2 sugere que essas dimensões são eficazes para discriminar entre as espécies.
As observações (flores) que estão mais próximas das setas das variáveis são aquelas que têm valores mais altos para essas variáveis. Por exemplo, as flores da espécie setosa estão mais próximas da seta que representa “Sepal Width”, indicando que essa espécie tende a ter uma largura de sépala maior.
As elipses em torno dos pontos de dados para cada espécie indicam a área dentro da qual a maioria das observações daquela espécie cai, fornecendo uma ideia da variabilidade dentro de cada grupo.
O gráfico sugere que as diferentes espécies de iris podem ser separadas principalmente ao longo do CP1, que está fortemente associado ao comprimento da pétala e largura da pétala. CP2 parece capturar variações mais associadas à largura da sépala. A PCA foi eficaz em reduzir a dimensionalidade dos dados enquanto preserva a maior parte da variação que distingue as espécies de flores.
3. Exemplo 2: Dataset USArrests
- Carregamento e Exploração Inicial dos Dados:
# Carregar o dataset
data(USArrests)
# Visualizar as primeiras linhas
head(USArrests) Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
California 9.0 276 91 40.6
Colorado 7.9 204 78 38.7
# Resumo estatístico
summary(USArrests) Murder Assault UrbanPop Rape
Min. : 0.800 Min. : 45.0 Min. :32.00 Min. : 7.30
1st Qu.: 4.075 1st Qu.:109.0 1st Qu.:54.50 1st Qu.:15.07
Median : 7.250 Median :159.0 Median :66.00 Median :20.10
Mean : 7.788 Mean :170.8 Mean :65.54 Mean :21.23
3rd Qu.:11.250 3rd Qu.:249.0 3rd Qu.:77.75 3rd Qu.:26.18
Max. :17.400 Max. :337.0 Max. :91.00 Max. :46.00
- Aplicação da PCA:
# Aplicar PCA
pca_usarrests <- prcomp(USArrests, center = T, scale. = T)- Visualização e Interpretação dos Resultados:
# Gráfico Scree
fviz_eig(pca_usarrests, addlabels = TRUE)cor_cir = fviz_pca_var(pca_usarrests, repel = TRUE)
ggpubr::ggpar(cor_cir,
title = "Gráfico de Correlação",
ggtheme= theme_minimal(),
xlab = "CP1 (62%)", ylab = "CP2 (24,7%)"
)corrplot(var$cos2, is.corr = FALSE)dim12 = fviz_contrib(pca_usarrests, choice = "var", axes = 1:2)
ggpubr::ggpar(dim12,
title = "Contribuição das variáveis para a soma dos componentes 1 e 2",
xlab = "Variáveis", ylab = "Contribuição (%)",
ggtheme = theme_minimal()
)# Visualização dos indivíduos no plano dos dois primeiros componentes principais
fviz_pca_ind(pca_usarrests, col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE )+
labs(title = "", x = "CP1 (62%)", y = "CP2 (24,7%)") +
theme_minimal()# Gráfico de agrupamento (Biplot)
fviz_pca_biplot(pca_usarrests, geom.ind = "point", repel = TRUE,
col.ind = "cos2", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
label = "var", col.var = "black") +
labs(title = "", x = "CP1 (62%)", y = "CP2 (24,7%)") +
theme_minimal()fviz_pca_biplot(pca_usarrests, repel = TRUE,
col.var = "#2E9FDF", # cor das variáveis
col.ind = "#696969",# cor dos indivíduos
) +
labs(title = "", x = "CP1 (62%)", y = "CP2 (24,7%)") +
theme_minimal()Iterpretação do gráfico:
Eixos do Gráfico:
- CP1 (Componente Principal 1): Explica 62% da variabilidade total dos dados. Este eixo está fortemente associado às variáveis relacionadas a crimes violentos, como Murder (Homicídio) e Assault (Agressão). Estados que estão mais à esquerda ao longo deste eixo tendem a ter índices mais altos desses crimes.
- CP2 (Componente Principal 2): Explica 24,7% da variabilidade total dos dados. Este eixo está mais relacionado à variável UrbanPop (População Urbana), diferenciando os estados com base na densidade populacional urbana.
Interpretação dos Estados (com todos os quadrantes):
Quadrante Superior Direito: Inclui estados como Massachusetts, Rhode Island, e Connecticut, que possuem alta densidade populacional urbana (UrbanPop) e baixas taxas de crimes violentos (Murder, Assault).
Quadrante Superior Esquerdo: Inclui estados como California e Nevada, que têm uma alta população urbana, mas se separam em relação às taxas de crimes violentos, que não são tão elevadas quanto nos estados do quadrante inferior esquerdo.
Quadrante Inferior Esquerdo: Inclui estados como Mississippi, North Carolina, e South Carolina, que estão associados a altas taxas de crimes violentos (Murder, Assault) e têm uma população urbana menor.
Quadrante Inferior Direito: Inclui estados como West Virginia e Vermont. Esses estados têm baixa densidade populacional urbana (UrbanPop) e também baixas taxas de crimes violentos. Eles estão posicionados de forma oposta aos estados no quadrante superior esquerdo, indicando um perfil de segurança mais elevado e urbanização menor.
Interpretação das Variáveis:
- UrbanPop (População Urbana): Está mais alinhada com CP2, sugerindo que a densidade populacional urbana dos estados tem uma variação independente das taxas de crimes violentos.
- Murder e Assault: Estão fortemente associadas com CP1, mostrando que estados com altas taxas de homicídios tendem também a ter altas taxas de agressão.
- Rape: Embora esteja representada no gráfico, seu impacto específico se alinha mais com uma combinação de CP1 e CP2, refletindo uma complexidade nas taxas de estupro em relação às outras variáveis.
Neste conjunto de dados, não temos um agrupamento pré-definido, como é o caso do conjunto de dados iris. No entanto, podemos explorar a similaridade entre os indivíduos (neste caso, os estados) e tentar agrupá-los em grupos semelhantes usando uma técnica de agrupamento hierárquico. Para isso, vamos criar um dendrograma utilizando a função fviz_dend no R.
# Calculando a matriz de distâncias entre os estados com base nas coordenadas da PCA
res.dist_us <- dist(pca_usarrests$x)
# Realizando o agrupamento hierárquico com base na matriz de distâncias
res.hc_us <- hclust(res.dist_us)
# Visualizando o dendrograma com 4 grupos
fviz_dend(res.hc_us, k = 4, palette = "jco",
rect = TRUE, show_labels = TRUE) +
labs(title = "Dendrograma de agrupamento", x = "", y = "Distância") +
theme_minimal()Sugestão de materiais de consulta
Aqui estão algumas leituras recomendadas sobre Análise de Componentes Principais (PCA), com links para materiais online que você pode explorar:
- Site do e-book: Principal Component Methods in R: Practical Guide
- Link: sthda.
- Statquest (canal de Joshua Starmer no You tube)
- Link: Statquest.