silico.biotoul.fr
 

M1 Traitement de Donnees Biologiques - TP 4 R

From silico.biotoul.fr

(Difference between revisions)
Jump to: navigation, search
Line 123: Line 123:
-
==<span style='color: #990000;'>REMARQUE IMPORTANTE: si les échantillons ne suivent pas la normalité: </span>==
+
==<span style='color: #990000;'>REMARQUE IMPORTANTE, si les échantillons ne suivent pas la normalité: </span>==
On peut faire une ANOVA non paramétrique avec le test de Kruskall-Wallis:
On peut faire une ANOVA non paramétrique avec le test de Kruskall-Wallis:
<source lang='rsplus'>
<source lang='rsplus'>

Revision as of 09:46, 26 September 2016

Contents

Tests statistiques: Analyse de la Variance (ANOVA)

L'Analyse de la Variance (ANOVA) est une extension du test de Student de comparaison de moyennes, à K>2 groupes (K=2 groupes: test de Student). Une même variable quantitative est donc mesurée dans K>2 groupes. Cependant, avant de se lancer dans une comparaison de groupes 2 à 2 afin de détecter des différences, l'intérêt particulier de l'ANOVA est de tester s'il y a un effet général du (ou des) facteur(s) testé(s). Les groupes sont donc des modalités (ou niveaux) d'un ou plusieurs facteurs (i.e. variable(s) qualitative(s)). L'écart d'un ou plusieurs groupes par rapport à la moyenne générale est estimé par la variance inter-groupe. En tenant compte de la variance intra-groupe, un test de Fischer sur ces 2 estimateurs de variance est effectué. Le tableau de l'ANOVA donne le résultat de ce test de Fischer pour chaque facteur (variable qualitative) testé.

Dans ce TP, nous verrons:

  • l'ANOVA à 1 facteur
  • l'ANOVA à 2 facteurs

ATTENTION: l'ANOVA étant un test statistique, il est là aussi crucial de bien connaître l'hypothèse nulle du test (H0) pour pouvoir correctement interpréter ! http://silico.biotoul.fr/site/index.php?title=M1_Traitement_de_Donnees_Biologiques_-_TP_4_R&action=edit

Créez tout d'abord un répertoire de travail sur le bureau (par exemple TDB-TP4) et commencez par télécharger le fichier source que vous allez utiliser et compléter pour générer le compte rendu de TP : M1.TDB.TP_tests_ANOVA_R.Rmd (click droit de la souris -- enregistrer la cible sous...). Ouvrez le logiciel RStudio et chargez ce fichier puis lancez sa compilation pour voir le compte rendu. Pour cela cliquez sur le bouton Knit HTML ou bien utilisez la combinaison de touches Ctrl + shift + K.

ANOVA à un facteur (une variable qualitative)

Dans cet exemple, nous allons évaluer si la résistance à un pathogène donné varie pour des plantes de 4 lignées différentes de l'espèce modèle Medicago truncatula. Avant de comparer, les scores moyens de résistance, nous effectuons une ANOVA à 1 facteur pour évaluer s'il y a un effet "lignée" sur le score de résitance. Si c'est le cas, nous comparerons ensuite les lignées 2 à 2 afin de déterminer la(les)quelle(s) se différencie(nt) des autres. Téléchargez et sauvegardez le fichier resistance.txt dans le répertoire crée pour ce TP (click droit de la souris -- enregistrer la cible sous...).

Les données (petits calculs et graphiques)

Lecture

resistance = read.table("resistance.txt",header=T); resistance
attach(resistance);names(resistance)

Affichage des effectifs des différents groupes (niveaux du facteur):

table(lignee)

Affichage du score moyen par groupe avec la fonction tapply():

tapply(score,lignee,mean)

... et même un résumé des données par groupe:

tapply(score,lignee,summary)

Représentations graphiques des données Affichage de l'histogramme des scores, tout groupes confondus:

hist(score,breaks=15)
# un commentaire ?

Affichage de la "boîte à moustache" des scores pour chaque lignée:

boxplot(score~lignee,col="green",ylab="score")

Ajoutez ces parties à votre compte rendu.

Tests préalables à l'ANOVA

Avant de procéder à l'ANOVA, il faut vérifier la normalité des données de chaque groupe, et l'homogénéité des variances des groupes:

Test d'adéquation à la loi normale (H0 = "les données suivent la loi Normale")

Test de Shapiro

shapiro.test(score[lignee=="HM008"])
shapiro.test(score[lignee=="A17"] )
shapiro.test(score[lignee=="DZA45"])
shapiro.test(score[lignee=="HM013"])
# remarque: on anticipe un peu, mais on peut aussi tester la normalité des données sur les résidus de l'ANOVA:
shapiro.test(residuals(aov(score~lignee)))

Conclusion ?

Test d'homogénéité des variances intra-groupes (H0 = "les variances sont égales")

Test de Bartlett de comparaison de plus de 2 variances

bartlett.test(score~lignee)

Conclusion ?

ANOVA à 1 facteur (le facteur est la variable "lignee")

On utilise la commande aov():

res = aov(score~lignee)

IMPORTANT: le tableau de l'ANOVA s'obtient avec la fonction summary():

summary(res)  # ou summary(aov(score~lignee))

Conclusion ?

On peut visualiser la différence des moyennes de chaque groupe avec la moyenne générale avec:

model.tables(res)

Si l'ANOVA détecte un effet significatif du facteur, on chercher les inégalités de moyennes: Tests de Student pour comparer les groupes 2 à 2

t.test(score[lignee=="DZA45"],score[lignee=="HM013"],var.equal=T)
t.test(score[lignee=="DZA45"],score[lignee=="HM008"],var.equal=T)
t.test(score[lignee=="DZA45"],score[lignee=="A17"],var.equal=T)
t.test(score[lignee=="A17"],score[lignee=="HM013"],var.equal=T)
t.test(score[lignee=="HM008"],score[lignee=="HM013"],var.equal=T)
t.test(score[lignee=="A17"],score[lignee=="HM008"],var.equal=T)

IMPORTANT: pour limiter le taux de faux positifs lors de tests multiples, et pour faire toutes ces comparaisons avec une seule commande, on fait un test de comparaisons multiples de Student avec correction de la p-valeur:

pairwise.t.test(score,lignee,p.adjust.method="bonferroni")

On peut aussi faire un test de Duncan (l'intérêt étant qu'il propose de classer les groupes en groupes similaires a, b, etc...):

# le test nécessite de charger la librairie laercio
library(laercio)
LDuncan(res,conf.level = 0.99)

Conclusion de ces analyses?

Ajoutez ces parties à votre compte rendu.


REMARQUE IMPORTANTE, si les échantillons ne suivent pas la normalité:

On peut faire une ANOVA non paramétrique avec le test de Kruskall-Wallis:

kruskal.test(score~lignee)

Puis des test non paramétrique de Wilcoxon/Mann-Whitney, pour comparer les groupes 2 à 2

wilcox.test(score[lignee=="HM008"],score[lignee=="A17"])
wilcox.test(score[lignee=="HM008"],score[lignee=="DZA45"])

... Et, pour les mêmes raisons que pour le test multiple de Student, faire un test multiple de Wilcoxon/Mann-Whitney:

pairwise.wilcox.test(score,lignee)
pairwise.wilcox.test(jitter(score),lignee,p.adjust.method="bonferroni") # pour résoudre le problème des rangs identiques dans le test, on peut rajouter un bruit aux valeurs







Ajoutez ces parties à votre compte rendu.



 


Rappel de la procédure (vue en cours):

Image:test_homogeneite.jpeg



Tests paramétriques d'adéquation et tests d'homogénéité (sur une variable quantitative)

Nous allons intégrer ces tests dans le contexte d'une même analyse statistique.

Dans cet exercice, nous allons chercher à comparer les valeurs d'une variable quantitative mesurée dans 2 échantillons 1 et 2, à l'aide d'un test de Student de comparaison de moyennes de 2 échantillons. La question posée est: la taille moyenne (à un temps de donné) de plantules d' A. thaliana de génotype "sauvage" (Col_0) et d'un mutant pour le gène X1 (Mut_X1) est-elle la même (hypothèse H0)?

Rappel de la procédure (vue en cours):

Image:test_homogeneite.jpeg

Les données (petits calculs et graphiques)

# Vecteurs des tailles des plantes
Col_0=c(4.30,4.25,3.50,3.35,4.30,3.75,3.55,4.10,3.95,4.55,4.25,3.75,3.85,4.15,3.55,4.75,3.95,3.65)
Mut_X1=c(3.06,4.05,3.95,3.40,3.80,3.95,3.65,4,3.85,3.95,3.65,3.75,3.4)
# Valeurs moyennes
mean(Col_0)
mean(Mut_X1)
# Représentation graphique des données
boxplot(Col_0,Mut_X1,names=c("Col_0","Mut_X1"),col=c("white","darkgreen"),ylab="taille (cm)")
abline(h=mean(Col_0),col="black",lty=3,lwd=2)
abline(h=mean(Mut_X1),col="green",lty=3,lwd=2)
legend("topright", legend = c("Mut_X1","Col_A" ), text.col = c("darkgreen","black"))

Test d'adéquation à la loi normale (H0 = "les données suivent la loi Normale")

Test de Shapiro

shapiro.test(Col_0)
shapiro.test(Mut_X1)

Conclusion?

Test d'homogénéité des variances (H0 = "les variances sont égales")

Test de Fischer

var.test(Col_0,Mut_X1)

Conclusion?

Test d'homogénéité (de comparaison) des moyennes (H0 = "les moyennes sont égales")

Test de Student bilatéral (H1 = "il y a une différence de moyenne entre Col_0 et Mut_X1")

# dans la commande t.test on peut spécifier si les variances des échantillons sont égales (var.equal=T) ou non(var.equal=F)
# l'hypothèse alternative est "two.sided" par défaut
t.test(Col_0,Mut_X1,var.equal = T)

Test de Student unilatéral (H1 = "la moyenne de Col_0 > (ou <) à la moyenne de Mut_X1")

# dans la commande t.test, on va spécifier l'hypothèse alternative: alternative = "greater" ou "less". Quel terme allez-vous mettre?
t.test(Col_0,Mut_X1,var.equal = T, alternative = "???")

Conclusion finale?

Ajoutez ces parties à votre compte rendu.


Test non paramétriques d'homogénéité (sur une variable quantitative)

Si les données ne suivent pas la loi Normale dans chaque échantillon, nous pouvons effectuer le test non paramétrique de Mann & Whitney

Dans cet exercice, nous cherchons à comparer l'expression d'un gène de défense chez la plante en condition d'infection par un microorganisme pathogène foliaire, avec la condition "contrôle" (plante non infectée).

Les données

Les données sont les valeurs d'expression normalisée du gène pour 3 réplicats techniques sur 3 réplicats biologiques de tissus foliaire.

non_infected=c(0.021,0.15,0.023,0.03,0.022,0.05,0.035,0.1,0.03)
infected=c(1.22,1.12,1.06,1.04,0.86,1.24,1.96,0.9,2.5)
mean(non_infected)
mean(infected)

Test d'adéquation à la loi normale

# Test de Shapiro
shapiro.test(infected)
shapiro.test(non_infected)

Test non paramétrique d'homogénéité

# Test de Mann & Whitney (équivalent non paramétrique du test de Student)
wilcox.test(infected,non_infected)                        # bilatéral
wilcox.test(infected,non_infected,alternative="greater")  # unilatéral

Conclusion?


Ajoutez tout cela au compte rendu de TP avant de l'envoyer à votre enseignant par mail (bonhomme@lrsv.ups-tlse.fr ou barriot@biotoul.fr). Le compte rendu est à envoyer avant de commencer le TP5. Envoyez les 2 fichiers (.Rmd et .html). Envoyez-vous aussi le mail en copie pour pouvoir vérifier que tout est bien passé. Mettez un titre tel que "Compte rendu TP4 TDB de -et votre Nom et Prénom-".

Liens