de la merde

This commit is contained in:
Blessing Jibidar 2025-01-07 17:16:12 +01:00
parent 3c8d37358b
commit 9a1658886d

View file

@ -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