This commit is contained in:
thaaoblues 2025-01-14 11:16:58 +01:00
parent 44731bbd56
commit 92f8a2298c
2 changed files with 67 additions and 25 deletions

View file

@ -56,8 +56,7 @@ levels(T$ExpT1)
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 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,warning=FALSE} ```{r,fig.height=3,warning=FALSE,fig.cap="Visualualisation des expressions relative des gènes lors du traitement T1,T2 et T3"}
#fig.cap="Visualualisation des expressions relative des gènes lors du traitement T1,T2 et T3"
g1<-ggplot(T, aes(x=T$ExpT1))+ g1<-ggplot(T, aes(x=T$ExpT1))+
geom_bar()+ geom_bar()+
ylab("Effectifs")+ggtitle("Effectifs") ylab("Effectifs")+ggtitle("Effectifs")
@ -70,7 +69,7 @@ g3<-ggplot(T, aes(x=T$ExpT3))+
geom_bar()+ geom_bar()+
ylab("Effectifs")+ggtitle("Effectifs") ylab("Effectifs")+ggtitle("Effectifs")
grid.arrange(g1,g2,g3,ncol=3,top=textGrob("Visualualisation des expressions relative des gènes lors du traitement T1,T2 et T3")) grid.arrange(g1,g2,g3,ncol=3)
``` ```
@ -110,14 +109,15 @@ Lors d'une analyse supplémentaire des fréquences d'expression des gènes à ch
c.f le document RMarkdown pour les histogrammes. c.f le document RMarkdown pour les histogrammes.
## boxplots pour faire joli ## Boxplots des différentes variables quantitatives du jeu de données
```{r}
```{r,fig.height=4,message=FALSE,warning=FALSE,fig.cap="Boxplots des différentes variables du jeu de données lors du réplicat R1"}
ggplot(melt(T[1:18]),aes(x=variable,y=value))+ 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)) geom_boxplot()+ theme(axis.text.x = element_text(angle=90, vjust = 0.5, hjust = 1))
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))
``` ```
Nous avons choisi de n'inclure que le graphe portant sur le réplicat R1 car il est porteur des mêmes informations que celui sur le réplicat R2.
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. 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 # Analyse bi-dimensionnelle
@ -164,22 +164,28 @@ p6 = ggplot(T,aes(y=T$T3_6H_R1,x=T$ExpT2))+
# Utiliser grid.arrange pour afficher les graphiques dans une grille # Utiliser grid.arrange pour afficher les graphiques dans une grille
grid.arrange(p1, p3, p6, p2, p4, p5, ncol = 3) grid.arrange(p1, p3, p6, p2, p4, p5, ncol = 3)
``` ```
### Analyse des boxplots :
> Traitement 1
### Analyse des boxplots :
#### Traitement 1
Les genes sur-exprimés au T1 sont non-exprimé durant le T2 et T3 (Boxplots T1/ExpT2 et T1/ExpT3) . 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). 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).
> traitements 2 et 3 #### 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). 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).
## 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. 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 = 10,fig.cap="Visualisation de la matrice de covariance des variables quantitatives"}
```{r, fig.height = 4,fig.cap="Visualisation de la matrice de covariance des variables quantitatives sur le replicat R1"}
cr = cor(T[c(1:18)]) cr = cor(T[c(1:18)])
corrplot(cr,method="ellipse", type="lower", bg = "lightgrey",title ="Visualisation de la matrice de covariance des variables quantitatives" ) corrplot(cr,method="ellipse", type="lower", bg = "lightgrey")
``` ```
### analyse de la matrice de covariance ### 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 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. 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.
@ -202,11 +208,13 @@ cat("Replicat 1 : ", eta2(T$T2_6H_R1, T$ExpT3), "\n")
cat("Replicat 2 : ", eta2(T$T2_6H_R2, 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. 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 ? ## tables de contingence pour les variables qualitatives, 2 à 2
```{r} ```{r,fig.cap="tables de contingence pour les variables qualitatives, 2 à 2"}
print("table de contingence entre T1 et T2") print("table de contingence entre T1 et T2")
table(T$ExpT1,T$ExpT2) table(T$ExpT1,T$ExpT2)
print("table de contingence entre T1 et T3") print("table de contingence entre T1 et T3")
@ -214,6 +222,8 @@ table(T$ExpT1,T$ExpT3)
print("table de contingence entre T2 et T3") print("table de contingence entre T2 et T3")
table(T$ExpT2,T$ExpT3) table(T$ExpT2,T$ExpT3)
``` ```
Nouvelle confirmation de nos résultats de manière encore plus précise, on observe que T1 ne change pas l'expression de la très grande majorité des genes. Plus finement, on peut confirmer l'observation faite sur les boxplots tendant à dire que le peu de genes s'étant sous exprimés avec T1 se sont aussi sous-exprimés avec T2 et T3. Nouvelle confirmation de nos résultats de manière encore plus précise, on observe que T1 ne change pas l'expression de la très grande majorité des genes. Plus finement, on peut confirmer l'observation faite sur les boxplots tendant à dire que le peu de genes s'étant sous exprimés avec T1 se sont aussi sous-exprimés avec T2 et T3.
La grande valeur des effectifs partiels sur la diagonale de la table de contingence entre T2 et T3 montre bien la similarité de l'effet de ces deux traitement sur l'expression des genes. La grande valeur des effectifs partiels sur la diagonale de la table de contingence entre T2 et T3 montre bien la similarité de l'effet de ces deux traitement sur l'expression des genes.
@ -229,8 +239,10 @@ Nous décidons de faire directement une ACP car, comme mentionné plus tôt lors
```{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"} ```{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)]) donnees_transposees = t(T[-c(37:39)])
res_pca<-PCA(donnees_transposees,scale.unit=FALSE,graph=FALSE) res_pca<-PCA(donnees_transposees,scale.unit=FALSE,graph=FALSE)
fviz_eig(res_pca,title="Participation des chaque valeur propre de la matrice de correlation à l'intertie totale des données") fviz_eig(res_pca)
``` ```
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. 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. 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.
@ -239,6 +251,8 @@ On voit qu'on dépasse 80% de l'inertie totale rien qu'avec les deux premieres v
fviz_pca_ind(res_pca,label="all",title="Projection des individus sur un plan factoriel") 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") 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). Contexte : les relevés aux heures sont décrits par les gènes ( les gènes sont considérés comme les variables).
- les genes proches d'un axe sont très représentés par celui-ci - les genes proches d'un axe sont très représentés par celui-ci
@ -285,6 +299,9 @@ ggplot(df,aes(x=K,y=Iintra))+
xlab("Nombre de classes")+ xlab("Nombre de classes")+
ylab("Inertie intraclasse") ylab("Inertie intraclasse")
``` ```
On dénote 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. À 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.
@ -351,6 +368,9 @@ p22 = fviz_silhouette(aux)+
grid.arrange(p11,p12,p21,p22,ncol=2) grid.arrange(p11,p12,p21,p22,ncol=2)
``` ```
Après comparaison, on choisit 2 classes car cela nous semble plus optimal que 4. Après comparaison, on choisit 2 classes car cela nous semble plus optimal que 4.
### clustering CAH ### clustering CAH
@ -374,6 +394,9 @@ ggplot(daux,aes(x=NbClust,y=CH))+
xlab("Nombre de classes")+ xlab("Nombre de classes")+
ylab("CH") ylab("CH")
``` ```
On choisit alors de prendre 2 classes par observation du maximum du graphe. On choisit alors de prendre 2 classes par observation du maximum du graphe.
```{r, fig.width=5, fig.cap="Dendogramme du clustering de l'ACP des variables Tt en tant qu'individus, obtenu par méthode CAH"} ```{r, fig.width=5, fig.cap="Dendogramme du clustering de l'ACP des variables Tt en tant qu'individus, obtenu par méthode CAH"}
@ -399,6 +422,7 @@ chordDiagram(table(clust1f,clust2f))
``` ```
# ANALYSE DES GENES # ANALYSE DES GENES
## Generation de dataExpMoy ## Generation de dataExpMoy
@ -438,25 +462,32 @@ DataExpMoy <- as.data.frame(DataExpMoy)
head(DataExpMoy) head(DataExpMoy)
``` ```
## ACP de DataExpMoy ## ACP de DataExpMoy
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. 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=5} ```{r, fig.width=5,fig.cap="Participation de chaque valeur propre à l'inertie totale des données"}
# Effectuer l'ACP # Effectuer l'ACP
res_pca2 <- PCA(DataExpMoy, scale.unit = TRUE, graph = FALSE) res_pca2 = PCA(DataExpMoy, scale.unit = TRUE, graph = FALSE)
# Création des graphiques # Création des graphiques
plot1 <- fviz_eig(res_pca2, title = "Participation de chaque valeur propre à l'inertie totale des données") plot1 = fviz_eig(res_pca2)
plot1 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. 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=7} ```{r, fig.width=7,fig.cap="Couple de graphes représentant la Projection des individus sur un plan factoriel (droite) et la Corrélations des variables avec les composantes principales (gauche)"}
plot2 <- fviz_pca_ind(res_pca2, label = "point", title = "Projection des individus sur un plan factoriel") plot2 = fviz_pca_ind(res_pca2, label = "point")
plot3 <- fviz_pca_var(res_pca2, axes = c(1, 2), label = "all", title = "Corrélations des variables avec les composantes principales") plot3 = fviz_pca_var(res_pca2, axes = c(1, 2), label = "all")
# Affichage côte à côte des graphiques # Affichage côte à côte des graphiques
grid.arrange(plot2,plot3, ncol = 2) 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. 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. Les points plus éloignés du centre vers le haut représentent des gènes ayant des comportements plus spécifiques ou atypiques.
@ -469,14 +500,17 @@ Comme T3 est une combinaison des traitements T1 et T2, il semble structurer fort
### Ajout des variables qualitatives ### Ajout des variables qualitatives
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. Nous allons maintenant afficher les points 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=7} ```{r, fig.height=7, fig.cap="Données sous forme de points dans les dimensions de l'ACP, colorés en fonction des modalités des 3 variables qualitatives ExpT1, ExpT2 et ExpT3."}
p11 = fviz_pca_ind(res_pca2,habillage=T$ExpT1,geom=c("point")) p11 = fviz_pca_ind(res_pca2,habillage=T$ExpT1,geom=c("point"))
p12 = fviz_pca_ind(res_pca2,habillage=T$ExpT2,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")) p13 = fviz_pca_ind(res_pca2,habillage=T$ExpT3,geom=c("point"))
grid.arrange(p11,p12,p13) grid.arrange(p11,p12,p13)
``` ```
### analyse ### analyse
On observe donc 3 clusters de gènes : 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 poussés à la sur-expression par T1, affichés comme non-exprimés durant T2 et partiellement sur-exprimés avec T3
@ -526,6 +560,8 @@ p12=ggplot(df,aes(x=K,y=Silhouette))+
grid.arrange(p11,p12,ncol=2) 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. 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.
@ -553,6 +589,9 @@ fviz_dend(hward,k=3,
rect_border = "npg", rect_border = "npg",
labels_track_height = 0.8)+ggtitle("Dendogramme découpé représentant le clustering 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 ### analyse des clusterings
On remarque que les clusterings correspondent aux groupes que nous avions discernés sur la figure <insérer nombre> On remarque que les clusterings correspondent aux groupes que nous avions discernés sur la figure <insérer nombre>
@ -561,7 +600,7 @@ On remarque que les clusterings correspondent aux groupes que nous avions discer
### 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. 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} ```{r,fig.width=13, fig.cap="Graphiques représentant l'évolution de l'expression moyenne des gènes par cluster et par traitement"}
DataExpMoy$GeneID <- rownames(DataExpMoy) DataExpMoy$GeneID <- rownames(DataExpMoy)
DataExpMoy$Cluster <- as.factor(res_kmeans_2$cluster) DataExpMoy$Cluster <- as.factor(res_kmeans_2$cluster)
@ -601,6 +640,8 @@ ggplot(data_mean, aes(x = Temps, y = Expression, group = Cluster, color = Cluste
``` ```
On lis sur les graphiques de la figure <> la liaison de toutes les observations que nous avons pu faire : 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. 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.
@ -699,4 +740,5 @@ ggplot(data_with_clusters, aes(x = ExpT2, y = ExpT3, color = cluster)) +
# TODO : # TODO :
- Voir pourquoi des graphes se mettent après l'analyse d'eux-même c'est n'importe quoi

Binary file not shown.