# -----------------------------------------------------------------------------
# 1. INSTALLATION ET CHARGEMENT DES PACKAGES
# -----------------------------------------------------------------------------

packages <- c("FactoMineR", "factoextra", "corrplot", "ggplot2", 
              "ggrepel", "reshape2", "dplyr", "xtable", "stargazer")

new_packages <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)

lapply(packages, require, character.only = TRUE)

# -----------------------------------------------------------------------------
# 2. LECTURE ET PRÉPARATION DES DONNÉES
# -----------------------------------------------------------------------------

# Lecture des données
donnees <- read.csv("100-individus.csv", header = TRUE, sep = ",", 
                    stringsAsFactors = TRUE, fileEncoding = "UTF-8")

# Séparer les variables quantitatives (actives) et qualitatives (illustratives)
variables_quantitatives <- sapply(donnees, is.numeric)
# Variables quantitatives pour l'ACP (sans MouB)
donnees_quant <- donnees[, variables_quantitatives, drop = FALSE]

# Exclure MouB si elle est devenue numérique
donnees_quant <- donnees_quant[, !colnames(donnees_quant) %in% "MouB", drop = FALSE]

# Extraire la variable qualitative MouB séparément
moub_var <- donnees$MouB
# Standardisation des données quantitatives
donnees_standardisees <- scale(donnees_quant)
cor(donnees_standardisees)
# -----------------------------------------------------------------------------
# 3. RÉALISATION DE L'ACP AVEC VARIABLE QUALITATIVE ILLUSTRATIVE
# -----------------------------------------------------------------------------

# Solution 1 : Créer un dataframe complet avec toutes les variables
donnees_completes <- data.frame(donnees_standardisees, MouB = moub_var)

# ACP avec variable qualitative illustrative 
resultat_acp <- PCA(donnees_completes,
                    scale.unit = TRUE,  # Les données sont déjà standardisées
                    quali.sup = ncol(donnees_completes),  # Dernière colonne = MouB
                    ncp = ncol(donnees_quant),
                    graph = FALSE)
# On affecte à la variable res l'ensemble des résultats de l'ACP
resultat_acp
res<-resultat_acp
#png("graphiques/eboulis_valeurs_propres.png", width = 1000, height = 800, res = 150)
fviz_eig(resultat_acp, addlabels = TRUE, ylim = c(0, 50),
         barfill = "steelblue", barcolor = "steelblue",
         main = "Éboulis des valeurs propres")
res$eig
resultat_acp$var$cor
             title = "Contributions des variables à la Dimension 2")                  
fviz_contrib(resultat_acp, choice = "var", axes = 1, top = 10,
             fill = "steelblue", color = "black",
             title = "Contributions des variables à la Dimension 1")
fviz_contrib(resultat_acp, choice = "var", axes = 2, top = 10,
             fill = "steelblue", color = "black",
             title = "Contributions des variables à la Dimension 2")
fviz_pca_var(resultat_acp,
             col.var = "cos2",
             gradient.cols = c("blue", "yellow", "red"),
             select.var = list(cos2 = 0.5),  # Sélectionner les variables avec cos² > 0.5
             repel = TRUE,
             title = "Variables avec Cos² > 0.5")
ggsave("mon_graphique.png", width = 10, height = 8, dpi = 300)                               
