diff --git a/000010.png b/000010.png new file mode 100644 index 0000000..e9d07c1 Binary files /dev/null and b/000010.png differ diff --git a/Projet.Rmd b/Projet.Rmd index 15fb32f..f21af53 100644 --- a/Projet.Rmd +++ b/Projet.Rmd @@ -1,8 +1,8 @@ --- title: "Projet" output: - pdf_document: default html_document: default + pdf_document: default date: "2024-12-04" --- @@ -21,10 +21,13 @@ library(dplyr) library(tidyr) library(dbscan) library(klaR) +library(clusterSim) +library(circlize) ``` ```{r} set.seed(1234) +.Random.seed = 1234 T = read.table("DataProjet3MIC-2425.txt",header=TRUE,sep=";") T$ExpT1 = as.factor(T$ExpT1) T$ExpT2 = as.factor(T$ExpT2) @@ -37,11 +40,10 @@ str(T) levels(T$ExpT1) ``` -# A REFAIRE LES ANALYSES, JAVAIS PAS VU QUE T3 ETAIT UNE COMBINAISON DE T1 ET T2 # Contenu du jeu de données : -- 3 variables qualitatives nominales représentant l'expression du gêne $$g$$ dont les modalités sont $$\{"sur","sous","non"\}$$. chaque variable correspond respectivement à la différence d'expression du gêne mesurée à la 6èeme heure lors du traitement $$T \in \{T1,T2,T3\}$$ +- 3 variables qualitatives nominales représentant l'expression du gêne $$g$$ dont les modalités sont $$\{"sur","sous","non"\}$$. chaque variable correspond respectivement à la différence d'expression du gêne mesurée à la 6ème heure lors du traitement $$T \in \{T1,T2,T3\}$$ en moyenne, sur les réplicats $$\{R1,R2\}$$ - $$3*6 + 3*6 = 36$$ variables quantitatives continues représentant les effets des traitements sur l'expression des gênes T1 T2 et T3 à 1h,2h,3h,4h,5h,6h après l'administration pour les replicats R1 et R2, par rapport à leur expression à T=0 ( sans traitement). @@ -51,68 +53,36 @@ levels(T$ExpT1) # Analyse unidimentionnelle : -### LES 3 PROCHAINS PLOTS N'APPORTENT RIEN PAR RAPPORT AUX HISTOGRAMMES, JE LES AI DONC CACHES -### Expression des gênes lors du traitement T1 -```{r,echo=FALSE,results = FALSE,message=FALSE,warning=FALSE,fig.show='hide'} +> LES 3 PROCHAINS PLOTS N'APPORTENT RIEN PAR RAPPORT AUX HISTOGRAMMES, JE LES AI DONC CACHES + +## Expression des gênes lors des traitements T1,T2 et T3 + +Nous avons réalisé 3 histogrammes pour visualiser les effectifs des gènes en fonction de leur expression relative moyenne à 6h suite aux traitements T1,T2 et T3, cette moyenne est représenté par les variables qualitatives nominales ExpT1,ExpT2 et ExpT3 + +```{r,fig.cap="Visualualisation des expressions relative des gènes lors du traitement T1,T2 et T3"} g1<-ggplot(T, aes(x=T$ExpT1))+ geom_bar()+ ylab("Effectifs")+ggtitle("Effectifs") -g2<-ggplot(T, aes(x = T$ExpT1)) + - geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences") -df <- data.frame(group = levels(T$ExpT1), - value = as.vector(table(T$ExpT1))/nrow(T)) -g3<-ggplot(df, aes(x="", y=value, fill=group))+ - geom_bar(width = 1, stat = "identity")+ - coord_polar("y", start=0)+ - theme(legend.position="bottom") -grid.arrange(g3,g1,g2,ncol=3,top=textGrob("Visualualisation des expressions relative des gènes lors du traitement T1")) -``` - -### Expression des gênes lors du traitement T2 -```{r,echo=FALSE,results = FALSE,message=FALSE,warning=FALSE,fig.show='hide'} -g1<-ggplot(T, aes(x=T$ExpT2))+ +g2<-ggplot(T, aes(x=T$ExpT2))+ geom_bar()+ ylab("Effectifs")+ggtitle("Effectifs") -g2<-ggplot(T, aes(x = T$ExpT2)) + - geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences") -df <- data.frame(group = levels(T$ExpT2), - value = as.vector(table(T$ExpT2))/nrow(T)) -g3<-ggplot(df, aes(x="", y=value, fill=group))+ - geom_bar(width = 1, stat = "identity")+ - coord_polar("y", start=0)+ - theme(legend.position="bottom") -grid.arrange(g3,g1,g2,ncol=3,top=textGrob("Visualualisation des expressions relative des gènes lors du traitement T2")) -``` - - -### Expression des gênes lors du traitement T3 -```{r,echo=FALSE,results = FALSE,message=FALSE,warning=FALSE,fig.show='hide'} -g1<-ggplot(T, aes(x=T$ExpT3))+ +g3<-ggplot(T, aes(x=T$ExpT3))+ geom_bar()+ ylab("Effectifs")+ggtitle("Effectifs") -g2<-ggplot(T, aes(x = T$ExpT3)) + - geom_bar(aes(y = (..count..)/sum(..count..)))+ylab("")+ggtitle("Frequences") -df <- data.frame(group = levels(T$ExpT3), - value = as.vector(table(T$ExpT3))/nrow(T)) -g3<-ggplot(df, aes(x="", y=value, fill=group))+ - geom_bar(width = 1, stat = "identity")+ - coord_polar("y", start=0)+ - theme(legend.position="bottom") -grid.arrange(g3,g1,g2,ncol=3,top=textGrob("Visualualisation des expressions relative des gènes lors du traitement T3")) +grid.arrange(g1,g2,g3,ncol=3,top=textGrob("Visualualisation des expressions relative des gènes lors du traitement T1,T2 et T3")) ``` -### Analyse de de ces 3 variables -On remarque que les traitements T2 et T3 semblent avoir un effet assez similaire sur l'expression des gênes relevée à la 6ème heure : Une polarisation entre la sous expression et la sur expression qui se partagent presque la totalité des relevés, avec un poids légèrement superieur à 55% pour la sur-expression au détriment de la sous-expression. Cela a peut être un rapporrt avec le fait que T3 est une combinaison des traitement T1 et T2. + +### Analyse des résultats +On remarque que les traitements T2 et T3 semblent avoir un effet assez similaire sur l'expression des gênes relevée à la 6ème heure : Une polarisation entre la sous expression et la sur expression qui se partagent presque la totalité des relevés, avec un poids légèrement superieur à 55% pour la sur-expression au détriment de la sous-expression. Cela a peut être un rapport avec le fait que T3 est une combinaison des traitement T1 et T2. T1 quant à lui se démarque grandement par une large majorité (Un peu plus de 80%), de gêne n'ayant pas changé d'expression après 6h de traitement. -### Expression relative des gênes mesurées à intervalle régulier - -#### Traitement T1 -```{r, fig.height=5,fig.cap="Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T1"} +## Expression relative des gênes mesurées à intervalle régulier +```{r, fig.height=5,fig.cap="Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T1",echo=FALSE,results = FALSE,message=FALSE,warning=FALSE,fig.show='hide'} #apply(T[-c(37:39)],2,function(col){ # which(T == col) #hist(col, main = paste("Histogram of", colnames(T)[which(T == col)[2]]), @@ -124,27 +94,25 @@ ggplot(T_long, aes(x = value)) + facet_wrap(~variable,scales = "free",ncol=6) + labs(title = "Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T1", x = "Valeurs", y = "Effectifs") ``` -### Traitement T2 -```{r, fig.height=5,fig.cap="Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T3"} +```{r, fig.height=5,fig.cap="Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T2",echo=FALSE,results = FALSE,message=FALSE,warning=FALSE,fig.show='hide'} T_long = melt(T[c(7,8,9,10,11,12,25,26,27,28,29,30)]) ggplot(T_long, aes(x = value)) + geom_histogram(binwidth = 1, fill = "blue", color = "black", alpha = 0.7) + facet_wrap(~variable,scales = "free",ncol=6) + labs(title = "Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T2", x = "Valeurs", y = "Effectifs") ``` -### Traitement T3 -```{r, fig.height=5,fig.cap="Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T3"} +```{r, fig.height=5,fig.cap="Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T3",echo=FALSE,results = FALSE,message=FALSE,warning=FALSE,fig.show='hide'} T_long = melt(T[c(13,14,15,16,17,18,31,32,33,34,35,36)]) ggplot(T_long, aes(x = value)) + geom_histogram(binwidth = 1, fill = "blue", color = "black", alpha = 0.7) + facet_wrap(~variable,scales = "free",ncol=6) + labs(title = "Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T3", x = "Valeurs", y = "Effectifs") ``` +Lors d'une analyse supplémentaire des fréquences d'expression des gènes à chaque heure et chaque traitement, nous observons bien une concordance avec l'analyse des expressions des gênes figure . En effet, les histogrammes en rapport avec le traitement 1 sont très nettement regroupés vers 0, soit une expression relative des gênes qui ne change peu. Les histogrammes pour les relevés des variables en lien avec T2 et T3 sont tout aussi similaires aux résultats précédents : La variance de l'expression relative des gênes est plus élevée et on observe bien une polarisation "sous-exprimé-"sur-exprimé" sur les relevés à 6h. Attention, ici on observe aussi que T2 et T3 n'ont pas leur effet caractéristique directement : à 2h, la distribution de l'expression des genes semble presque Gaussienne, et à 1h elle ne se distingue pas beaucoup du traitement 1 avec un regroupement sur 0. +c.f le document RMarkdown pour les histogrammes. -Nous observons bien une concordance avec l'analyse des expressions des gênes figure . EN effet, les histogrammes en rapport avec le traitement 1 sont très nettement regroupés vers 0, soit une expression relative des gênes qui ne change peu. Les histogrammes pour les relevés des variables en lien avec T2 et T3 sont tout aussi similaires aux résultats précédents : La variance de l'expression relative des gênes est plus élevée et on observe bien une polarisation "sous-exprimé-"sur-exprimé" sur les relevés à 6h. Attention, ici on observe aussi que T2 et T3 n'ont pas leur effet caractéristique directement : à 2h, la distribution de l'expression des genes semble presque Gaussienne, et à 1h elle ne se distingue pas beaucoup du traitement 1 avec un regroupement sur 0. - -### boxplots pour faire joli +## boxplots pour faire joli ```{r} ggplot(melt(T[1:18]),aes(x=variable,y=value))+ geom_boxplot()+ theme(axis.text.x = element_text(angle=90, vjust = 0.5, hjust = 1)) @@ -152,115 +120,94 @@ ggplot(melt(T[19:36]),aes(x=variable,y=value))+ geom_boxplot() + theme(axis.text.x = element_text(angle=90, vjust = 0.5, hjust = 1)) ``` -On voit que même sans réduire les données, chaque variable s'exprime environ avec la même intensité donc pas besoin de centrer réduire lors de l'ACP +L'analyse des boxplots montre que, même sans effectuer de réduction des données, chaque variable présente une dispersion similaire, ce qui suggère qu'il n'est pas nécessaire de procéder à un centrage et à une réduction avant de réaliser l'Analyse en Composantes Principales. + +# Analyse bi-dimensionnelle ## Boxplots par paire de variables (qualitative,quantitative) -```{r} +Nous avons ensuite générés des graphes contenants des boxplots d'expression des gènes moyennes d'un traitement par rapport à l'expression des gènes à 6h sur un autre traitement. +Cela nous a permis d'identifier les changements d'expressions de chaque groupes de gènes sur, sous ou non-exprimés entre un traitement et les deux autres. +Les deux réplicats ayant des résultats très similaires, pour ne pas surcharger le rapport nous avons décidé d'afficher seulement le réplicat R1. + +```{r,fig.cap="Boxplots par paire de variables (qualitative,quantitative)" ,warning=FALSE} # traitement 1 corrélation avec l'expression des genes du T1 T2 et T3 -#ggplot(T,aes(y=T$T1_6H_R1,x=T$ExpT1))+ - #geom_boxplot() -#ggplot(T,aes(y=T$T1_6H_R2,x=T$ExpT1))+ - #geom_boxplot() -ggplot(T,aes(y=T$T1_6H_R1,x=T$ExpT2))+ +p1 = ggplot(T,aes(y=T$T1_6H_R1,x=T$ExpT2))+ geom_boxplot() -ggplot(T,aes(y=T$T1_6H_R2,x=T$ExpT2))+ - geom_boxplot() -ggplot(T,aes(y=T$T1_6H_R1,x=T$ExpT3))+ - geom_boxplot() -ggplot(T,aes(y=T$T1_6H_R2,x=T$ExpT3))+ +#ggplot(T,aes(y=T$T1_6H_R2,x=T$ExpT2))+ +# geom_boxplot() +p2 = ggplot(T,aes(y=T$T1_6H_R1,x=T$ExpT3))+ geom_boxplot() +#ggplot(T,aes(y=T$T1_6H_R2,x=T$ExpT3))+ +# geom_boxplot() # traitement 2 corrélation avec l'expression des genes du T1 T2 et T3 -ggplot(T,aes(y=T$T2_6H_R1,x=T$ExpT1))+ +p3 = ggplot(T,aes(y=T$T2_6H_R1,x=T$ExpT1))+ geom_boxplot() -ggplot(T,aes(y=T$T2_6H_R2,x=T$ExpT1))+ - geom_boxplot() -#ggplot(T,aes(y=T$T2_6H_R1,x=T$ExpT2))+ - #geom_boxplot() -#ggplot(T,aes(y=T$T2_6H_R2,x=T$ExpT2))+ - #geom_boxplot() -ggplot(T,aes(y=T$T2_6H_R1,x=T$ExpT3))+ - geom_boxplot() -ggplot(T,aes(y=T$T2_6H_R2,x=T$ExpT3))+ +#ggplot(T,aes(y=T$T2_6H_R2,x=T$ExpT1))+ +# geom_boxplot() +p4 = ggplot(T,aes(y=T$T2_6H_R1,x=T$ExpT3))+ geom_boxplot() +#ggplot(T,aes(y=T$T2_6H_R2,x=T$ExpT3))+ +# geom_boxplot() # traitement 3 corrélation avec l'expression des genes du T1 T2 et T3 -ggplot(T,aes(y=T$T3_6H_R1,x=T$ExpT1))+ +p5 = ggplot(T,aes(y=T$T3_6H_R1,x=T$ExpT1))+ geom_boxplot() -ggplot(T,aes(y=T$T3_6H_R2,x=T$ExpT1))+ +#ggplot(T,aes(y=T$T3_6H_R2,x=T$ExpT1))+ +# geom_boxplot() +p6 = ggplot(T,aes(y=T$T3_6H_R1,x=T$ExpT2))+ geom_boxplot() -ggplot(T,aes(y=T$T3_6H_R1,x=T$ExpT2))+ - geom_boxplot() -ggplot(T,aes(y=T$T3_6H_R2,x=T$ExpT2))+ - geom_boxplot() -#ggplot(T,aes(y=T$T3_6H_R1,x=T$ExpT3))+ - #geom_boxplot() -#ggplot(T,aes(y=T$T3_6H_R2,x=T$ExpT3))+ - #geom_boxplot() - +#ggplot(T,aes(y=T$T3_6H_R2,x=T$ExpT2))+ +# geom_boxplot() +# Utiliser grid.arrange pour afficher les graphiques dans une grille +grid.arrange(p1, p3, p6, p2, p4, p5, ncol = 3) ``` ### Analyse des boxplots : -- traitement 1 (réplicats 1 et 2) -Les genes sur-exprimés au T1 sont non-exprimé durant le T2. -Il est difficile d'observer une catégorie de genes de T1 qui se soient sous exprimés dans T2. De même pour la sur-expression dans T2. +> Traitement 1 +Les genes sur-exprimés au T1 sont non-exprimé durant le T2 et T3 (Boxplots T1/ExpT2 et T1/ExpT3) . +Il est difficile d'observer une catégorie de genes de T1 qui se soient sous exprimés ou sur exprimés dans T2 et T3, ceux qui n'avaient pas changés d'expression relative durant T1, se sont soit sous exprimé soit sur exprimé (Boxplots T1/ExpT2 et T1/ExpT3). -Ceux qui s'étaient sur-exprimés au T1 ont affiché aucun changement semblent ne pas avoir changé d'expression au T3 ( relativement à l'absence de traitement). - -Ceux qui n'avaient pas changés d'expression relative durant T1, se sont sous exprimé ou sur exprimé. -Il faut bien se rappeler que T1 ne cible que très peu de genes donc ces observations sont cohérentes. - -- traitement 2 -On observe une légère tendance des genes s'étant sous-exprimé avec T1 à se sous exprimer avec T2 mais le reste des boxplots ne permettent pas de relever quoi que ce soit par rapport à T2. - -En revanche, il est très clair que T2 et T3 ciblent les mêmes genes, toutes les expressions relevées par T2 concordent aux modalités qualitatives moyennes calculées sur T3. +> traitements 2 et 3 +On observe une légère tendance des genes s'étant sous-exprimé avec T1 à se sous exprimer avec T2 et T3 (Boxplots T2/ExpT1 et T3/expT1). En revanche, il est très clair que T2 et T3 ont les même effet sur les mêmes genes à 6h, toutes les expressions relevées par T2 concordent aux modalités qualitatives moyennes calculées sur T3 (Boxplots T2/ExpT3 et T3/ExpT2). - - - - - - -## Analyse bi-dimensionnelle - -### matrice de covariance des variables quantitatives +## matrice de covariance des variables quantitatives +Nous avons généré la matrice de covariance de nos données sans les variables quantitatives. Suite à cela nous avons remarqué qu'il était inutile d'afficher le réplicat R2 dans la matrice et que cela rendait le graphe moins lisible. Nous avons donc décidé de seulement afficher le graphe de la matrice de covariance avec le réplicat R1. ```{r, fig.height = 18,fig.cap="Visualisation de la matrice de covariance des variables quantitatives"} -cr = cor(T[-c(37:39)]) +cr = cor(T[c(1:18)]) corrplot(cr,method="ellipse", type="lower", bg = "lightgrey",title ="Visualisation de la matrice de covariance des variables quantitatives" ) ``` +### analyse de la matrice de covariance +On observe clairement de grandes zones de de corrélation entre T2 et T3 délimitées par une correlation plus moyenne à la première heure des deux traitements sûrement dues au fait que T3 est influencé par T1 aux premières heures. +On remarque que T3 est plus fortement corrélé à T1 à 1H que T2 (qui ne l'est que légèrement), semblant indiquer que T1 s'exprime avant T2; T3 étant la combinaison des deux traitements. - -### Regression linéaire des variables 2 à 2 ??? - - - -### librairie biostatR +## Rapport de correlation Eta2 ```{r} library(BioStatR) -# Calculate eta² for Treatment 1 + print("T1 vs T2") -eta2(T$T1_6H_R1, T$ExpT2) -eta2(T$T1_6H_R2, T$ExpT2) +cat("Replicat 1 : ", eta2(T$T1_6H_R1, T$ExpT2), "\n") +cat("Replicat 2 : ", eta2(T$T1_6H_R2, T$ExpT2), "\n") print("T1 vs T3") -eta2(T$T1_6H_R1, T$ExpT3) -eta2(T$T1_6H_R2, T$ExpT3) +cat("Replicat 1 : ", eta2(T$T1_6H_R1, T$ExpT3), "\n") +cat("Replicat 2 : ", eta2(T$T1_6H_R2, T$ExpT3), "\n") print("T2 vs T3") -eta2(T$T2_6H_R1, T$ExpT3) -eta2(T$T2_6H_R2, T$ExpT3) +cat("Replicat 1 : ", eta2(T$T2_6H_R1, T$ExpT3), "\n") +cat("Replicat 2 : ", eta2(T$T2_6H_R2, T$ExpT3), "\n") ``` Le calcul du rapport de correlation eta² bien notre observation de la grande similarité d'expression des genes traités avec T2 et T3 et la dissimilarité des expression des genes lorsque la plante est traitée avec T1 comparée à T2 et T3, chose normale au vu du peu de genes affectés par T1. -### table de contingence pour les variables quali 2 à 2, mosaic plot ? +## table de contingence pour les variables quali 2 à 2, mosaic plot ? ```{r} print("table de contingence entre T1 et T2") table(T$ExpT1,T$ExpT2) @@ -275,19 +222,20 @@ La grande valeur des effectifs partiels sur la diagonale de la table de continge -## Menez une analyse en composantes principales où les Tt sH Rr sont les individus décrits par les gènes. +# Analyse en composantes principales où les Tt sH Rr sont les individus décrits par les gènes. +L'ACP permet d'obtenir une vision synthétique des données en réduisant leur complexité tout en préservant l'information essentielle. Elle facilite l'identification des tendances et profils d'individus, ainsi que la construction de méta-variables, plus simples à interpréter, tout en évitant les redondances entre les variables. Pour faire cela, nous devons transposer la matrice de données originale qui elle décrivait les gènes (individus) en fonction des Tt sH Rr. -Nous décidons de faire directement une ACP sur un jeu de données centrées réduites pour que chaque variable s'exprime avec la même force dans les résultats et qu'ils soient lisibles. +Nous décidons de faire directement une ACP car, comme mentionné plus tôt lors de l'analyse de la figure , nous n'avons pas besoin de centrer et réduire le jeu de données. ```{r, fig.width=10, fig.height=5, fig.cap="Participation des chaque valeur propre de la matrice de correlation à l'intertie totale des données"} donnees_transposees = t(T[-c(37:39)]) -res_pca<-PCA(donnees_transposees,scale.unit=TRUE,graph=FALSE) +res_pca<-PCA(donnees_transposees,scale.unit=FALSE,graph=FALSE) res_pca$eig fviz_eig(res_pca,title="Participation des chaque valeur propre de la matrice de correlation à l'intertie totale des données") ``` -Ce graphique représente les valeurs propres de la matrice de corrélation du jeu de données. L'inertie totale des données étant la somme des valeurs propres ( qui elles sont les inerties axiale associées à l'axe de vecteur directeur un vecteur propre associé ), chaque valeur propre est donc une fraction de l'inertie totale. -On voit qu'on dépasse 80% de l'inertie totale des points rien qu'avec les deux premieres valeurs propres, on en prend donc les vecteurs propres associés respectivement à chacune de ces deux valeurs propres comme axes principaux de l'analyse. +Ce graphique représente la participation de chaque valeur propre de la matrice de corrélation du jeu de données dans l'inertie totale. L'inertie totale étant la somme des valeurs propres ( qui elles sont les inerties axiale associées à l'axe de vecteur directeur le vecteur propre associé ), chaque valeur propre est donc une fraction de l'inertie totale. +On voit qu'on dépasse 80% de l'inertie totale rien qu'avec les deux premieres valeurs propres, on en prend donc les vecteurs propres associés comme axes principaux de l'analyse. ```{r,fig.cap="Corrélations des variables avec les composantes principales"} @@ -302,7 +250,7 @@ Contexte : les relevés aux heures sont décrits par les gènes ( les gènes son ## Interprétation globale du couple de graphes On voit que les genes se polarisent principalement sur l'axe 1 dans un sens ou l'autre. -Les flèches sont d'une longueur presque du rayon du cercle, indiquant une participation très forte des genes dans la variance expliquée par ces dimensions. +Certaines flèches sont d'une longueur presque du rayon du cercle, indiquant une participation très forte des genes dans la variance expliquée par ces dimensions. Il n'y a pas de tendance particulière sur la direction selon l'axe 2 des flèches : Dans chaque "polarité" de fleches selon l'axe 1, il y a des fleches dont la direction est negative d'autres positive selon l'axe 2. Bien que l'on dénote une quantité plus grande de gènes corrélés positiviement à la dimension 2. Le traitement 1 est entièrement groupé sur des valeurs très negatives de l'axe 1. On remarque dans ce groupement la présence des T2 et T3 à la première heure de relevés d'expression des gènes. @@ -311,43 +259,42 @@ Pour le traitement 2 et 3, on les retrouves formant 2 groupements, 1 en haut à -## ON EST SENSE VOIR UN TRUC IMPORTANT D'APRES LA PROF MAIS JE VOIS RIEN -### Les axes générés par l'ACP sont purement virtuels, mais on peut y préter un sens plus ou moins défini selon les variables qui y sont corrélées - +================================================ axe 1: force du changement d'expression des gènes : si on sur-exprime/sous-exprime de beaucoup ( genre 0=>5) ou pas, polarisation ? -axe 2 : vers le haut => ça va changer d'expression bientot, vers le bas => ça se stabilise ( donc les genes pointant vers le haut changent d'expression, et ceux vers le bas ont tendance à rester plutot pareil ) +axe 2 : stabilité de l'expression du gène : vers le haut => ça va changer d'expression bientot, vers le bas => ça se stabilise ( donc les genes pointant vers le haut changent d'expression, et ceux vers le bas ont tendance à rester plutot pareil ) > On remarque que les traitements ne sont pas du tout décris de la même manière selon les horaires, mais il y a une régularité d'apparition dans chaque tranche horaire. +Essayons maintenant de préter un sens à ce que l'on observe : -### hypothèses sur la signification : qu'est-ce qu'ils ont en commun ces gènes qui pourrait décrire ces relevés aux différentes heures et les différents traitements - - - -En regardant le graphe des individus (résultats aux heures de relevés), on a effectivement les heures groupées à des valeurs negatives de l'axe 1 correspondant aux relevés du traitement 1 qui, souvenons-nous toujours des histogrammes, ne change l'expression relative que de très peu de gènes. +En regardant le graphe des individus (résultats aux heures de relevés), on a effectivement les heures groupées à des valeurs negatives de l'axe 1 correspondant aux relevés du traitement 1 qui ne change l'expression relative que de très peu de gènes. Pour l'interprétation du second axe, les gènes semblent y être positivement et negativement corrélés quel que soit leur correlation avec l'axe 1. -En regardant les individus, on observe que plus l'heure est tardive, plus ils tendent vers des valeurs negatives sur l'axe 2. De plus, on observe que les points liés aux relevés du traitement 1 ne vont pas énormément vers les valeurs positives. Il semble donc que l'axe 2 soit indicateur des expressions des gènes sont susceptibles de changer. - +En regardant les individus, on observe que plus l'heure est tardive, plus ils tendent vers des valeurs negatives sur l'axe 2. De plus, on observe que les points liés aux relevés du traitement 1 ne vont pas énormément vers les valeurs positives. Il semble donc que l'axe 2 soit indicateur des expressions des gènes sont susceptibles de changer ## Clustering +L'objectif du clustering est de regrouper des individus (ici, les Tt_sH_Rr) en groupes homogènes selon leurs similarités, sans connaissance préalable des catégories. Cela permet d’identifier des profils ou des comportements communs, facilitant l’interprétation des données et la mise en évidence de structures sous-jacentes. + + +Nous avons commencé par effectuer un clustering avec la méthode K-means basée sur des estimations de nombre de clusters optimaux avec Silhouette et Calinski-Harabasz ainsi que l'inertie intra-classe, pour finir par effectuer un clustering avec la méthode CAH dont le nombre de classes est déterminé par l'indice de Calinski-Harabasz calculé sur des coupures du dendogramme. + +Pour le dendogramme, nous avons utilisé la mesure d'agrégation de Ward car il y a trop de points pour utiliser la mesure euclidienne avec efficacité. ### Clustering k-means - - +On commence par afficher l'inertie intra classe en fonction du nombre de classe pour le clustering avec k-means, le but étant de la minimiser tout en gardant un nombre de classes raisonnable. ```{r,fig.cap="Visualisation de l'inertie intra-classe en fonction du nombre de classes demandées pour le clustering"} #centrage et réduction des données s = donnees_transposees - +set.seed(1234) Kmax<-15 -reskmeanscl<-matrix(0,nrow=nrow(s),ncol=Kmax-1) +reskmeanscl=matrix(0,nrow=nrow(s),ncol=Kmax-1) Iintra<-NULL for (k in 2:Kmax){ resaux<-kmeans(s,k) - reskmeanscl[,k-1]<-resaux$cluster + reskmeanscl[,k-1]=resaux$cluster Iintra<-c(Iintra,resaux$tot.withinss) } @@ -358,10 +305,11 @@ ggplot(df,aes(x=K,y=Iintra))+ xlab("Nombre de classes")+ ylab("Inertie intraclasse") ``` -nn pense dénoter un coude dans la courbe d'inertie intraclasse aux alentours de 4 clusters - +On dénote un coude dans la courbe d'inertie intraclasse aux alentours de 4 clusters. +À présent on va afficher l'évolution de l'indicateur Silouhette en fonction du nombre de classe ainsi que l'évolution de l'indice de Calinski-Harabasz en fonction du nombre de classe. ```{r,fig.cap="Visualisation du critère de Silhouette et de Calinski-Harabasz en fonction du nombre de classes demandées pour le clustering"} +set.seed(1234) Silhou<-NULL for (k in 2:Kmax){ aux<-silhouette(reskmeanscl[,k-1], daisy(s)) @@ -369,70 +317,85 @@ for (k in 2:Kmax){ } df<-data.frame(K=2:Kmax,Silhouette=Silhou) -ggplot(df,aes(x=K,y=Silhouette))+ +p11=ggplot(df,aes(x=K,y=Silhouette))+ geom_point()+ - geom_line()+theme(legend.position = "bottom") + geom_line()+theme(legend.position = "bottom")+ + xlab("Nombre de classes")+ + ylab("Silhouette") CH<-NULL -Kmax<-20 for (k in 2:Kmax){ - CH<-c(CH,index.G1(x=s , cl= kmeans(s,k)$cluster)) + CH<-c(CH,index.G1(x=s , cl=reskmeanscl[,k-1])) } daux<-data.frame(NbClust=2:Kmax,CH=CH) -ggplot(daux,aes(x=NbClust,y=CH))+ +p12 =ggplot(daux,aes(x=NbClust,y=CH))+ geom_line()+ - geom_point() + geom_point()+ + xlab("Nombre de classes")+ + ylab("CH") + +grid.arrange(p11,p12,ncol=2) ``` -Silhouette et l'indice de Calinski-Harabasz ont un pic à 2 +Silhouette et l'indice de Calinski-Harabasz ont un pic à 2, mais cela est normal sachant que Silhouette et l'indice de Calinski-Harabasz ont tendance à sous-estimer le nombre de clusters. ### visualisation du clustering ```{r,fig.cap="Visualisation des clusters générés par la méthode kmeans dnas le plan factoriel 1,2"} +set.seed(1234) +#graphes des clusters +res_kmeans = kmeans(s,4) +p11 = fviz_cluster(res_kmeans,data=donnees_transposees, + ellipse.type="norm",labelsize=8, + geom=c("point"))+ggtitle("Visualisation des clusters générés par la méthode kmeans dnas le plan factoriel 1,2") + + +# on choisis 2 clusters +aux<-silhouette(reskmeanscl[,4-1], daisy(s)) +p12 = fviz_silhouette(aux)+ + theme(plot.title = element_text(size =9)) + #graphes des clusters res_kmeans = kmeans(s,2) -fviz_cluster(res_kmeans,data=donnees_transposees, +p21 = fviz_cluster(res_kmeans,data=donnees_transposees, ellipse.type="norm",labelsize=8, geom=c("point"))+ggtitle("Visualisation des clusters générés par la méthode kmeans dnas le plan factoriel 1,2") # on choisis 2 clusters aux<-silhouette(reskmeanscl[,2-1], daisy(s)) -fviz_silhouette(aux)+ +p22 = fviz_silhouette(aux)+ theme(plot.title = element_text(size =9)) -rm(df,Silhou,aux) + +grid.arrange(p11,p12,p21,p22,ncol=2) ``` -On remaque bien 2 clusters +Après comparaison, on choisit 2 classes car cela nous semble plus optimal que 4. -### PAM - -```{r, fig.cap="Visualisation des clusters générés par la méthode PAM dnas le plan factoriel 1,2"} -res_pam = pam(s,2,metric="euclidean") -fviz_cluster(res_pam,data=donnees_transposees, - ellipse.type="norm",labelsize=8, - geom=c("point"))+ggtitle("Visualisation des clusters générés par la méthode PAM dnas le plan factoriel 1,2") -``` - - - -### clustering CAH -```{r, fig.width=9, fig.cap="Dendogramme du clustering de l'ACP des variables Tt en tant qu'individus, obtenu par méthode CAH"} +### clustering CAH +À présent on va afficher l'évolution de l'indice de Calinski-Harabasz en fonction du nombre de classes utilisées pour découper le dendogramme. +```{r, fig.width=9, fig.cap="Visualisation du critère de Calinski-Harabasz en fonction du nombre de classes demandées pour le clustering"} +set.seed(1234) dx<-dist(donnees_transposees) hward<-hclust(dx,method = "ward.D2") CH<-NULL -Kmax<-20 for (k in 2:Kmax){ CH<-c(CH,index.G1(x=donnees_transposees, cl= cutree(hward,k))) } daux<-data.frame(NbClust=2:Kmax,CH=CH) ggplot(daux,aes(x=NbClust,y=CH))+ geom_line()+ - geom_point() + geom_point()+ + xlab("Nombre de classes")+ + ylab("CH") +``` +On choisit alors de prendre 2 classes par observation du maximum du graphe. +```{r, fig.width=9, fig.cap="Dendogramme du clustering de l'ACP des variables Tt en tant qu'individus, obtenu par méthode CAH"} +set.seed(1234) ClustCH<-cutree(hward,k=2) fviz_dend(hward,k=2,show_labels=FALSE)+ggtitle("Dendogramme du clustering de l'ACP des variables Tt en tant qu'individus, obtenu par méthode CAH") fviz_pca_ind(res_pca, habillage = as.factor(ClustCH), geom = c("point")) @@ -441,33 +404,24 @@ fviz_pca_ind(res_pca, habillage = as.factor(ClustCH), geom = c("point")) ### Comparaison des clusterings -On voit bien qu'à 4 classes, les regroupements ne sont pas consistents entre chaque méthode de clustering. A 3 classes nous obtenons une classification qui ne change pas, ou presque, entre chaque méthode. Nous décidons donc qu'il s'agit donc d'un bon choix de nombre de classes. +A 2 classes nous obtenons une classification qui ne change pas entre chaque méthode. Nous décidons donc qu'il s'agit donc d'un bon choix de nombre de classes. -La classification obtenue est en accord avec les observations faites lors de l'ACP, on y retrouve plus ou moins les mêmes groupements : celui majoritarement composé des relevés de T1 avec une majorité de gènes sans changement d'expression relative, celui composé des relevés de T2 et T3 aux heures des changements d'expression les plus brutaux, et finalement celui s'étalant sur la droite qui semble représenter la fin de l'évolution des traitements T2 et T3 où l'expression de gènes y est très polarisée. +La classification obtenue est en accord avec les observations faites lors de l'ACP, on y retrouve plus ou moins les mêmes groupements : celui majoritarement composé des relevés de T1 avec une majorité de gènes sans changement d'expression relative et celui composé des relevés de T2 et T3. -FAIRE LES GRAPHES RONDS CHELOUS POUR LES CLUSTERINGS 2 A 2 - ```{r} -# kmeans et PAM -clust1f = paste("CLkm-",res_kmeans$cluster, sep="") -clust2f = paste("CLCAH-", res_pam$clustering, sep="") -chordDiagram(table(clust1f,clust2f)) - # kmeans et CAH clust1f = paste("CLkm-",res_kmeans$cluster, sep="") clust2f = paste("CLCAH-", cutree(hward,2), sep="") chordDiagram(table(clust1f,clust2f)) -# PAM ET CAH -clust1f = paste("CLkm-",res_pam$clustering, sep="") -clust2f = paste("CLCAH-", cutree(hward,2), sep="") -chordDiagram(table(clust1f,clust2f)) ``` # ANALYSE DES GENES ## Generation de dataExpMoy + +Nous construisons le jeu de données DataExpMoy contenant la moyenne des expressions sur les réplicats de chaque gène, pour chaque traitement et chaque heure. DataExpMoy est donc une matrice de taille 542× 18. ```{r} # Liste des traitements, heures et réplicats traitements <- c("T1", "T2", "T3") @@ -497,44 +451,66 @@ for (t in traitements) { # Convertir en data.frame pour manipulation DataExpMoy <- as.data.frame(DataExpMoy) -DataExpMoy$ExpT1 = T$ExpT1 -DataExpMoy$ExpT2 = T$ExpT2 -DataExpMoy$ExpT3 = T$ExpT3 head(DataExpMoy) ``` ## ACP de DataExpMoy - -```{r, fig.width=13} +A partir d'ici, nous avons centré et réduit les données car cela donnait des résultats sensiblement plus exploitables au niveau des indicateurs pour le clustering. +```{r, fig.width=7} # Effectuer l'ACP res_pca2 <- PCA(DataExpMoy, scale.unit = TRUE,quali.sup = c(19:21), graph = FALSE) # Création des graphiques plot1 <- fviz_eig(res_pca2, title = "Participation de chaque valeur propre à l'inertie totale des données") +plot1 +``` +On voit qu'on dépasse 80% de l'inertie totale avec les deux premières valeurs propres, on prend donc les vecteurs propres associés à ces deux valeurs propres comme composantes principales de notre ACP. +```{r, fig.width=10} plot2 <- fviz_pca_ind(res_pca2, label = "point", title = "Projection des individus sur un plan factoriel") plot3 <- fviz_pca_var(res_pca2, axes = c(1, 2), label = "all", title = "Corrélations des variables avec les composantes principales") -plot1 # Affichage côte à côte des graphiques grid.arrange(plot2,plot3, ncol = 2) ``` +Il semble y avoir deux groupes principaux de gènes (individus), ce qui pourrait refléter une différenciation claire entre les niveaux d'expression sous différents traitements. +Les points plus éloignés du centre vers le haut représentent des gènes ayant des comportements plus spécifiques ou atypiques. + +Le premier axe (DIM 1) est fortement corrélé avec les traitements T2, T3 à des moments précis, en particulier pour les temps plus avancés (par exemple, T3 4H, T3 5H, T3 6H). Cela suggère que Dim1 reflète les différences d'expression liées à l'effet des traitements T2 au fil du temps, qui a la particularité de faire exprimer ses gènes sur les temps plus longs. Cela explique aussi la corrélation des variables de relevés de T3 à cette dimension, car T3 est un mélange de T1 et T2. +Le deuxième axe (DIM2) semble corrélé avec des effets à court terme, typiques de T1. Cela pourrait indiquer des gènes qui réagissent rapidement mais dont l'effet s'atténue à long terme. + +En regardant la correlations des variables qui représentent les relevés sur T1, comme elles sont très positivement corrélées avec la dimension 2, on en déduis que les gènes vers les valeurs élevées de la dimension 2 sont ceux ciblés par le traitement 1, et 3. + +Comme T3 est une combinaison des traitements T1 et T2, il semble structurer fortement l'axe principal (Dim1) pour des temps intermédiaires et avancés, mais est notablement corrélé positivement à la dimension 2 pour les premières heures de traitement, correspondant bien avec le fait que T1 fait exprimer les gènes qu'il vise de manière très rapide. On retrouve bien le fait que T3 est la somme des deux autres traitements. + + ### Ajout des variables qualitatives -```{r} -fviz_pca_ind(res_pca2,habillage=19,geom=c("point")) -fviz_pca_ind(res_pca2,habillage=20,geom=c("point")) -fviz_pca_ind(res_pca2,habillage=21,geom=c("point")) +Nous allons maintenant afficher les points en dans les dimensions de l'ACP, colorés en fonction des modalités des 3 variables qualitatives ExpT1, ExpT2 et ExpT3. Cela peut nous permettre d'affiner notre interprétation des résultats de l'ACP. +```{r, fig.height=8} +p11 = fviz_pca_ind(res_pca2,habillage=T$ExpT1,geom=c("point")) +p12 = fviz_pca_ind(res_pca2,habillage=T$ExpT2,geom=c("point")) +p13 = fviz_pca_ind(res_pca2,habillage=T$ExpT3,geom=c("point")) + +grid.arrange(p11,p12,p13) ``` +### analyse +On observe donc 3 clusters de gènes : +- Les gènes étant poussés à la sur-expression par T1, affichés comme non-exprimés durant T2 et partiellement sur-exprimés avec T3 +- Les gènes étant sous-exprimés (verts) durant T2 et T3, non-exprimés durant T1. +- Les gènes étant sur-exprimés (bleus) durant T2 et T3, non-exprimés durant T1. + +On confirme donc bien notre analyse descriptive préliminaire, et nos suppositions de sens prétés aux dimensions 1 et 2 de l'ACP. -## Clustering De L'ACP +## Clustering +L'objectif de ce clustering est de regrouper des individus (ici, des gènes) en groupes homogènes selon leurs similarités. - -```{r,fig.cap="Visualisation de l'inertie intra-classe en fonction du nombre de classes demandées pour le clustering"} +```{r,fig.cap="Visualisation de l'inertie intra-classe et Silouhette en fonction du nombre de classes demandées pour le clustering"} #centrage et réduction des données -s_2 = DataExpMoy[-c(19:21)] +set.seed(1234) + +s_2 = scale(DataExpMoy[-c(19:21)]) -Kmax<-15 reskmeanscl_2<-matrix(0,nrow=nrow(s_2),ncol=Kmax-1) Iintra<-NULL for (k in 2:Kmax){ @@ -544,14 +520,12 @@ for (k in 2:Kmax){ } df<-data.frame(K=2:15,Iintra=Iintra) -ggplot(df,aes(x=K,y=Iintra))+ +p11=ggplot(df,aes(x=K,y=Iintra))+ geom_line()+ geom_point()+ xlab("Nombre de classes")+ ylab("Inertie intraclasse") -``` -```{r,fig.cap="Visualisation du critère de Silhouette en fonction du nombre de classes demandées pour le clustering"} Silhou<-NULL for (k in 2:Kmax){ aux<-silhouette(reskmeanscl_2[,k-1], daisy(s_2)) @@ -559,21 +533,21 @@ for (k in 2:Kmax){ } df<-data.frame(K=2:Kmax,Silhouette=Silhou) -ggplot(df,aes(x=K,y=Silhouette))+ +p12=ggplot(df,aes(x=K,y=Silhouette))+ geom_point()+ - geom_line()+theme(legend.position = "bottom") + geom_line()+theme(legend.position = "bottom")+ + xlab("Nombre de classes")+ + ylab("Silouhette") -aux<-silhouette(reskmeanscl_2[,3-1], daisy(s_2)) -fviz_silhouette(aux)+ - theme(plot.title = element_text(size =9)) -rm(df,Silhou,aux) +grid.arrange(p11,p12,ncol=2) ``` - +En lisant le graphe de l'inertie intra-classe, on observe le coude aux alentours de 3 classes. En observant l'indice de Silouhette, on remarque le pic recherché à 3 classes également. Les indices concordants, on en déduit que le choix optimal du nombre de classes pour le clustering est 3. ```{r,fig.cap="Visualisation des clusters générés par la méthode kmeans dnas le plan factoriel 1,2"} +set.seed(1234) #graphes des clusters res_kmeans_2 = kmeans(s_2,3) fviz_cluster(res_kmeans_2,data=s_2, @@ -584,60 +558,73 @@ fviz_cluster(res_kmeans_2,data=s_2, ``` -```{r, fig.cap="Visualisation des clusters générés par la méthode PAM dnas le plan factoriel 1,2"} -res = pam(s_2,3,metric="euclidean") -fviz_cluster(res,data=s_2, - ellipse.type="norm",labelsize=8, - geom=c("point"))+ggtitle("Visualisation des clusters générés par la méthode PAM dnas le plan factoriel 1,2") -``` ```{r, fig.width=9, fig.cap="Dendogramme du clustering de l'ACP, obtenu par méthode CAH"} -dx=dist(s_2,method="euclidian") +dx=dist(s_2) hward=hclust(dx,method = "ward.D2") - fviz_dend(hward,k=3, show_labels = FALSE, - rect=TRUE, - rect_fill = TRUE, palette = "npg", rect_border = "npg", - labels_track_height = 0.8)+ggtitle("Dendogramme du clustering de l'ACP, obtenu par méthode CAH") + labels_track_height = 0.8)+ggtitle("Dendogramme découpé représentant le clustering obtenu par méthode CAH") ``` +### analyse des clusterings +On remarque que les clusterings correspondent aux groupes que nous avions discernés sur la figure -## Evolution de l'expression des genes en fonction de leur traitement et cluster : +### Evolution de l'expression des genes en fonction de leur traitement et cluster + +Nous avons généré 3 graphiques, représentant l'évolution de l'expression moyenne des gènes par cluster et par traitement. Cela pourra nous permettre d'affiner nos observations sur les traitements. ```{r,fig.width=13} -# Ajouter une colonne unique d'identification pour chaque gène -DataExpMoy$GeneID = rownames(DataExpMoy) # Ajouter les identifiants des gènes -DataExpMoy$Cluster = as.factor(res_kmeans_2$cluster) # Ajouter les clusters comme une colonne +DataExpMoy$GeneID <- rownames(DataExpMoy) -# Restructurer les données en format long -data_long = DataExpMoy %>% - pivot_longer( - cols = -c(ExpT1, ExpT2, ExpT3, Cluster, GeneID), # Colonnes des expressions moyennes - names_to = "Condition", - values_to = "Expression" - ) %>% - separate(Condition, into = c("Traitement", "Temps"), sep = "_") %>% # Séparer Traitement et Temps - mutate( - Temps = as.numeric(gsub("H", "", Temps)) # Supprimer "H" et convertir en numérique - ) +DataExpMoy$Cluster <- as.factor(res_kmeans_2$cluster) + +data_long <- pivot_longer( + DataExpMoy, + cols = -c(Cluster, GeneID), + names_to = "Condition", + values_to = "Expression" +) + +data_long <- separate( + data_long, + col = "Condition", + into = c("Traitement", "Temps"), + sep = "_" +) + +data_long$Temps <- as.numeric(gsub("H", "", data_long$Temps)) + +data_grouped <- group_by(data_long, Cluster, Traitement, Temps) +data_mean <- summarise( + data_grouped, + Expression = mean(Expression), + .groups = "drop" +) + +ggplot(data_mean, aes(x = Temps, y = Expression, group = Cluster, color = Cluster)) + + geom_line(size = 1.2) + + facet_wrap(~ Traitement, scales = "free_y") + + labs( + title = "Évolution moyenne de l'expression génique par traitement et cluster", + x = "Temps (heures)", + y = "Expression génique (moyenne)" + ) + + scale_color_manual(values = c("red", "blue", "green")) -#head(data_long) -# Tracer les courbes -ggplot(data_long, aes(x = Temps, y = Expression, group = GeneID, color = Cluster)) + - geom_line(alpha = 0.6) + # Ajout des courbes avec transparence - facet_wrap(~ Traitement, scales = "free_y") + # Un graphique par traitement - labs(title = "Évolution de l'expression génique par traitement et cluster", - x = "Temps (heures)", - y = "Expression génique") + - theme_minimal() + - scale_color_manual(values = c("red", "blue", "green")) # Définir des couleurs fixes pour les clusters ``` +On lis sur les graphiques de la figure <> la liaison de toutes les observations que nous avons pu faire : + +On remarque sur T1 le fait que le cluster 2 correspond au peu de gènes qu'il influence et qui vont se sur-exprimer tôt dans le traitement, pour ensuite l'expression relative re-diminue. +Lors du traitement 2, les gènes de ce cluster ne vont pas/peu s'exprimer et lors du traitement 3, ils vont s'exprimer de la même façon que lors du traitement 1, ce qui est logique sachant que T3 est le mélange de T2 et T1. + +Comme lors de l'analyse descriptive, on observe les deux autres clusters se sous-exprimer légèrement lors de T1 et se sur et sous exprimer pour T2 et T3, tout en conservant leur expression dans le temps. +Le cluster 1 correspond aux gènes sur-exprimés et le cluster 3 aux gènes sous-exprimés pour T2 et T3. @@ -645,38 +632,69 @@ ggplot(data_long, aes(x = Temps, y = Expression, group = GeneID, color = Cluster ## Clustering des gènes à partir des variables ExpT1, ExpT2 et ExpT3. Comme ce sont des données qualitatives, on doit utiliser des méthodes alternatives de clustering comme les kmodes ou les kmeans mais sur les coordonnées de points projetés dans le plan d'une ACM -### K-modes -```{r,fig.cap=""} -MatriceExp = T[,c(-1,-2,-3)] +## generation de la matrice de données qualitatives +```{r} +MatriceExp = T[,c(37,38,39)] rownames(MatriceExp) = rownames(T) colnames(MatriceExp) = c("ExpT1","ExpT2","ExpT3") MatriceExp = as.data.frame(MatriceExp) -MatriceExp$ExpT1 = T$ExpT1 -MatriceExp$ExpT2 = T$ExpT2 -MatriceExp$ExpT3 = T$ExpT3 +head(MatriceExp) +``` + +### K-modes +```{r,fig.cap=""} +set.seed(1234) clkmodes=kmodes(MatriceExp,3,iter.max=100,weight=FALSE) clusplot(MatriceExp, clkmodes$cluster, color=TRUE, shade=TRUE, labels=0, lines=0) ``` ### K-means sur ACM ```{r,fig.cap=""} -head(MatriceExp) -afcm=MCA(MatriceExp,graph = FALSE) +afcm=MCA(MatriceExp,graph = TRUE) coeff=afcm$ind$coord clkmeans=kmeans(coeff,3) -# Visualisation des clusters fviz_cluster(clkmeans, data = coeff, - geom = "point", + geom = "point", ellipse.type = "norm", - main = "Clustering des gènes basé sur l'ACM et k-means") + main = "Clustering des gènes basé sur l'ACM et k-means") ``` +### PAM +Pour effectuer un clustering PAM avec des données qualitatives, nous avons généré en amont une matrice de dissimilarité grâce à la métrique de gower, pour ensuite lancer l'algorithme PAM sur cette matrice. +```{r, fig.cap="Visualisation des clusters générés par la méthode PAM"} +# La distance de Gower est adaptée aux données qualitatives +ds <- daisy(MatriceExp, metric = "gower") +resPAMcl<-matrix(0,nrow=nrow(MatriceExp),ncol=Kmax-1) +Silhou<-NULL +for (k in 2:Kmax){ + resaux<-pam(ds,k,metric="euclidean") + resPAMcl[,k-1]<-resaux$clustering + aux<-silhouette(resPAMcl[,k-1], ds) + Silhou<-c(Silhou,mean(aux[,3])) +} + +df<-data.frame(K=2:Kmax,Silhouette=Silhou) +ggplot(df,aes(x=K,y=Silhouette))+ + geom_point()+ + geom_line()+theme(legend.position = "bottom") + +res_pam = pam(ds, k = 10) -J'ai absolument rien compris à ce qu'il se passe là, il y a beaucoup moins de nuance dans les données donc les points sont empilés. On dénote peut-être des clusters vaguement ressemblant à ceux sur L'ACP des moyennes ? ExpT étant calculée sur les relevés à 6h, on s'éloigne tout de même des clustering précédents. +# Étape 4 : Visualiser les clusters +fviz_cluster( + res_pam, + data = MatriceExp, + ellipse.type = "norm", # Ajouter une ellipse normale autour des clusters + labelsize = 8, # Taille des étiquettes + geom = c("point") # Utiliser des points pour visualiser les données +) + + ggtitle("Visualisation des clusters générés par la méthode PAM") + +``` diff --git a/Projet_files/figure-html/unnamed-chunk-11-1.png b/Projet_files/figure-html/unnamed-chunk-11-1.png new file mode 100644 index 0000000..88f8f00 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-11-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-12-1.png b/Projet_files/figure-html/unnamed-chunk-12-1.png new file mode 100644 index 0000000..b5cf19b Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-12-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-12-2.png b/Projet_files/figure-html/unnamed-chunk-12-2.png new file mode 100644 index 0000000..5b49412 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-12-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-13-1.png b/Projet_files/figure-html/unnamed-chunk-13-1.png new file mode 100644 index 0000000..d57af36 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-13-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-14-1.png b/Projet_files/figure-html/unnamed-chunk-14-1.png new file mode 100644 index 0000000..1836d05 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-14-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-14-2.png b/Projet_files/figure-html/unnamed-chunk-14-2.png new file mode 100644 index 0000000..19296c6 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-14-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-15-1.png b/Projet_files/figure-html/unnamed-chunk-15-1.png new file mode 100644 index 0000000..b3aef2c Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-15-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-15-2.png b/Projet_files/figure-html/unnamed-chunk-15-2.png new file mode 100644 index 0000000..65e72a6 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-15-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-16-1.png b/Projet_files/figure-html/unnamed-chunk-16-1.png new file mode 100644 index 0000000..79e4bc9 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-16-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-17-1.png b/Projet_files/figure-html/unnamed-chunk-17-1.png new file mode 100644 index 0000000..7ec72b5 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-17-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-17-2.png b/Projet_files/figure-html/unnamed-chunk-17-2.png new file mode 100644 index 0000000..d82524b Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-17-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-17-3.png b/Projet_files/figure-html/unnamed-chunk-17-3.png new file mode 100644 index 0000000..dfd108c Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-17-3.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-18-1.png b/Projet_files/figure-html/unnamed-chunk-18-1.png new file mode 100644 index 0000000..77551f2 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-18-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-18-2.png b/Projet_files/figure-html/unnamed-chunk-18-2.png new file mode 100644 index 0000000..018265a Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-18-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-18-3.png b/Projet_files/figure-html/unnamed-chunk-18-3.png new file mode 100644 index 0000000..67b28bf Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-18-3.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-2-1.png b/Projet_files/figure-html/unnamed-chunk-2-1.png new file mode 100644 index 0000000..e4bdc53 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-2-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-20-1.png b/Projet_files/figure-html/unnamed-chunk-20-1.png new file mode 100644 index 0000000..e1ee36d Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-20-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-20-2.png b/Projet_files/figure-html/unnamed-chunk-20-2.png new file mode 100644 index 0000000..92a9cf7 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-20-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-21-1.png b/Projet_files/figure-html/unnamed-chunk-21-1.png new file mode 100644 index 0000000..5c2fbfb Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-21-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-21-2.png b/Projet_files/figure-html/unnamed-chunk-21-2.png new file mode 100644 index 0000000..0fefce7 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-21-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-21-3.png b/Projet_files/figure-html/unnamed-chunk-21-3.png new file mode 100644 index 0000000..2b7d00c Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-21-3.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-22-1.png b/Projet_files/figure-html/unnamed-chunk-22-1.png new file mode 100644 index 0000000..19b6758 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-22-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-23-1.png b/Projet_files/figure-html/unnamed-chunk-23-1.png new file mode 100644 index 0000000..91a312a Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-23-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-23-2.png b/Projet_files/figure-html/unnamed-chunk-23-2.png new file mode 100644 index 0000000..ce02a7d Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-23-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-24-1.png b/Projet_files/figure-html/unnamed-chunk-24-1.png new file mode 100644 index 0000000..6d73f19 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-24-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-25-1.png b/Projet_files/figure-html/unnamed-chunk-25-1.png new file mode 100644 index 0000000..b94d08d Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-25-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-26-1.png b/Projet_files/figure-html/unnamed-chunk-26-1.png new file mode 100644 index 0000000..daf49a8 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-26-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-27-1.png b/Projet_files/figure-html/unnamed-chunk-27-1.png new file mode 100644 index 0000000..df7821e Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-27-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-28-1.png b/Projet_files/figure-html/unnamed-chunk-28-1.png new file mode 100644 index 0000000..f4cb675 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-28-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-3-1.png b/Projet_files/figure-html/unnamed-chunk-3-1.png new file mode 100644 index 0000000..f1cff87 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-3-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-4-1.png b/Projet_files/figure-html/unnamed-chunk-4-1.png new file mode 100644 index 0000000..3eee32f Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-4-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-5-1.png b/Projet_files/figure-html/unnamed-chunk-5-1.png new file mode 100644 index 0000000..f24b48f Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-5-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-6-1.png b/Projet_files/figure-html/unnamed-chunk-6-1.png new file mode 100644 index 0000000..cc0db5f Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-6-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-6-2.png b/Projet_files/figure-html/unnamed-chunk-6-2.png new file mode 100644 index 0000000..841d74a Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-6-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-1.png b/Projet_files/figure-html/unnamed-chunk-7-1.png new file mode 100644 index 0000000..078a5fc Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-1.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-10.png b/Projet_files/figure-html/unnamed-chunk-7-10.png new file mode 100644 index 0000000..fc527eb Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-10.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-11.png b/Projet_files/figure-html/unnamed-chunk-7-11.png new file mode 100644 index 0000000..777c5d9 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-11.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-12.png b/Projet_files/figure-html/unnamed-chunk-7-12.png new file mode 100644 index 0000000..3cded90 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-12.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-2.png b/Projet_files/figure-html/unnamed-chunk-7-2.png new file mode 100644 index 0000000..181ae46 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-2.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-3.png b/Projet_files/figure-html/unnamed-chunk-7-3.png new file mode 100644 index 0000000..4d64aa2 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-3.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-4.png b/Projet_files/figure-html/unnamed-chunk-7-4.png new file mode 100644 index 0000000..afcb478 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-4.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-5.png b/Projet_files/figure-html/unnamed-chunk-7-5.png new file mode 100644 index 0000000..c53aed9 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-5.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-6.png b/Projet_files/figure-html/unnamed-chunk-7-6.png new file mode 100644 index 0000000..fee2bf3 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-6.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-7.png b/Projet_files/figure-html/unnamed-chunk-7-7.png new file mode 100644 index 0000000..1959979 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-7.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-8.png b/Projet_files/figure-html/unnamed-chunk-7-8.png new file mode 100644 index 0000000..1a696e5 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-8.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-7-9.png b/Projet_files/figure-html/unnamed-chunk-7-9.png new file mode 100644 index 0000000..8767a11 Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-7-9.png differ diff --git a/Projet_files/figure-html/unnamed-chunk-8-1.png b/Projet_files/figure-html/unnamed-chunk-8-1.png new file mode 100644 index 0000000..3a4364e Binary files /dev/null and b/Projet_files/figure-html/unnamed-chunk-8-1.png differ diff --git a/Projet_files/figure-latex/unnamed-chunk-10-1.pdf b/Projet_files/figure-latex/unnamed-chunk-10-1.pdf new file mode 100644 index 0000000..071284b Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-10-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-13-1.pdf b/Projet_files/figure-latex/unnamed-chunk-13-1.pdf new file mode 100644 index 0000000..f01605a Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-13-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-14-1.pdf b/Projet_files/figure-latex/unnamed-chunk-14-1.pdf new file mode 100644 index 0000000..8527f67 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-14-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-14-2.pdf b/Projet_files/figure-latex/unnamed-chunk-14-2.pdf new file mode 100644 index 0000000..5bca6d7 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-14-2.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-15-1.pdf b/Projet_files/figure-latex/unnamed-chunk-15-1.pdf new file mode 100644 index 0000000..0d6056d Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-15-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-2-1.pdf b/Projet_files/figure-latex/unnamed-chunk-2-1.pdf new file mode 100644 index 0000000..89134f7 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-2-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-3-1.pdf b/Projet_files/figure-latex/unnamed-chunk-3-1.pdf new file mode 100644 index 0000000..8239ea3 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-3-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-4-1.pdf b/Projet_files/figure-latex/unnamed-chunk-4-1.pdf new file mode 100644 index 0000000..2aefc54 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-4-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-5-1.pdf b/Projet_files/figure-latex/unnamed-chunk-5-1.pdf new file mode 100644 index 0000000..6b4a143 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-5-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-6-1.pdf b/Projet_files/figure-latex/unnamed-chunk-6-1.pdf new file mode 100644 index 0000000..6f2a267 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-6-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-7-1.pdf b/Projet_files/figure-latex/unnamed-chunk-7-1.pdf new file mode 100644 index 0000000..f84f2cd Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-7-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-8-1.pdf b/Projet_files/figure-latex/unnamed-chunk-8-1.pdf new file mode 100644 index 0000000..74e2c90 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-8-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-8-2.pdf b/Projet_files/figure-latex/unnamed-chunk-8-2.pdf new file mode 100644 index 0000000..cba9e63 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-8-2.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-1.pdf b/Projet_files/figure-latex/unnamed-chunk-9-1.pdf new file mode 100644 index 0000000..87154e3 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-1.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-10.pdf b/Projet_files/figure-latex/unnamed-chunk-9-10.pdf new file mode 100644 index 0000000..7c45691 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-10.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-11.pdf b/Projet_files/figure-latex/unnamed-chunk-9-11.pdf new file mode 100644 index 0000000..dcf0520 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-11.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-12.pdf b/Projet_files/figure-latex/unnamed-chunk-9-12.pdf new file mode 100644 index 0000000..dcb2ad7 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-12.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-2.pdf b/Projet_files/figure-latex/unnamed-chunk-9-2.pdf new file mode 100644 index 0000000..828ba1a Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-2.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-3.pdf b/Projet_files/figure-latex/unnamed-chunk-9-3.pdf new file mode 100644 index 0000000..ce047ca Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-3.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-4.pdf b/Projet_files/figure-latex/unnamed-chunk-9-4.pdf new file mode 100644 index 0000000..a53450a Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-4.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-5.pdf b/Projet_files/figure-latex/unnamed-chunk-9-5.pdf new file mode 100644 index 0000000..6b9dbdf Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-5.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-6.pdf b/Projet_files/figure-latex/unnamed-chunk-9-6.pdf new file mode 100644 index 0000000..2d1311b Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-6.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-7.pdf b/Projet_files/figure-latex/unnamed-chunk-9-7.pdf new file mode 100644 index 0000000..1321b61 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-7.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-8.pdf b/Projet_files/figure-latex/unnamed-chunk-9-8.pdf new file mode 100644 index 0000000..9411cf4 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-8.pdf differ diff --git a/Projet_files/figure-latex/unnamed-chunk-9-9.pdf b/Projet_files/figure-latex/unnamed-chunk-9-9.pdf new file mode 100644 index 0000000..3e265c2 Binary files /dev/null and b/Projet_files/figure-latex/unnamed-chunk-9-9.pdf differ