Clustering
This commit is contained in:
parent
b9bd95f4fa
commit
0c26733edd
1 changed files with 68 additions and 32 deletions
100
Projet.Rmd
100
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")
|
||||
```
|
Loading…
Reference in a new issue