ANÁLISE DE COMPONENTES PRINCIPAIS(ACP)


A ACP é um método estatístico multivariado que permite transformar um conjunto de variáveis iniciais correlacionadas entre si, num outro conjunto de variáveis não-correlacionadas (ortogonais), as chamadas componentes principais, que resultam de combinações lineares do conjunto inicial.


Leitura do banco de dados

banco_original<-read.table("C:/Users/rui/Documents/MATERIAL - Juaci/Dados Djalma/Cana/PCA dados cana/banco_CANA_0_40.txt", head=T,dec=".")

# Preparação do banco de dados para a ACP
banco_original1 = banco_original[,-c(1,2,3,13:16)]

Resumo Descritivo dos Dados referente ao Banco de Dados sob análise:

summary(banco_original1)
##        S               Ca              Cl              Sat.Al      
##  Min.   :0.010   Min.   :1.110   Min.   :0.01000   Min.   : 0.000  
##  1st Qu.:0.020   1st Qu.:1.450   1st Qu.:0.02750   1st Qu.: 0.660  
##  Median :0.050   Median :1.535   Median :0.04000   Median : 2.990  
##  Mean   :0.105   Mean   :1.616   Mean   :0.03375   Mean   : 3.498  
##  3rd Qu.:0.130   3rd Qu.:1.808   3rd Qu.:0.04000   3rd Qu.: 4.755  
##  Max.   :0.320   Max.   :2.220   Max.   :0.05000   Max.   :14.140  
##        Al               AFL              MR              ECP       
##  Min.   :0.00000   Min.   :3.120   Min.   :0.4300   Min.   :1.790  
##  1st Qu.:0.02250   1st Qu.:3.257   1st Qu.:0.5075   1st Qu.:2.007  
##  Median :0.09000   Median :3.355   Median :0.5800   Median :2.875  
##  Mean   :0.08625   Mean   :3.343   Mean   :0.5931   Mean   :2.916  
##  3rd Qu.:0.11000   3rd Qu.:3.415   3rd Qu.:0.7000   3rd Qu.:3.665  
##  Max.   :0.28000   Max.   :3.580   Max.   :0.7900   Max.   :4.510  
##       ECOT            TCH        
##  Min.   :29.13   Min.   : 70.87  
##  1st Qu.:32.14   1st Qu.: 83.49  
##  Median :36.30   Median : 92.50  
##  Mean   :35.95   Mean   : 90.95  
##  3rd Qu.:39.13   3rd Qu.: 98.63  
##  Max.   :44.52   Max.   :107.17

Tabela com Análise Descritiva: Média, Variância, DP e CV

A tabela abaixo possui como medidas de análise descritiva os valores da média, variância, desvio-padrão e coeficiente de variação (%).

Media     <- round(apply(banco_original1,2,mean),4)
Variancia <- round(apply(banco_original1,2,var),4)
DP        <- sqrt(Variancia)
CV.perc   <- 100*((sqrt(Variancia))/Media)

# Tabela
Tabela_Descritiva <- data.frame(Media,Variancia,DP,CV.perc)
Tabela_Descritiva
##          Media Variancia          DP    CV.perc
## S       0.1050    0.0141  0.11874342 113.088972
## Ca      1.6156    0.0879  0.29647934  18.351036
## Cl      0.0338    0.0002  0.01414214  41.840638
## Sat.Al  3.4981   13.9347  3.73292111 106.712819
## Al      0.0863    0.0062  0.07874008  91.239952
## AFL     3.3431    0.0141  0.11874342   3.551896
## MR      0.5931    0.0132  0.11489125  19.371312
## ECP     2.9156    0.9290  0.96384646  33.058254
## ECOT   35.9525   21.8882  4.67848266  13.012955
## TCH    90.9550  141.0531 11.87657779  13.057641

Análise de Correlação - NOVO FORMATO de LAYOUT

Tabela e Gráfico de correlação linear de Pearson.

# Tabela
matcor <- round(cor(banco_original1), 2)
matcor
##            S    Ca    Cl Sat.Al    Al   AFL    MR   ECP  ECOT   TCH
## S       1.00 -0.41  0.44   0.74  0.72 -0.09  0.34 -0.40 -0.34  0.64
## Ca     -0.41  1.00 -0.18  -0.70 -0.67 -0.10 -0.52  0.50  0.45  0.04
## Cl      0.44 -0.18  1.00   0.49  0.57 -0.21  0.51 -0.62 -0.64  0.42
## Sat.Al  0.74 -0.70  0.49   1.00  0.98  0.09  0.46 -0.41 -0.38  0.42
## Al      0.72 -0.67  0.57   0.98  1.00  0.07  0.44 -0.42 -0.40  0.47
## AFL    -0.09 -0.10 -0.21   0.09  0.07  1.00 -0.02  0.48  0.64  0.18
## MR      0.34 -0.52  0.51   0.46  0.44 -0.02  1.00 -0.75 -0.60 -0.06
## ECP    -0.40  0.50 -0.62  -0.41 -0.42  0.48 -0.75  1.00  0.96  0.08
## ECOT   -0.34  0.45 -0.64  -0.38 -0.40  0.64 -0.60  0.96  1.00  0.08
## TCH     0.64  0.04  0.42   0.42  0.47  0.18 -0.06  0.08  0.08  1.00
# Correlograma
ggcorrplot(matcor, hc.order = TRUE, 
           type = "lower", 
           lab = TRUE, 
           lab_size = 2.5, 
           method="circle", 
           colors = c("tomato2", "white", "springgreen3"), 
           title="Correlograma", 
           ggtheme=theme_bw)


Gráficos da ACP (Mapa Fatorial)

Análise Gráfica dos Componentes Principais por meio do diagrama unitário (Mapa Fatorial das variáveis) com as variáveis analisadas e diagrama com os indivíduos (Mapa Fatorial dos indivíduos).

res_ACP<-PCA(banco_original1, ncp=3) # análise de componentes principais

# Biplot dos indivíduos e variáveis
fviz_pca_biplot(res_ACP, repel = TRUE) 

# Gráfico com a disposição dos Tratamentos
fviz_pca_ind(res_ACP,
             label = "none", # hide individual labels
             habillage = banco_original$Trat, # color by groups
             palette = c("green", "red", "yellow","blue"),
             addEllipses = TRUE # Concentration ellipses
             )


Cálculo dos Autovalores (eigenvalue):

A escolha dos componentes que apresentam “eigenvalues” maior que 1 (eigenvalues > 1) decorre do fato de que, no mínimo, o componente deve explicar a variância de 1 variável utilizada no modelo, uma vez que são variáveis padronizadas.

round(res_ACP[[1]],2)
##         eigenvalue percentage of variance
## comp 1        4.91                  49.15
## comp 2        2.20                  22.00
## comp 3        1.31                  13.06
## comp 4        0.74                   7.42
## comp 5        0.40                   3.99
## comp 6        0.23                   2.27
## comp 7        0.12                   1.17
## comp 8        0.08                   0.80
## comp 9        0.01                   0.10
## comp 10       0.00                   0.04
##         cumulative percentage of variance
## comp 1                              49.15
## comp 2                              71.15
## comp 3                              84.21
## comp 4                              91.64
## comp 5                              95.63
## comp 6                              97.90
## comp 7                              99.06
## comp 8                              99.86
## comp 9                              99.96
## comp 10                            100.00

Gráfico Scree plot

fviz_screeplot(res_ACP, addlabels = TRUE, ylim = c(0, 70)) 


Preparação da tabela com os dados da ACP

A primeira parte consta os autovalores(considerando os dados padronizados) e a percentagem de explicação dos componentes (PC1, PC2 e PC3). A segunda parte mostra a correlação das variáveis com os respectivos componentes, sendo expressos como Dim.1, Dim.2 e Dim.3.

# Preparação da tabela
PC1 <- c(round(res_ACP[[1]][1,1],2),round(res_ACP[[1]][1,2],2))
PC2 <- c(round(res_ACP[[1]][2,1],2),round(res_ACP[[1]][2,2],2))
PC3 <- c(round(res_ACP[[1]][3,1],2),round(res_ACP[[1]][3,2],2))
Variavel <- c("Eigen Value","% Explained")
Parte1 <- data.frame(Variavel,PC1,PC2,PC3)
Parte2 <- round(res_ACP[[2]][[2]][,1:3],3)
Tabela_ACP2 <- list(Parte1,Parte2)
Tabela_ACP2
## [[1]]
##      Variavel   PC1  PC2   PC3
## 1 Eigen Value  4.91  2.2  1.31
## 2 % Explained 49.15 22.0 13.06
## 
## [[2]]
##         Dim.1  Dim.2  Dim.3
## S       0.743  0.402  0.254
## Ca     -0.684 -0.075  0.612
## Cl      0.740 -0.068  0.392
## Sat.Al  0.844  0.418 -0.156
## Al      0.854  0.419 -0.083
## AFL    -0.215  0.688 -0.494
## MR      0.715 -0.266 -0.327
## ECP    -0.806  0.545  0.007
## ECOT   -0.767  0.604 -0.113
## TCH     0.334  0.688  0.564

Teste de Bartlett de Esfericidade

O teste de esfericidade de Bartlett testa se a matriz de correlação é uma matriz identidade, o que indicaria que não há correlação entre os dados. Dessa forma, procura-se para um nível de significância assumido em 5% rejeitar a hipótese nula(H0) de matriz de correlação identidade.

Teste de Hipótese: H0: A matriz de correlação é uma matriz identidade H1: A matriz de correlação NÃO é uma matriz identidade

Regra de Decisão: Se pvalor(p-value) < 0.05, então, REJEITA-SE H0!!!

Bartlett.sphericity.test <- function(x)
{
  method <- "Bartlett's test of sphericity"
  data.name <- deparse(substitute(x))
  x <- subset(x, complete.cases(x)) # Omit missing values
  n <- nrow(x)
  p <- ncol(x)
  chisq <- (1-n+(2*p+5)/6)*log(det(cor(x)))
  df <- p*(p-1)/2
  p.value <- pchisq(chisq, df, lower.tail=FALSE)
  names(chisq) <- "X-squared"
  names(df) <- "df"
  return(structure(list(statistic=chisq, parameter=df, p.value=p.value,
                        method=method, data.name=data.name), class="htest"))
}

# Resultado do Teste de Esfericidade:
Bartlett.sphericity.test(banco_original1)
## 
##  Bartlett's test of sphericity
## 
## data:  banco_original1
## X-squared = 162.29, df = 45, p-value = 3.648e-15

Teste KMO (Kaiser-Meyer-Olkin)

O teste Kaiser-Meyer-Olkin (KMO) é uma estatística que indica a proporção da variância dos dados que pode ser considerada comum a todas as variáveis, ou seja, que pode ser atribuída a um fator comum. Então: quanto mais próximo de 1, melhor o resultado, ou seja, mais adequada é a amostra à aplicação da ACP.

—> Friel (2009) sugere a seguinte escala para interpretar o valor da estatística KMO

Tabela 1. Adequação amostral segundo a medida KMO:

  • Maior que(>) 0,9 — Excelente
  • (0,8; 0,9] — Meritória (ou bom)
  • (0,7; 0,8] — Intermediária (ou mediano)
  • (0,6; 0,7] — Medíocre
  • (0,5; 0,6] — Mísera
  • menor que(<) 0,5 — Inaceitável

—> Outros autores sugerem: A) Pallant (2007) sugere 0,60 como um limite razoável; B) Hair et al. (2006) sugerem 0,50 como patamar aceitável.

matcor <- cor(banco_original1)
matcorp <- partial.cor(banco_original1)
p <- ncol(banco_original1)

idiag <- seq(1, by = p + 1, length = p)
somar2 <- sum((as.numeric(matcor)[-idiag])^2)

# Resultado do KMO:
cat("\n KMO = ",somar2/(somar2 + sum((as.numeric(matcorp$R)[-idiag])^2)))
## 
##  KMO =  0.4501043

ou se preferir,

Aplicando direto a função:

KMO(matcor)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = matcor)
## Overall MSA =  0.45
## MSA for each item = 
##      S     Ca     Cl Sat.Al     Al    AFL     MR    ECP   ECOT    TCH 
##   0.41   0.49   0.53   0.53   0.57   0.19   0.50   0.45   0.42   0.34

Conceito de Comunalidade (cos2)

Cos2: é uma medida que indica a qualidade da representação para variáveis no mapa fatorial (Diagrama Unitário da ACP). A comunalidade é a soma dos quadrados das correlações entre cada variável i e a componente principal j (ou o mesmo que o índice cos2).A soma limita-se ao número do componenentes retidos. As comunalidades (communalities) são quantidades das variâncias (correlações) de cada variável explicada pelos fatores.

Regras básicas: A) Quanto maior a comunalidade, maior será o poder de explicação daquela variável pelo fator; B) Desejamos comunalidades superiores a 0.5, ou seja, superiores a 50%.

round(res_ACP\(var\)cos2[,1:2],3)100 # indicado para gerar 2 dimensões round(res_ACP\(var\)cos2[,1:3],3)100 # indicado para gerar 3 dimensões

1-Como Interpretar: Reter apenas 2 CP é suficiente para explicar cerca de x% da variabilidade da variável_A. round(rowSums(res_ACP\(var\)cos2[,1:2]),3)100 ou data.frame(round(res_ACP\(var\)cos2[,1:2],3)100,Total = round(rowSums(res_ACP\(var\)cos2[,1:2]),3)*100)

2-Como Interpretar: Reter apenas 3 CP é suficiente para explicar cerca de x% da variabilidade da variável_A. round(rowSums(res_ACP\(var\)cos2[,1:3]),3)100 ou data.frame(round(res_ACP\(var\)cos2[,1:3],3)100,Total = round(rowSums(res_ACP\(var\)cos2[,1:3]),3)*100)

3-Como Interpretar: Reter apenas 1 CP é suficiente para explicar cerca de x% da variabilidade da variável_A.

round(res_ACP$var$cos2,3)*100
##        Dim.1 Dim.2 Dim.3
## S       55.2  16.1   6.4
## Ca      46.7   0.6  37.4
## Cl      54.7   0.5  15.4
## Sat.Al  71.3  17.5   2.4
## Al      72.9  17.6   0.7
## AFL      4.6  47.3  24.4
## MR      51.1   7.1  10.7
## ECP     65.0  29.7   0.0
## ECOT    58.8  36.4   1.3
## TCH     11.1  47.4  31.8

Cálculo das Contribuições das variáveis para os componentes principais

As variáveis que são correlacionadas com PC1 e PC2 são as mais importantes para explicar a variabilidade no conjunto de dados. Variáveis que não se correlacionam com nenhum PC ou correlacionadas com as últimas dimensões são variáveis com baixa contribuição e podem ser removidas para simplificar a análise geral.

As contribuições das variáveis na contabilização da variabilidade em uma determinada componente principal são (em porcentagem): “= (variável.cos2 * 100) / (cos2 total da componente)”

# Tabela com as contribuições
round(res_ACP$var$contrib,3)
##         Dim.1  Dim.2  Dim.3
## S      11.241  7.331  4.932
## Ca      9.510  0.254 28.649
## Cl     11.139  0.209 11.760
## Sat.Al 14.507  7.938  1.874
## Al     14.827  7.982  0.528
## AFL     0.941 21.495 18.717
## MR     10.389  3.214  8.180
## ECP    13.221 13.490  0.003
## ECOT   11.959 16.560  0.981
## TCH     2.267 21.527 24.377
# Gráfico Colorido com as Contribuições
fviz_pca_var(res_ACP, col.var="contrib", gradient.cols = c("red","yellow","green"), repel = TRUE # Avoid text overlapping) 
)

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.