diff --git a/Module_correlation.Rmd b/Module_correlation.Rmd
index ca567c15fb330d5b087c47a6ab572e2e37a2eca6..6527a97617ef00604e9c1fee61020403726aa772 100644
--- a/Module_correlation.Rmd
+++ b/Module_correlation.Rmd
@@ -21,6 +21,7 @@ if(!require(DT)) install.packages("DT")
 if(!require(plotly)) install.packages("plotly")
 if(!require(lsr)) install.packages("lsr")
 if(!require(knitr)) install.packages("knitr")
+if(!require(knitr)) install.packages("circlize")
 
 library(GGally)
 library(readr)
@@ -34,6 +35,7 @@ library(DT)
 library(plotly)
 library(lsr)  
 library(knitr)
+library(circlize)
 ```
 
 ```{r setup, include=FALSE}
@@ -44,97 +46,220 @@ knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE)
 ```
 
 
-## 1. Data Import and Interactive Overview
+ 
+ 
+## 1- Data Overview {.tabset}
 
 ```{r data_import, echo=FALSE}
 # Import the design file (CSV) using the path specified in the input parameters.
-annotations <- read.csv(design_file, sep = ",", stringsAsFactors = FALSE)
+annotations <- read.csv("C:/Users/User/Desktop/projet_visualisation/visu_cor/design_WS3.csv", sep = ",", stringsAsFactors = FALSE)
 
 # Display an interactive table to review all variables in the dataset.
 DT::datatable(annotations,
               options = list(pageLength = 10, autoWidth = TRUE),
               caption = "Interactive Data Table: Review the design file")
+```
 
+## Missing Values Table
+```{r data_import, echo=FALSE}
+# Calculate missing values for each column.
+missing_values <- data.frame(
+  Variable = names(annotations),
+  Missing_Count = colSums(is.na(annotations))
+)
+rownames(missing_values) <- NULL
 
-```
 
+# Display an interactive table of missing values.
+DT::datatable(missing_values,
+              options = list(pageLength = nrow(missing_values), autoWidth = TRUE),
+              caption = "Missing Values in the Design File")
 
 
-### Manual Data Classification and Modification
+```
+
 
-## 2. Manual Data Classification and Modification
+Manual Data Classification and Modification
 
 ```{r data_classification, echo=TRUE}
 # After reviewing the dataset via the interactive table, you can decide which variables 
 # should be treated as categorical, which as quantitative, and which ones to display 
 # in the advanced pairs plot.
 
+#  manually modify the classification lists below:
+ categorical_vars <- c("sample", "condition", "animal", "experiment", "extraction")
+ quantitative_vars <- c("volume", "quantity")
+ display_vars <- c("condition", "animal", "experiment", "extraction")
 
-# Print the default classification lists defined in the input parameters:
-cat("Default Categorical Variables: ", paste(categorical_vars, collapse = ", "), "\n")
-cat("Default Quantitative Variables: ", paste(quantitative_vars, collapse = ", "), "\n")
-cat("Default Variables for Advanced Pairs Plot: ", paste(display_vars, collapse = ", "), "\n")
-
-# If needed, manually modify the classification lists below:
-# categorical_vars <- c("sample", "condition", "animal", "experiment", "extraction")
-# quantitative_vars <- c("volume", "quantity")
-# display_vars <- c("condition", "animal", "experiment", "extraction")
 
 ```
 
 
+ 2. Association Matrix
 
+`## 4. Association Matrix (Matrice des liaisons)
 
+```{r association_matrix, echo=FALSE, fig.width=8, fig.height=6}
+# Fonction pour calculer le coefficient de corrélation ratio (η) entre une variable numérique et une variable catégorielle.
+correlationRatio <- function(x, group) {
+  df <- data.frame(x = x, group = group)
+  df <- df[complete.cases(df), ]
+  grandMean <- mean(df$x)
+  ssBetween <- sum(tapply(df$x, df$group, function(xg) length(xg) * (mean(xg) - grandMean)^2))
+  ssWithin  <- sum(tapply(df$x, df$group, function(xg) sum((xg - mean(xg))^2)))
+  eta2 <- ssBetween / (ssBetween + ssWithin)
+  return(sqrt(eta2))  # mesure brute
+}
 
+# Fonction pour calculer le V de Cramér à partir d'un tableau de contingence.
+computeCramersV <- function(tab) {
+  chi2 <- suppressWarnings(chisq.test(tab, correct = FALSE)$statistic)
+  n <- sum(tab)
+  phi2 <- chi2 / n
+  r <- nrow(tab)
+  c <- ncol(tab)
+  phi2corr <- max(0, phi2 - ((c - 1) * (r - 1))/(n - 1))
+  rcorr <- r - ((r - 1)^2)/(n - 1)
+  ccorr <- c - ((c - 1)^2)/(n - 1)
+  return(sqrt(phi2corr / min((ccorr - 1), (rcorr - 1))))
+}
 
-2.1 Automated Conversion for Correlation Analysis
+# Fonction pour calculer l'association entre deux variables (mesure au carré) :
+# - Si les deux variables sont numériques : retourne (corrélation de Pearson)^2.
+# - Si les deux variables sont catégorielles : retourne (V de Cramér)^2.
+# - Si l'une est numérique et l'autre catégorielle : retourne (corrélation ratio)^2.
+computeAssociation <- function(x, y) {
+  if (is.numeric(x) && is.numeric(y)) {
+    return(cor(x, y, use = "complete.obs")^2)
+  } else if (is.factor(x) && is.factor(y)) {
+    return(computeCramersV(table(x, y))^2)
+  } else if (is.numeric(x) && is.factor(y)) {
+    return(correlationRatio(x, y)^2)
+  } else if (is.factor(x) && is.numeric(y)) {
+    return(correlationRatio(y, x)^2)
+  } else {
+    return(NA)
+  }
+}
 
-```{r}
-data_numeric <- annotations %>%
-  mutate(
-    condition = as.numeric(factor(condition)),  # Conversion de 'condition'
-    animal = as.numeric(factor(animal))           # Conversion de 'animal'
-
-    # 'sample' sera exclue du calcul
-  ) %>%
-  select(-sample, -experiment, -extraction)
-```
-3. Visualizations of Correlations and Distributions
-3.1 Correlation Matrix with corrplot
-Figure: Correlation matrix showing pairwise Pearson correlations among quantitative variables.
-```{r}
-if(ncol(data_numeric) > 1){
-  cor_matrix <- cor(data_numeric, use = "complete.obs", method = "pearson")
-  corrplot(cor_matrix, method = "circle", type = "lower",
-           tl.col = "black", tl.cex = 0.8,
-           col = colorRampPalette(c("blue", "white", "red"))(200))
-} else {
-  cat("Not enough numeric columns to compute a correlation matrix.\n")
+# Fonction pour calculer l'association brute (non élevée au carré) entre deux variables.
+computeAssociationRaw <- function(x, y) {
+  if (is.numeric(x) && is.numeric(y)) {
+    return(cor(x, y, use = "complete.obs"))
+  } else if (is.factor(x) && is.factor(y)) {
+    return(computeCramersV(table(x, y)))
+  } else if (is.numeric(x) && is.factor(y)) {
+    return(correlationRatio(x, y))
+  } else if (is.factor(x) && is.numeric(y)) {
+    return(correlationRatio(y, x))
+  } else {
+    return(NA)
+  }
+}
+
+# Fonction pour construire la matrice d'association (valeurs au carré) pour toutes les variables.
+associationMatrix <- function(data) {
+  vars <- names(data)
+  nvar <- length(vars)
+  M <- matrix(NA, nrow = nvar, ncol = nvar, dimnames = list(vars, vars))
+  for (i in seq_len(nvar)) {
+    for (j in seq_len(nvar)) {
+      M[i, j] <- computeAssociation(data[[i]], data[[j]])
+    }
+  }
+  return(M)
+}
+
+# Fonction pour construire la matrice d'association brute (non élevée au carré) pour toutes les variables.
+associationMatrixRaw <- function(data) {
+  vars <- names(data)
+  nvar <- length(vars)
+  M <- matrix(NA, nrow = nvar, ncol = nvar, dimnames = list(vars, vars))
+  for (i in seq_len(nvar)) {
+    for (j in seq_len(nvar)) {
+      M[i, j] <- computeAssociationRaw(data[[i]], data[[j]])
+    }
+  }
+  return(M)
 }
 
+# Préparation du jeu de données mixte :
+# On utilise les variables quantitatives (quantitative_vars) et les variables catégorielles (display_vars)
+# en excluant "sample" qui est un identifiant.
+vars_to_use <- c(quantitative_vars, setdiff(display_vars, "sample"))
+mixed_data <- annotations %>% select(all_of(vars_to_use))
+
+# Conversion des variables catégorielles (définies dans display_vars) en facteurs.
+mixed_data[display_vars] <- lapply(mixed_data[display_vars], as.factor)
+
+# Calcul de la matrice d'association (valeurs au carré).
+assoc_mat <- associationMatrix(mixed_data)
+
+# Calcul de la matrice d'association brute (valeurs non élevées au carré), stockée pour une utilisation ultérieure.
+assoc_mat_raw <- associationMatrixRaw(mixed_data)
+
+# Affichage de la matrice d'association au carré sous forme de tableau statique.
+knitr::kable(assoc_mat, digits = 2, caption = "Matrice des liaisons (valeurs au carré)")
+
+# Vous pouvez utiliser 'assoc_mat_raw' dans un chunk ultérieur pour créer une figure de corrplot par exemple.
 
 
 ```
 
-3.2 Heatmap with ComplexHeatmap
-Figure: Heatmap of the correlation matrix.
-```{r}
-if(ncol(data_numeric) > 1){
-  Heatmap(cor_matrix, name = "Correlation",
-          col = colorRampPalette(brewer.pal(8, "RdYlBu"))(50),
-          column_title = "Heatmap of Correlation Matrix")
-} else {
-  cat("Not enough numeric variables to generate a heatmap.\n")
-}
+## Visualisation 
+## 5. Visualisation de la Matrice des Liaisons (Valeurs Brutes) avec corrplot
+
+```{r assoc_corrplot_raw, echo=FALSE, fig.width=8, fig.height=8}
+# Palette de couleurs allant de bleu (valeurs négatives) à blanc (0) puis à rouge (valeurs positives)
+my_palette_raw <- colorRampPalette(c("blue", "white", "red"))(200)
+
+# Affichage de la matrice d'association brute (assoc_mat_raw) sous forme de cercles colorés.
+# is.corr = FALSE car il ne s'agit pas de corrélations classiques (les mesures sont brutes).
+# cl.lim = c(-1, 1) force l'échelle de couleur à varier de -1 à 1.
+corrplot(assoc_mat_raw,
+         method = "circle",
+         type = "lower",
+         is.corr = FALSE,
+         col = my_palette_raw,
+         cl.lim = c(-1, 1),
+         tl.col = "black",
+         tl.cex = 0.8,
+         mar = c(0, 0, 2, 0),
+         title = "Matrice des liaisons (Valeurs Brutes)")
+
+
+```
 
 
+## 6. Heatmap de la Matrice des Liaisons (Valeurs Brutes)
+
+```{r heatmap_raw, echo=FALSE, fig.width=8, fig.height=8}
+
+
+
+# Définition d'une palette de couleurs pour une échelle de -1 à 1.
+col_fun <- colorRamp2(c(-1, 0, 1), c("blue", "white", "red"))
+
+# Création de la heatmap en utilisant la matrice des associations brutes.
+Heatmap(assoc_mat_raw, 
+        name = "Association",
+        col = col_fun,
+        column_title = "Heatmap de la Matrice des Liaisons (Valeurs Brutes)",
+        heatmap_legend_param = list(title = "Association", 
+                                    at = c(-1, 0, 1), 
+                                    labels = c("-1", "0", "1"))
+)
+
 ```
 
+
+
 3.3 Pairs Plot of Numeric Variables
 Figure: Pairs plot (scatterplot matrix) of quantitative variables.
 
 
 ```{r}
+
 if(ncol(num_data) > 1){
   ggpairs(num_data, title = "Pairs Plot of Numeric Variables", progress = FALSE)
 } else {
@@ -334,96 +459,3 @@ balanced_annotations <- annotations %>%
 cat("Subsampled to", min_count, "samples per condition.\n")
 ```
 
-
-
-## 4. Association Matrix: Matrice des liaisons
-
-```{r association_matrix, echo=FALSE, fig.width=8, fig.height=6}
-# --- Définition des fonctions d'association ---
-
-# 1. Fonction pour calculer le coefficient de corrélation ratio (η) entre une variable numérique et une variable catégorielle
-correlationRatio <- function(x, group) {
-  df <- data.frame(x, group)
-  df <- df[complete.cases(df), ]
-  x <- df$x
-  group <- df$group
-  grandMean <- mean(x)
-  # Somme des carrés entre les groupes
-  ssBetween <- tapply(x, group, function(xg) length(xg) * (mean(xg) - grandMean)^2)
-  ssBetween <- sum(ssBetween)
-  # Somme des carrés dans les groupes
-  ssWithin <- tapply(x, group, function(xg) sum((xg - mean(xg))^2))
-  ssWithin <- sum(ssWithin)
-  eta2 <- ssBetween / (ssBetween + ssWithin)
-  return(sqrt(eta2))
-}
-
-# 2. Fonction pour calculer le V de Cramér à partir d'un tableau de contingence
-computeCramersV <- function(tab) {
-  # Calcul du chi2 sans correction de continuité
-  chi2 <- suppressWarnings(chisq.test(tab, correct = FALSE)$statistic)
-  n <- sum(tab)
-  phi2 <- chi2 / n
-  r <- nrow(tab)
-  c <- ncol(tab)
-  # Correction pour éviter des valeurs négatives
-  phi2corr <- max(0, phi2 - ((c - 1) * (r - 1)) / (n - 1))
-  rcorr <- r - ((r - 1)^2) / (n - 1)
-  ccorr <- c - ((c - 1)^2) / (n - 1)
-  return(sqrt(phi2corr / min((ccorr - 1), (rcorr - 1))))
-}
-
-# 3. Fonction pour calculer l'association entre deux variables :
-#    - Si les deux variables sont numériques : corrélation de Pearson.
-#    - Si les deux variables sont catégorielles : V de Cramér (via computeCramersV).
-#    - Si l'une est numérique et l'autre catégorielle : corrélation ratio (η).
-computeAssociation <- function(x, y) {
-  if (is.numeric(x) && is.numeric(y)) {
-    return(cor(x, y, use = "complete.obs"))
-  } else if (is.factor(x) && is.factor(y)) {
-    tab <- table(x, y)
-    return(computeCramersV(tab))
-  } else if (is.numeric(x) && is.factor(y)) {
-    return(correlationRatio(x, y))
-  } else if (is.factor(x) && is.numeric(y)) {
-    return(correlationRatio(y, x))
-  } else {
-    return(NA)
-  }
-}
-
-# 4. Fonction pour construire la matrice des liaisons pour toutes les variables d'un jeu de données
-associationMatrix <- function(data) {
-  vars <- names(data)
-  nvar <- length(vars)
-  M <- matrix(NA, nrow = nvar, ncol = nvar, dimnames = list(vars, vars))
-  for (i in seq_len(nvar)) {
-    for (j in seq_len(nvar)) {
-      M[i, j] <- computeAssociation(data[[i]], data[[j]])
-    }
-  }
-  return(M)
-}
-
-# --- Préparation du jeu de données pour la matrice d'association ---
-# On utilise les variables quantitatives (par exemple, "volume", "quantity") et 
-# les variables catégorielles définies dans display_vars (excluant "sample").
-mixed_vars <- c(quantitative_vars, setdiff(display_vars, "sample"))
-mixed_data <- annotations %>% select(all_of(mixed_vars))
-
-# S'assurer que les variables catégorielles sont bien de type factor
-for (var in display_vars) {
-  if (var %in% names(mixed_data)) {
-    mixed_data[[var]] <- as.factor(mixed_data[[var]])
-  }
-}
-
-# Calcul de la matrice des liaisons
-assoc_mat <- associationMatrix(mixed_data)
-
-# Affichage de la matrice sous forme de tableau
-knitr::kable(assoc_mat, digits = 2, caption = "Association Matrix (Matrice des liaisons)")
-
-
-
-```