# Cargar paquetes de funciones
install.packages(c('rattle',"corrplot","factoextra","FactoMineR","PerformanceAnalytics"))
library(rattle)
library(factoextra)
library(mclust)
library(FactoMineR)
library(PerformanceAnalytics)
# Importar datos
data(wine, package='rattle')
head(wine)
data<- wine

# 1.Identificar las variables / dataset que queremos reducir
# 13 variables químicas de la composición de diferentes vinos
dataset <- data[2:14]

# 2. Estandarizar los datos
Zdata <- scale(dataset)

# 2.1 Calcular y graficar la correlación
pairs(Zdata) # matrixplot
correlations <- cor(Zdata) # correlation matrix
corrplot(correlations, method="circle") # corrplot
chart.Correlation(Zdata, histogram=TRUE, pch=19) # matrxplot + correlación + histograma


# 3. Aplicar el algoritmo de PCA
res.pca <- PCA(Zdata, graph = TRUE) # algoritmo de PCA
print(res.pca) # resumen de los resultados

# 4. Analizar los resultados
# Crear los gráficos PCA1 vs PCA2 para entender las direcciones
# scatterplot de los dos PCA's
eigenvalues <- res.pca$eig # los valores principales: variancia de cada componente principal
head(eigenvalues[, 1:2])

var_PCA <- res.pca$ind$coord
chart.Correlation(var_PCA, histogram=TRUE, pch=19) # matrxplot + correlación + histograma

barplot(eigenvalues[, 2], names.arg=1:nrow(eigenvalues), 
        main = "Variances",
        xlab = "Principal Components",
        ylab = "Percentage of variances",
        col ="steelblue") # diagrama de barras del porcentaje de información
lines(x = 1:nrow(eigenvalues), eigenvalues[, 2], 
      type="b", pch=19, col = "red") # añado la línea roja 

fviz_screeplot(res.pca) # diagrama de barras con línea (lo mismo que antes)

head(res.pca$var$coord) # coordenadas de las componentes principales

head(res.pca$var$contrib) # contribución de cada coordenada de componentes principales

plot(res.pca, choix = "var") # mapa de direcciones en las dos primeras direcciones principales

fviz_pca_var(res.pca) # mapa de direcciones en las dos primeras direcciones principales


plot(res.pca, choix = "ind") # puntos en las dos direcciones principales

fviz_pca_ind(res.pca, label="none") # puntos en las dos direcciones principales

fviz_pca_biplot(res.pca, 
                habillage = data[,1], addEllipses = TRUE,
                col.var = "red", alpha.var ="cos2",
                label = "var") +
  scale_color_brewer(palette="Dark2")+
  theme_minimal() # puntos en las dos direcciones principales y los clusters


# 5. Analizar los resultados del PCA
# Analizar el % de información de los PCA
fviz_screeplot(res.pca) # diagrama de barras con línea (lo mismo que antes)
results.pca <- princomp(Zdata)
aux = as.data.frame(results.pca$sdev)


# Analizar los vectores principales
# Cuanto podemos reducir el dataset