silico.biotoul.fr
 

L2-L3 Bioinfo - TP Analyses statistiques des données (phénotypes,génotypes)

From silico.biotoul.fr

(Difference between revisions)
Jump to: navigation, search
 
(38 intermediate revisions not shown)
Line 1: Line 1:
= Analyses statistiques des données (phénotypes, génotypes) =
= Analyses statistiques des données (phénotypes, génotypes) =
-
Lors du TP précédent, vous avez manipulé une base de données comportant différentes sources d'informations concernant les lignées d'Arabettes analysées en traitement d'images.
+
Lors du TP précédent, vous avez manipulé une base de données comportant différentes sources d'informations concernant les lignées d'Arabettes analysées en traitement d'images, suite à l'infection par une bactérie pathogène.
-
Dans le cadre du présent TP, vous allez analyser le tableau de données généré à partir de la base de donnée, avec le logiciel d'analyses statistiques R.
+
Dans le cadre du présent TP, vous allez analyser le tableau de données généré à partir de la base de données, avec le logiciel d'analyses statistiques R ou RStudio.
<span style='color: #990000'>
<span style='color: #990000'>
-
Créer un répertoire de travail sur le bureau (par exemple TP3) et téléchargez le fichier de données [[Media:data_TP3.txt|données TP3]] (click droit de la souris -- enregistrer la cible sous...).
+
Créer un répertoire de travail sur le bureau (par exemple TP3) et téléchargez le fichier de données [[Media:data_for_TP3.txt|données TP3]] (click droit de la souris -- enregistrer la cible sous...).
-
</span> Ouvrez le logiciel R, changez le répertoire courant vers le répertoire contenant le fichier de données. Sous R, vous pouvez ouvrir un nouveau script qui contiendra vos commandes (vous pouvez exécuter une ligne de commande à partir du script par le raccourci clavier Ctrl+R)
+
</span> Sous RStudio, changez le répertoire courant vers le répertoire contenant le fichier de données. Pour cela, <span style='color: #990000;'>cliquez sur le menu <tt>Session</tt> puis <tt>Set Working Directory > Choose Directory</tt>.
 +
 
 +
<span style='color: #990000'> '''!! Si vous travaillez avec Rstudio Cloud, il suffit de vous connecter avec vos identifiants sur https://rstudio.cloud, et de créer un "New Project" !!''' </span>
== Lecture et exploration du tableau de données ==
== Lecture et exploration du tableau de données ==
-
 
Lecture:
Lecture:
<source lang='rsplus'>
<source lang='rsplus'>
-
arabido=read.table("data_TP3.txt", sep="\t", header=TRUE)
+
#arabido=read.table("data_for_TP3.txt", sep="\t", header=TRUE)
 +
</source>
 +
 
 +
ou directement à partir de l'URL du fichier (pratique si vous êtes sous Rstudio Cloud):
 +
<source lang='rsplus'>
 +
arabido=read.table("http://silico.biotoul.fr/site/images/6/63/Data_for_TP3.txt", stringsAsFactors=T, sep="\t", header=TRUE) # nécessite une connexion internet
</source>
</source>
Line 25: Line 31:
Il faut savoir que:
Il faut savoir que:
-
* pour les marqueurs de type "Gene_At" et "RetroTransp" c'est la présence/absence du locus qui est codée 0/1.
+
* pour les marqueurs de type "Gene_At" et "RetroTransp" c'est la présence/absence du locus qui est codée 1/0.
* pour les marqueurs de type SNP c'est le nucléotide présent qui est mentionné ("A ou G", "C ou A", etc...).
* pour les marqueurs de type SNP c'est le nucléotide présent qui est mentionné ("A ou G", "C ou A", etc...).
-
* pour les marqueurs de type SSR, c'est le nombre de répétitions qui est mentionné.
 
<span style='color: #990000'>
<span style='color: #990000'>
-
Quel est la taille du fichier ? Utilisez la fonction dim().
+
Quelles sont les dimensions du tableau ? Combien y-a-t-il de variables ? Pour cela utilisez la fonction dim().
-
Combien y-a-t-il de variables ?
+
Repérez les variables quantitatives (numériques) et les variables qualitatives (facteur, variable binaire). Pour cela vous pouvez utilisez par exemple la fonction summary(), ou str().  
-
Repérez les variables quantitatives (numériques) et les variables qualitatives ("facteurs").  
+
</span>
</span>
-
 
== Graphiques ==
== Graphiques ==
-
* Réalisez un graphique permettant de visualiser la corrélation entre la surface des feuilles et le nombre de racines latérales.
+
* Réalisez un graphique permettant de visualiser la corrélation entre la surface des feuilles et le nombre de racines latérales, en utilisant la fonction plot() [exemple: plot(x,y)].
-
* Réalisez un graphique permettant de visualiser la corrélation entre la surface des feuilles et la latitude; de même avec la longitude.
+
* Réalisez un graphique permettant de visualiser la corrélation entre la surface des feuilles et la latitude, de même avec la longitude, en utilisant la fonction plot().
-
* Réalisez un graphique permettant de visualiser l'effet de la présence/absence naturelle de la bactérie dans le pays d'origine des plantes, sur la surface foliaire.
+
* Réalisez un graphique permettant de visualiser l'effet de la présence/absence naturelle de la bactérie dans le pays d'origine des plantes, sur la surface foliaire, en utilisant la fonction boxplot() [exemple: boxplot(y~x)].
-
Utilisez les commandes plot() [exemple plot(x,y)] et boxplot() [exemple boxplot(y~x)] pour réaliser ces graphiques.
+
<span style='color: #990000'>
<span style='color: #990000'>
Line 52: Line 54:
-
* Calculez 2 à 2 le coefficient de corrélation entre la surface des feuilles, le nombre de racines latérales, la latitude, la longitude.
+
* Calculez 2 à 2 le coefficient de corrélation entre la surface des feuilles avec le nombre de racines latérales, puis avec la latitude et la longitude, en utilisant la fonction cor() [exemple: cor(x,y)].
<span style='color: #990000'>
<span style='color: #990000'>
Cela vous semble-t-il en cohérence avec les graphiques précédents?
Cela vous semble-t-il en cohérence avec les graphiques précédents?
Line 61: Line 63:
-
* Réalisez un test de comparaison des valeurs moyennes de la surface des feuilles pour les groupes génotypiques à chaque marqueur (test de Student). Pour cela, utilisez la commande t.test().
+
* Réalisez un test de comparaison des valeurs moyennes de la surface des feuilles pour les groupes génotypiques à chaque marqueur biallélique (test de Student). Pour cela, utilisez la commande t.test().
-
Utilisez le code suivant pour programmer une série de tests de Student sur différentes colonnes du tableau, et récupérer la p-valeur de chaque test.
+
Utilisez le code suivant pour programmer une série de tests de Student sur différentes colonnes du tableau, et interprétez chaque test grâce à la p-valeur donnée.
 +
 
 +
Premier test : surface foliaire vs. présence/absence de Gene_At1g01120 (qui est la colonne 8)
 +
 
 +
<source lang='rsplus'>
 +
t.test(Leaf_area ~ Gene_At1g01120)
 +
</source>
 +
 
 +
Pour automatiser un peu sur les colonnes restantes, on fait des itérations sur les noms des colonnes 9 à 15 :
<source lang='rsplus'>
<source lang='rsplus'>
-
pval=c()
+
for (i in names(arabido)[9:15]) {
-
for (i in c(8:15)) {
+
  cat(paste("Leaf_area vs.", i))
-
pval[i-8+1]=unlist(t.test(Leaf_area~data[,i])[3])
+
  print(t.test(Leaf_area~arabido[,i]))
}
}
-
data.frame(colnames(data)[8:15],pval)
 
</source>
</source>
Line 77: Line 86:
</span>
</span>
-
remarque: l'hypothèse du test de Student est l'égalité des moyennes des 2 groupes testés. On ne rejette pas cette hypothèse si la p-valeur est > 0.05.
+
rappels/éléments pour bien interpréter le test statistique:
 +
* l'hypothèse nulle (H0) du test de Student est l'égalité des moyennes des 2 groupes testés (ou plus précisément H0 = "la différence des moyennes est égale à 0"). On ne rejette pas cette hypothèse H0 si la p-valeur est > 0.05. On rejette cette hypothèse H0 en faveur de l'hypothèse alternative H1 ("il y a une différence significative entre les moyennes") si la p-valeur est < 0.05 (c'est le seuil d'erreur de 5%). La p-valeur peut s'interpréter pour ce test comme la probabilité d'observer, sous l'hypothèse H0 (où cette différence varie autour de 0 par effet d'échantillonnage), une différence de moyenne plus forte que celle observée sur les données.
 +
* la p-valeur peut aussi se définir plus généralement comme la probabilité de se tromper en rejetant l'hypothèse H0 alors que celle-ci est vraie. Au plus cette probabilité est faible (en particulier < 0.05), au moins on fait d'erreur en rejetant l'hypothèse nulle.
-
* Réalisez le même test mais avec le nombre de racines latérales.
+
* Réalisez enfin des graphiques permettant de visualiser les corrélations phénotype / génotype pour les marqueurs significativement associés aux valeurs phénotypiques de surface des feuilles (utilisez la fonction boxplot(y~x)].
-
<span style='color: #990000'>
+
-
Que remarquez-vous?
+
-
</span>
+
-
 
+
-
 
+
-
* Réalisez maintenant un test statistique de corrélation entre les valeurs phénotypiques (surface des feuilles, puis nombre de racines latérales) et le génotype aux marqueurs moléculaires multialléliques (2 marqueurs SSR)
+
-
Pour cela, utilisez les commandes cor() et cor.test() [l'hypothèse testée est qu'il n'y a pas de corrélation entre les 2 variables].
+
<span style='color: #990000'>
<span style='color: #990000'>
-
Que concluez-vous de ces analyses statistiques? Donnez une explication aux résultats observés, sachant que le marqueur SSR1 (non codant) se situe à 2000 bp du locus At5g46330, et que les autres marqueurs sont situés sur d'autres chromosomes.
+
Que concluez-vous de ces analyses statistiques? Donnez une explication aux résultats observés.
</span>
</span>
-
 
-
 
-
* Réalisez enfin des graphiques permettant de visualiser les corrélations phénotype / génotype pour les marqueurs significativement associés aux valeurs phénotypiques de surface des feuilles, et du nombre de racines latérales (utilisez les commandes plot() et boxplot()).
 
-
La présence/absence du locus At5g46330 semble conditionner la réponse à l'infection par la bactérie chez les plantes. Le prochain TP (TP4) consistera en l'étude de ce locus à l'aide de bases de données et d'analyses de séquences ...
 
 +
La présence/absence du locus At5g46330 semble conditionner la réponse à l'infection par la bactérie chez les plantes. Le prochain TP (TP4) consistera en l'étude de ce locus à l'aide de bases de données et d'analyses de séquences ...
= Liens =
= Liens =
* Site de R : http://www.r-project.org et sites miroirs (dont ceux en France) pour télécharger le logiciel et les librairies : https://cran.r-project.org/mirrors.html
* Site de R : http://www.r-project.org et sites miroirs (dont ceux en France) pour télécharger le logiciel et les librairies : https://cran.r-project.org/mirrors.html
* RStudio : https://www.rstudio.com
* RStudio : https://www.rstudio.com

Current revision as of 10:21, 15 February 2021

Contents

Analyses statistiques des données (phénotypes, génotypes)

Lors du TP précédent, vous avez manipulé une base de données comportant différentes sources d'informations concernant les lignées d'Arabettes analysées en traitement d'images, suite à l'infection par une bactérie pathogène. Dans le cadre du présent TP, vous allez analyser le tableau de données généré à partir de la base de données, avec le logiciel d'analyses statistiques R ou RStudio.

Créer un répertoire de travail sur le bureau (par exemple TP3) et téléchargez le fichier de données données TP3 (click droit de la souris -- enregistrer la cible sous...). Sous RStudio, changez le répertoire courant vers le répertoire contenant le fichier de données. Pour cela, cliquez sur le menu Session puis Set Working Directory > Choose Directory.

!! Si vous travaillez avec Rstudio Cloud, il suffit de vous connecter avec vos identifiants sur https://rstudio.cloud, et de créer un "New Project" !!


Lecture et exploration du tableau de données

Lecture:

#arabido=read.table("data_for_TP3.txt", sep="\t", header=TRUE)

ou directement à partir de l'URL du fichier (pratique si vous êtes sous Rstudio Cloud):

arabido=read.table("http://silico.biotoul.fr/site/images/6/63/Data_for_TP3.txt", stringsAsFactors=T, sep="\t", header=TRUE) # nécessite une connexion internet

Accéder directement aux variables simplement en donnant leurs noms:

attach(arabido)
names(arabido)


Il faut savoir que:

  • pour les marqueurs de type "Gene_At" et "RetroTransp" c'est la présence/absence du locus qui est codée 1/0.
  • pour les marqueurs de type SNP c'est le nucléotide présent qui est mentionné ("A ou G", "C ou A", etc...).

Quelles sont les dimensions du tableau ? Combien y-a-t-il de variables ? Pour cela utilisez la fonction dim(). Repérez les variables quantitatives (numériques) et les variables qualitatives (facteur, variable binaire). Pour cela vous pouvez utilisez par exemple la fonction summary(), ou str().

Graphiques

  • Réalisez un graphique permettant de visualiser la corrélation entre la surface des feuilles et le nombre de racines latérales, en utilisant la fonction plot() [exemple: plot(x,y)].
  • Réalisez un graphique permettant de visualiser la corrélation entre la surface des feuilles et la latitude, de même avec la longitude, en utilisant la fonction plot().
  • Réalisez un graphique permettant de visualiser l'effet de la présence/absence naturelle de la bactérie dans le pays d'origine des plantes, sur la surface foliaire, en utilisant la fonction boxplot() [exemple: boxplot(y~x)].

Qu'en déduisez-vous?


Calculs de corrélations

  • Calculez 2 à 2 le coefficient de corrélation entre la surface des feuilles avec le nombre de racines latérales, puis avec la latitude et la longitude, en utilisant la fonction cor() [exemple: cor(x,y)].

Cela vous semble-t-il en cohérence avec les graphiques précédents?


Tests statistiques de corrélation/association entre les valeurs phénotypiques des individus et leurs génotypes aux marqueurs moléculaires

  • Réalisez un test de comparaison des valeurs moyennes de la surface des feuilles pour les groupes génotypiques à chaque marqueur biallélique (test de Student). Pour cela, utilisez la commande t.test().

Utilisez le code suivant pour programmer une série de tests de Student sur différentes colonnes du tableau, et interprétez chaque test grâce à la p-valeur donnée.

Premier test : surface foliaire vs. présence/absence de Gene_At1g01120 (qui est la colonne 8)

t.test(Leaf_area ~ Gene_At1g01120)

Pour automatiser un peu sur les colonnes restantes, on fait des itérations sur les noms des colonnes 9 à 15 :

for (i in names(arabido)[9:15]) {
  cat(paste("Leaf_area vs.", i))
  print(t.test(Leaf_area~arabido[,i]))
}

Essayez de comprendre ce code. Que concluez-vous de ces analyses statistiques?

rappels/éléments pour bien interpréter le test statistique:

  • l'hypothèse nulle (H0) du test de Student est l'égalité des moyennes des 2 groupes testés (ou plus précisément H0 = "la différence des moyennes est égale à 0"). On ne rejette pas cette hypothèse H0 si la p-valeur est > 0.05. On rejette cette hypothèse H0 en faveur de l'hypothèse alternative H1 ("il y a une différence significative entre les moyennes") si la p-valeur est < 0.05 (c'est le seuil d'erreur de 5%). La p-valeur peut s'interpréter pour ce test comme la probabilité d'observer, sous l'hypothèse H0 (où cette différence varie autour de 0 par effet d'échantillonnage), une différence de moyenne plus forte que celle observée sur les données.
  • la p-valeur peut aussi se définir plus généralement comme la probabilité de se tromper en rejetant l'hypothèse H0 alors que celle-ci est vraie. Au plus cette probabilité est faible (en particulier < 0.05), au moins on fait d'erreur en rejetant l'hypothèse nulle.


  • Réalisez enfin des graphiques permettant de visualiser les corrélations phénotype / génotype pour les marqueurs significativement associés aux valeurs phénotypiques de surface des feuilles (utilisez la fonction boxplot(y~x)].

Que concluez-vous de ces analyses statistiques? Donnez une explication aux résultats observés.



La présence/absence du locus At5g46330 semble conditionner la réponse à l'infection par la bactérie chez les plantes. Le prochain TP (TP4) consistera en l'étude de ce locus à l'aide de bases de données et d'analyses de séquences ...

Liens