Analisis de componentes principales. El presente traller tiene como objetivo evaluar un set de datos obtenidos en relación al perfil ó grado de tostión del café.
library(readxl)
#Cargamos los datos
dfcie_data = read_excel("Cielabch_tueste_cafe.xlsx")
head(dfcie_data)
## # A tibble: 6 × 6
## L a b tueste c h
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 15.2 23.7 22.0 verde 32.3 42.9
## 2 12.3 20.8 21.0 verde 29.6 45.3
## 3 13.5 23.3 23.9 verde 33.4 45.7
## 4 13.6 21.1 20.4 verde 29.3 44.1
## 5 13.3 19.5 20.7 verde 28.5 46.7
## 6 12.4 21.9 20.8 verde 30.2 43.6
#Ordenamos las columnas del dataframa
names(dfcie_data)
## [1] "L" "a" "b" "tueste" "c" "h"
dfcie_sorted =dfcie_data [,c(1,2,3,5,6,4)]
names (dfcie_sorted)
## [1] "L" "a" "b" "c" "h" "tueste"
library(ggbiplot)
## Loading required package: ggplot2
## Loading required package: plyr
## Loading required package: scales
## Loading required package: grid
# Remuevo la columna 6, porque es una etiqueta relaciona a la tostión y se usa la función de prcomp(Principal components Analysis)
dfcie_sorted.pca = prcomp(dfcie_sorted[,c(1:5)], center = TRUE, scale=TRUE)
#Se genera un resumen del análsis PCA
summary(dfcie_sorted.pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5
## Standard deviation 1.9631 0.8961 0.58485 0.03379 0.002343
## Proportion of Variance 0.7708 0.1606 0.06841 0.00023 0.000000
## Cumulative Proportion 0.7708 0.9314 0.99977 1.00000 1.000000
#Representación de la variables latentes
plot(dfcie_sorted.pca$x[,1], pch = 16,
col=as.factor(dfcie_sorted$tueste))
legend("topright", legend= unique(dfcie_sorted$tueste),col=1:4, pch=16, cex =1)
#En el presente gŕafico se observan tres cluster, el primero agrupa la tostión oscura. EL segundo representa la tostión verde, e interesantemente la tostión clara y media se agrupan en un solo cluster.
#Ahora hacemos la gráfica de los dos variables latentes PC1 y PC2. En este se observa que la tostión verde tiene una agrupación mientras que las otras tostiones se agrupan en otro cluster.
plot(dfcie_sorted.pca$x[,c(1,2)], pch = 16,
col=as.factor(dfcie_sorted$tueste))
legend("topright", legend= unique(dfcie_sorted$tueste),col=1:4, pch=16, cex =1)
PCA con ggbiplot: Los biplots ayudan en la visualización del resultado del PCA. Para la interpretación de este biplot se deben considerar algunos elementos como:
En el presente ejemplo se observa que la variable b y c tienen la mayor contribución al componente 1. Además las variables a, b y c son variables altamente correlacionadas. Mientras que la variable h esta más distante y es casi perpendicular a la varaible a por lo tnato no estan correlacionadas.
En cuanto a la varianza el componente 1 (PC1) explica el 77.1% de la varianza, mientras que el componente 2 (PC2) explica el 16.1%. Por lo tanto se esta explicando el 93.2% de la varianza en el conjunto de datos.
library(ggbiplot)
ggbiplot(dfcie_sorted.pca)+
geom_hline(yintercept = 0)+
geom_vline(xintercept = 0)
#Ahora incluimos las etiquetas de cada uno de los datos con la función labels
ggbiplot(dfcie_sorted.pca, labels=rownames(dfcie_sorted))
#En este caso activamos la función ellipse para dibujar un elipse para cada grupo
ggbiplot(dfcie_sorted.pca,ellipse=TRUE,
groups=dfcie_sorted$tueste)
#En este caso con la función choices para elegir los componentes a gráficar.Aqui se gráficaron el compoente 1 y 5.
#Se destaca que el componente 5 no explica la varianza en el conjunto de datos.
ggbiplot(dfcie_sorted.pca,ellipse=TRUE,choices=c(1,5),
labels=rownames(dfcie_sorted[,1:5]), groups=dfcie_sorted$tueste)
#Al activar la función circle se grafica un circulo color verde el cual indica la correlación
ggbiplot(dfcie_sorted.pca,ellipse=TRUE,circle=TRUE,
labels=rownames(dfcie_sorted[,1:5]), groups=dfcie_sorted$tueste)
Clustering Para complementar el análisis de componentes principales, ahora aplicaremos el análisis de clustering. Inicialmente se emplea la libreria factoextra para estimar el número óptimo de cluster en el conjunto de datos. Posteriomente se presenta el analisis de clúster para cada variable empleando el método de K-means, y luego entre las dos mejores variables.
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
M = dfcie_sorted[,c(1:5)]
Ms=scale(M)
fviz_nbclust(Ms,
FUNcluster = kmeans,
method = 'gap_stat',
diss = get_dist(Ms,
'euclidean'))
Cluster para cada variables
#Cluster para la variables a
M = dfcie_sorted[ , c('a')]
Ms = scale(M)
clus_a = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_a$cluster)
##
## 1 2 3
## claro 2 0 28
## medio 3 27 0
## oscuro 9 21 0
## verde 23 1 6
#Cluster para la variables b
M = dfcie_sorted[ , c('b')]
Ms = scale(M)
clus_b = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_b$cluster)
##
## 1 2 3
## claro 0 0 30
## medio 1 29 0
## oscuro 6 24 0
## verde 27 3 0
#Cluster para la variables c
M = dfcie_sorted[ , c('c')]
Ms = scale(M)
clus_c = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_c$cluster)
##
## 1 2 3
## claro 29 0 1
## medio 0 28 2
## oscuro 0 25 5
## verde 0 2 28
#Cluster para la variables h
M = dfcie_sorted[ , c('h')]
Ms = scale(M)
clus_h = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_h$cluster)
##
## 1 2 3
## claro 0 3 27
## medio 13 7 10
## oscuro 10 13 7
## verde 10 17 3
#Cluster para la variables L
M = dfcie_sorted[ , c('L')]
Ms = scale(M)
clus_L = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_L$cluster)
##
## 1 2 3
## claro 30 0 0
## medio 0 10 20
## oscuro 0 2 28
## verde 0 29 1
Evaluando dos variables
#Cluster para las variables L y b(b es la mejor variable)
M = dfcie_sorted[ , c('L', 'b')]
Ms = scale(M)
clus_L_b = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_L_b$cluster)
##
## 1 2 3
## claro 30 0 0
## medio 0 30 0
## oscuro 0 30 0
## verde 0 0 30
#Cluster para las variables L y c (es la segunda mejor variable)
M = dfcie_sorted[ , c('L', 'c')]
Ms = scale(M)
clus_L_c = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_L_c$cluster)
##
## 1 2 3
## claro 0 30 0
## medio 0 0 30
## oscuro 0 0 30
## verde 30 0 0
#Cluster para las variables b y c
M = dfcie_sorted[ , c('b', 'c')]
Ms = scale(M)
clus_a_b = kmeans(Ms, 3)
#Matriz de confusión
table(dfcie_sorted$tueste,
clus_a_b$cluster)
##
## 1 2 3
## claro 30 0 0
## medio 0 28 2
## oscuro 0 24 6
## verde 0 2 28
Conclusión: De acuerdo a los análisis realizados de PCA las variable b y c tienen la mayor contribución al componente 1. Además las variables a, b y c son variables altamente correlacionadas. Mientras que la variable h esta más distante y es casi perpendicular a la variable a por lo tanto no hay alta correlación. Al complementar estos análisis con clustering se encuentra que al emplear la variables con mayor contribución al componente como lo es la varible c junto con la L la clasificación de cada uno de los cluster asigna 30 elementos en cada caso.