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.
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)]
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
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
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)
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
)
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
fviz_screeplot(res_ACP, addlabels = TRUE, ylim = c(0, 70))
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
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
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:
—> 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,
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
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
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.