diff --git a/Projet.Rmd b/Projet.Rmd index be31d6e..3e79bfc 100644 --- a/Projet.Rmd +++ b/Projet.Rmd @@ -24,6 +24,7 @@ library(klaR) ``` ```{r} +set.seed(1234) T = read.table("DataProjet3MIC-2425.txt",header=TRUE,sep=";") T$ExpT1 = as.factor(T$ExpT1) T$ExpT2 = as.factor(T$ExpT2) @@ -151,7 +152,7 @@ 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é. +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 ## Boxplots par paire de variables (qualitative,quantitative) @@ -285,7 +286,7 @@ res_pca<-PCA(donnees_transposees,scale.unit=TRUE,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 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. +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. @@ -331,24 +332,6 @@ En regardant les individus, on observe que plus l'heure est tardive, plus ils te - - - -### afin de visualiser les corrélations des variables intiales avec toutes les méta-variables (pas trs utile on a déjà le cercle) -```{r fig.height=18} -# que 50 gènes sinon c'est le bordel -corrplot(res_pca$var$cor[1:50,],method="ellipse", type="lower", bg = "lightgrey") -``` - - -MAIS C'EST INBUVABLE -### plus ou moins inutile ici de regarder d'autres plans, sera utile dans l'autre ACP - -```{r} -fviz_pca_ind(res_pca,axes = c(1,3),geom=c("point")) -fviz_pca_ind(res_pca,axes = c(1,4),geom=c("point")) -fviz_pca_ind(res_pca,axes = c(1,5),geom=c("point")) -``` ## Clustering @@ -357,7 +340,7 @@ fviz_pca_ind(res_pca,axes = c(1,5),geom=c("point")) ```{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 = scale(donnees_transposees) +s = donnees_transposees Kmax<-15 reskmeanscl<-matrix(0,nrow=nrow(s),ncol=Kmax-1) @@ -378,7 +361,7 @@ ggplot(df,aes(x=K,y=Iintra))+ nn pense dénoter un coude dans la courbe d'inertie intraclasse aux alentours de 4 clusters -```{r,fig.cap="Visualisation du critère de Silhouette en fonction du nombre de classes demandées pour le clustering"} +```{r,fig.cap="Visualisation du critère de Silhouette et de Calinski-Harabasz en fonction du nombre de classes demandées pour le clustering"} Silhou<-NULL for (k in 2:Kmax){ aux<-silhouette(reskmeanscl[,k-1], daisy(s)) @@ -390,49 +373,43 @@ ggplot(df,aes(x=K,y=Silhouette))+ geom_point()+ geom_line()+theme(legend.position = "bottom") -aux<-silhouette(reskmeanscl[,3-1], daisy(s)) -fviz_silhouette(aux)+ - theme(plot.title = element_text(size =9)) -rm(df,Silhou,aux) +CH<-NULL +Kmax<-20 +for (k in 2:Kmax){ + CH<-c(CH,index.G1(x=s , cl= kmeans(s,k)$cluster)) +} +daux<-data.frame(NbClust=2:Kmax,CH=CH) +ggplot(daux,aes(x=NbClust,y=CH))+ + geom_line()+ + geom_point() ``` - - - -Silhouette fait un pic à 5 et pas 4 :/ +Silhouette et l'indice de Calinski-Harabasz ont un pic à 2 ### visualisation du clustering ```{r,fig.cap="Visualisation des clusters générés par la méthode kmeans dnas le plan factoriel 1,2"} #graphes des clusters -res_kmeans = kmeans(s,4) +res_kmeans = kmeans(s,2) 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") -# pour corréler à des variables qualitatives mais yen a pas la -#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 choisis 2 clusters +aux<-silhouette(reskmeanscl[,2-1], daisy(s)) +fviz_silhouette(aux)+ + theme(plot.title = element_text(size =9)) +rm(df,Silhou,aux) ``` -On remaque bien 3 clusters +On remaque bien 2 clusters ### PAM ```{r, fig.cap="Visualisation des clusters générés par la méthode PAM dnas le plan factoriel 1,2"} -res = pam(s,4,metric="euclidean") +res = pam(s,2,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") @@ -443,9 +420,25 @@ fviz_cluster(res,data=donnees_transposees, ### 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"} -dx<-dist(donnees_transposees,method="euclidian") +dx<-dist(donnees_transposees) hward<-hclust(dx,method = "ward.D2") +CH<-NULL +Kmax<-20 +for (k in 2:Kmax){ + CH<-c(CH,index.G1(dx, cl= cutree(hward,k))) +} +daux<-data.frame(NbClust=2:Kmax,CH=CH) +ggplot(daux,aes(x=NbClust,y=CH))+ + geom_line()+ + geom_point() + +ClustCH<-cutree(hward,k=6) +fviz_dend(hward,k=4,show_labels=FALSE) +fviz_pca_ind(res, habillage = as.factor(ClustCH), geom = c("point")) + + + fviz_dend(hward,k=4, show_labels = TRUE, @@ -532,7 +525,7 @@ fviz_pca_ind(res_pca2,habillage=21,geom=c("point")) ```{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_2 = scale(DataExpMoy[-c(19:21)]) +s_2 = DataExpMoy[-c(19:21)] Kmax<-15 reskmeanscl_2<-matrix(0,nrow=nrow(s_2),ncol=Kmax-1) @@ -579,6 +572,8 @@ res_kmeans_2 = kmeans(s_2,3) fviz_cluster(res_kmeans_2,data=s_2, 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") + + ``` @@ -604,26 +599,6 @@ fviz_dend(hward,k=3, labels_track_height = 0.8)+ggtitle("Dendogramme du clustering de l'ACP, obtenu par méthode CAH") ``` -### nul de fou zinzin DBSCAN -```{r} - -kNNdistplot(s_2,k=round(log(nrow(s_2)))) -# on observe un coude à eps=3 - -# On prend les paramètres eps=3 et minPts=log(500) (environ 6) pour essayer de coller avec les demandes faites aux autres méthodes de clustering -set.seed(123) # Pour rendre les résultats reproductibles -dbscan_res = dbscan::dbscan(s_2, eps = 2, minPts = round(log(nrow(s_2)))) - -# Ajouter les clusters résultants à DataExpMoy -#DataExpMoy$DBSCAN_Cluster <- as.factor(dbscan_res$cluster) # Les clusters DBSCAN - -# Visualiser les clusters -fviz_cluster(dbscan_res, data = s_2, - geom = "point", ellipse = FALSE, # Pas d'ellipse pour DBSCAN - show.clust.cent = FALSE, # Pas de centres pour DBSCAN - palette = "jco") + - ggtitle("Visualisation des clusters générés par DBSCAN") -``` ## Evolution de l'expression des genes en fonction de leur traitement et cluster : @@ -665,7 +640,7 @@ ggplot(data_long, aes(x = Temps, y = Expression, group = GeneID, color = Cluster 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 = matrix(nrow = nrow(T),ncol=3) +MatriceExp = T[,c(-1,-2,-3)] rownames(MatriceExp) = rownames(T) colnames(MatriceExp) = c("ExpT1","ExpT2","ExpT3") MatriceExp = as.data.frame(MatriceExp) @@ -699,6 +674,9 @@ J'ai absolument rien compris à ce qu'il se passe là, il y a beaucoup moins de # TODO : +- refaire sans centrer-réduire +- interpréter par rapport aux méta-variable +- - présenter chaque méthode/algo et pourquoi on l'utilise avant le code - analyser la seconde et troisième acp et les clustering qu'on en fait - refaire l'analyse de la première acp