From 0c26733edd3c2e92b5235739affc378112efd11e Mon Sep 17 00:00:00 2001 From: thaaoblues Date: Sun, 29 Dec 2024 16:04:32 +0100 Subject: [PATCH] Clustering --- Projet.Rmd | 100 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 68 insertions(+), 32 deletions(-) diff --git a/Projet.Rmd b/Projet.Rmd index 8441c1d..572d36d 100644 --- a/Projet.Rmd +++ b/Projet.Rmd @@ -10,6 +10,7 @@ date: "2024-12-04" knitr::opts_chunk$set(echo = TRUE) library(ggplot2) library(gridExtra) +library(grid) library(reshape2) library(corrplot) library(FactoMineR) @@ -56,7 +57,7 @@ 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) +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 @@ -73,7 +74,7 @@ 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) +grid.arrange(g3,g1,g2,ncol=3,top=textGrob("Visualualisation des expressions relative des gènes lors du traitement T2")) ``` @@ -91,7 +92,7 @@ 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) +grid.arrange(g3,g1,g2,ncol=3,top=textGrob("Visualualisation des expressions relative des gènes lors du traitement T3")) ``` ### Analyse de de ces 3 variables @@ -112,7 +113,7 @@ T_long = melt(T[c(1,2,3,4,5,6,19,20,21,22,23,24)]) 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 = "Histograms for Each Column", x = "Values", y = "Frequency") + 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=10} @@ -120,7 +121,7 @@ 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 = "Histograms for Each Column", x = "Values", y = "Frequency") + labs(title = "Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T3", x = "Valeurs", y = "Effectifs") ``` ### Traitement T3 ```{r, fig.height=10} @@ -128,7 +129,7 @@ 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 = "Histograms for Each Column", x = "Values", y = "Frequency") + labs(title = "Histogrammes de l'expression relative des gènes aux différents relevés lors du traitement T3", x = "Valeurs", y = "Effectifs") ``` @@ -144,12 +145,12 @@ ggplot(melt(T[19:36]),aes(x=variable,y=value))+ On voit que même sans réduire les données, chaque variable s'exprime environ avec la même intensité. - -# TODO : RAJOUTER LES BOXPLOTS PAIRE QUANTITATIF QUALITATIF POUR DECELER UNE CORRELATION, INUTILE +## Boxplots par paire de variables (qualitative,quantitative) ```{r} # 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))+ @@ -193,7 +194,7 @@ ggplot(T,aes(y=T$T3_6H_R2,x=T$ExpT3))+ geom_boxplot() ``` -Analyse des boxplots : +### Analyse des boxplots : - traitement 1 (réplicats 1 et 2) Les genes sur-exprimés au T1 n'ont pas changé d'expression relativement à l'absence de traitement 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. @@ -217,11 +218,11 @@ En revanche, il est très clair que T2 et T3 ciblent les mêmes genes, toutes le ## Analyse bi-dimensionnelle -### matrice de correlation des variables quantitatives +### matrice de covariance des variables quantitatives ```{r, fig.height = 18} cr = cor(T[-c(37:39)]) -corrplot(cr,method="ellipse", type="lower", bg = "lightgrey") +corrplot(cr,method="ellipse", type="lower", bg = "lightgrey",title ="Visualisation de la matrice de covariance des variables quantitatives" ) ``` @@ -267,19 +268,19 @@ La grande valeur des effectifs partiels sur la diagonale de la table de continge 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. -```{r} +```{r, fig.width=10, fig.height=5} donnees_transposees = t(T[-c(37:39)]) res_pca<-PCA(donnees_transposees,scale.unit=TRUE,graph=FALSE) res_pca$eig -fviz_eig(res_pca) +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 centré réduites. 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 deux vectueurs propres associés respectivement à chacune de ces deux valeurs propres comme axes principaux de l'analyse. ```{r} -fviz_pca_ind(res_pca,label="all") -fviz_pca_var(res_pca,axes=c(1,2),label="none") +fviz_pca_ind(res_pca,label="all",title="Projection des individus sur un plan factoriel") +fviz_pca_var(res_pca,axes=c(1,2),label="none",title="Corrélations des variables avec les composantes principales") ``` Contexte : les relevés aux heures sont décrits par les gènes ( les gènes sont considérés comme les variables). @@ -288,11 +289,15 @@ 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. -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. +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. +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 T3 et T4 à la première heure de relevés d'expression des gènes. +Pour le traitement 2 et 3, on les retrouves formant 2 groupements, 1 en haut à droite du graphe contenant les relevés à 2 et 3h puis un groupement s'étalant sur la droite du graphe du centre jusqu'en bas contenant les relevés à partir de 4h. + + ## 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 @@ -301,7 +306,7 @@ axe 1: force du changement d'expression des gènes : si on sur-exprime/sous-expr 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 ) -#### 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. +> 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. ### 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 @@ -335,7 +340,8 @@ fviz_pca_ind(res_pca,axes = c(1,5),geom=c("point")) ``` ## Clustering -Nous avons choisi d'effectuer un clustering de l'ACP réalisée plus haut grâce à la méthode des kmeans. Car à l'oeil nu, on dénote déjà très précisément 3 ou 4 clusters donc il sera aisé de trouver le nombre de classes, car normalement il sera de 3 ou 4. + +### Clustering k-means ```{r} @@ -378,6 +384,7 @@ aux<-silhouette(reskmeanscl[,3-1], daisy(s)) fviz_silhouette(aux)+ theme(plot.title = element_text(size =9)) rm(df,Silhou,aux) + ``` @@ -390,21 +397,50 @@ Silhouette fait un pic à 5 et pas 4 :/ ### visualisation du clustering ```{r} #graphes des clusters -res_kmeans = kmeans(s,3) +res_kmeans = kmeans(s,4) fviz_cluster(res_kmeans,data=donnees_transposees, ellipse.type="norm",labelsize=8, - geom=c("point"))+ggtitle("") + geom=c("point"))+ggtitle("Visualisation des clusters générés par la méthode kmeans dnas le plan factoriel 1,2") -table(wine$Type,wine$Qualite) -adjustedRandIndex(wine$Type,reskmeans$cluster) # fonction de similarité, on a 0,35 avec Type, ce n'est donc pas fou non plus -adjustedRandIndex(wine$Qualite,reskmeans$cluster) # on voit que la similarité avec la qualité donne 0 => cela n'a rien à voir +# pour corréler à des variables qualitatives mais yen a pas la -clust<-paste("Cl-K",res_kmeans$cluster,sep="") -Tab<-melt(table(clust,donnees_transposees[,1])) -ggplot(Tab,aes(y=value,axis1=clust,axis2=Var2))+ - geom_alluvium(aes(fill=clust))+ - geom_stratum(width = 1/12)+ - geom_text(stat = "stratum", aes(label = after_stat(stratum)))+ - theme(legend.position = "none") -chordDiagram(table(clust,donnees_transposees[,2])) +#adjustedRandIndex(T$ExpT1,res_kmeans$cluster) +#adjustedRandIndex(T$ExpT2,res_kmeans$cluster) +#adjustedRandIndex(T$ExpT3,res_kmeans$cluster) + +#clust<-paste("Cl-K",res_kmeans$cluster,sep="") +#Tab<-melt(table(clust,donnees_transposees[,1])) +#ggplot(Tab,aes(y=value,axis1=clust,axis2=Var2))+ +# geom_alluvium(aes(fill=clust))+ +# geom_stratum(width = 1/12)+ +# geom_text(stat = "stratum", aes(label = after_stat(stratum)))+ +# theme(legend.position = "none") +#chordDiagram(table(clust,donnees_transposees[,2])) +``` +On remaque bien 4 clusters + +### PAM + +```{r} +res = pam(s,4,metric="euclidean") +fviz_cluster(res,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} + +dx<-dist(donnees_transposees,method="euclidian") +hward<-hclust(dx,method = "ward.D2") + + +fviz_dend(hward,k=3, + show_labels = TRUE, + rect=TRUE, + rect_fill = TRUE, + palette = "npg", + rect_border = "npg", + labels_track_height = 0.8)+ggtitle("Dendogramme du clustering de l'ACP des variables Tt en tant qu'individus, obtenu par méthode CAH") ``` \ No newline at end of file