# 0. Instalar y cargar los paquetes
# Lista de paquetes de funciones a instalar
.packages = c("FactoMineR","factoextra","corrplot","PerformanceAnalytics")

# Instala los paquetes sinó los tienes instalados
.inst <- .packages %in% installed.packages()
if(length(.packages[!.inst]) > 0) install.packages(.packages[!.inst])

# CARGAR PAQUETES O CREAR FUNCIONES
#*******************************************************************************
# Carga los paquetes sinó los tienes cargados
lapply(.packages, require, character.only=TRUE)
#-------------------------------------------------------------------------------


# 1. Leer los datos y estandarizar
my_data <- scale(iris[,-5])

# 2. Exploración de datos
my_data.stats <- data.frame(
  Min = apply(my_data, 2, min), 
  Q1 = apply(my_data, 2, quantile, 1/4), 
  Med = apply(my_data, 2, median), 
  Mean = apply(my_data, 2, mean), 
  Q3 = apply(my_data, 2, quantile, 3/4), 
  Max = apply(my_data, 2, max) 
) # resumen numérico: cuartiles, mediana
my_data.stats <- round(my_data.stats, 1)
head(my_data.stats)

cor.mat <- round(cor(my_data),2) # matriz de correlación
head(cor.mat)

cov.mat <- cov(my_data) # matriz de covarianza
head(cov.mat)

corrplot(cor.mat, type="upper", order="hclust", 
         tl.col="black", tl.srt=45) # matriz de correlación

chart.Correlation(my_data, histogram=TRUE, pch=19) # matrxplot + correlación + histograma


# 3. Análisis de componentes principales (PCA)
res.pca <- PCA(my_data, graph = FALSE) # algoritmo de PCA
print(res.pca) # resumen de los resultados

# 4. Analizar los resultados
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 = iris$Species, 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


