ANOVA non paramétrique à un facteur

Cet article est le troisième volet dédié à l’analyse de variance à un facteur. Après l’article sur la théorie de l’ANOVA à un facteur, et celui sur la réalisation de cette méthode avec le logiciel R, cet article est dédié aux solutions envisageables lorsque les hypothèses de validité de l’ANOVA à un facteur ne sont pas vérifiées.

Pour rappel, l’ANOVA à un facteur est une méthode statistique extrêmement répandue, qui est employée pour comparer plus de deux moyennes.

Table des matières

Les conditions de validité de l'ANOVA à un facteur

Comme expliqué dans le  premier article, pour que les résultats de l’ANOVA à
un facteur soient valides, trois hypothèses doivent être vérifiées :

  • les réponses observées, pour une modalité donnée du facteur étudié, doivent être indépendantes les unes des autres, et indépendantes des réponses des autres modalités.
  • les résidus doivent être distribués selon une loi Normale, de moyenne 0.
  • les résidus doivent être distribués de façon homogène. Autrement dit, les variances des résidus relatives aux différentes modalités de la variable explicative (ou indépendante) ne doivent pas être trop différentes.

Ces hypothèses sont parfois assemblées sous l’acronyme « iid », qui veut dire « indépendamment et identiquement distribués ».

Que faire lorsque les données ne sont pas indépendantes ?

Deux types de non-indépendance peuvent être rencontrés. Le premier est une non-indépendance des données à l’intérieur d’une modalité du facteur étudié. Par exemple, dans un essai clinique visant à évaluer l’efficacité de trois molécules sur la réduction du cholestérol, on pourrait avoir 10 mesures pour chaque molécule. Si les mesures pour une molécule donnée sont faites sur le même individu, à différents temps par exemple, alors les données ne sont pas indépendantes.

Molécule 1Molécule 2Molécule 3
individu 1individu 2individu 3
individu 1individu 2individu 3
individu 1individu2individu 3
individu 1individu 2individu 3

Exemple de non-indépendance des données pour cause d’observations réalisées sur un même individu.

Ce genre de non-indépendance peut être mis en évidence par le test de Durbin Watson.

Un deuxième cas de figure, sans doute le plus classique, est celui de la non-indépendance des données entre les modalités. On pourrait rencontrer cette situation si les mesures sont réalisées sur 10 sujets différents, mais que chaque sujet reçoit les trois traitements. On peut résumer ce cas de figure, dans le tableau suivant :

Molécule 1Molécule 2Molécule 3
individu 1individu 1individu 1
individu 2individu 2individu 2
individu 3individu 3individu 3
individu nindividu nindividu n

De façon générale, la non indépendance des données se juge principalement en prenant connaissance du protocole expérimental.

En cas de non-indépendance, l’ANOVA à un facteur n’est pas adaptée pour comparer les moyennes de k groupes. Dans cette situation, d’autres méthodes, comme des modèles mixtes doivent être employées.

Pour une bonne initiation aux modèles mixtes je vous recommande le Rbook (chpt 19). Si vous travaillez dans le domaine environnemental, le livre de référence est Mixed Effects Models and Extensions in Ecology with R, d’Alain F. Zuur et Elena N. Ieno.

Un autre de livre de référence pour les modèles mixtes et le livre Mixed-Effects Models in S and
S-Plus de Bates et Pinheiro, mais il est assez technique.

Que faire lorsque les hypothèses de normalité et d'homogénéité des résidus ne sont pas satisfaites ?

L’évaluation de ces hypothèses est décrite dans cet article. Elles sont souvent considérées ensemble car le rejet de l’une ou de l’autre de ces hypothèses conduit, généralement, à appliquer une alternative identique.

Ainsi, si l’hypothèse de normalité et/ou l’hypothèse d’homogénéité des résidus est rejetée, deux solutions simples peuvent être appliquées. La première est l’utilisation d’une ANOVA non paramétrique, aussi appelée test de Kruskall-Wallis. Les comparaisons multiples (toutes les moyennes deux à deux, ou toutes les moyennes vs la moyenne du groupe contrôle) sont alors réalisées avec des tests de Wilcoxon (qui sont des test non paramétriques), et un ajustement des p-values.

L’autre solution envisageable est une ANOVA par un test de permutation. Les comparaisons multiples étant réalisées comme précédemment, à l’aide de tests de Wilcoxon.

Une transformation log de la réponse, ou encore une transformation de type Box-Cox, sont parfois utilisées. Néanmoins, celles-ci conduisent à ne plus travailler sur les données brutes. Dans la mesure où il existe des solutions permettant de conserver les mesures observées, comme l’ANOVA non paramétrique, ou l’ANOVA basée sur les permutations, il me semble préférable de privilégier ces dernières.

Lorsque seule l’hypothèse d’homogénéité est rejetée, il est encore possible d’utiliser une structure de variance, ou encore d’utiliser des estimateurs de type « sandwich ». De mon point de vue, dans le contexte de l’ANOVA à un facteur, ces approches sont inutiles.

Au final, si l’une ou l’autre des hypothèses n’est pas satisfaite, ou même les deux, je vous recommande d’utiliser une ANOVA non paramétrique, ou une ANOVA basée sur un test de permutation (rien n’empêche de faire les deux pour s’assurer que les conclusions sont identiques). Si, ensuite, vous avez besoin de réaliser des comparaisons multiples, utilisez des tests de Wilcoxon.

Je vous montre comment réaliser ces différentes approches avec le logiciel R dans le paragraphe suivant.

L' ANOVA non paramétrique (test de Kruskal Wallis)

myeloma <- read.delim("https://raw.githubusercontent.com/kassambara/data/master/myeloma.txt")
 

Visualisation des données

library(ggplot2)
ggplot(myeloma ,aes(x=group, y=DEPDC1, colour=group,fill=group))+
geom_jitter(width=0.25)+
geom_boxplot(alpha=0.25, outlier.alpha=0) +
stat_summary(fun.y=mean, colour="black", geom="point",
shape=18, size=3,show.legend = FALSE)+
theme_classic()+
theme(legend.position="none")+
theme(axis.text = element_text(angle=30, hjust=1, vjust=1)) 
anova

NB : les losanges noirs représentent les moyennes

Les boxplots de certains groupes étant plus étendus que d’autres, cela laisse penser que les résidus ne seront probablement pas homogènes. De plus, la présence d’outliers dans les groupes cyclin.d.1, cyclin.d.2 et maf, laisse également envisager un défaut de normalité des résidus

Ajustement de l'ANOVA paramétrique (uniquement pour vérifier que les conditions ne sont pas satisfaites)

myeloma_an <- lm(DEPDC1~group, data=myeloma) 

Evaluation des hypothèses

Evaluation de l'indépendance
library(car)
durbinWatsonTest(myeloma_an)

## lag Autocorrelation D-W Statistic p-value
## 1 -0.08642592 2.170027 0.158
## Alternative hypothesis: rho != 0 

La pvalue étant supérieure à 0.05, on ne rejette pas l’hypothèse de l’indépendance des résidus.

Evaluation de l'hypothèse de normalité des résidus
plot(myeloma_an,2) 
anova avec R
shapiro.test(residuals(myeloma_an))

##
## Shapiro-Wilk normality test
##
## data: residuals(myeloma_an)
## W = 0.92014, p-value = 1.75e-10

Le QQplot met en évidence un défaut de normalité, tout comme le test de Shapiro Wilk qui rejette l'hypothèse de normalité (la pvalue est < 0.05). 

Le QQplot met en évidence un défaut de normalité, tout comme le test de Shapiro Wilk qui rejette l’hypothèse de normalité (la pvalue est < 0.05).

Evaluation de l'hypothèse d'homogénéité des résidus
plot(myeloma_an,3 ) 
anova avec R
bartlett.test(residuals(myeloma_an)~myeloma$group)

##
## Bartlett test of homogeneity of variances
##
## data: residuals(myeloma_an) by myeloma$group
## Bartlett's K-squared = 89.032, df = 6, p-value < 2.2e-16 

Le plot des résidus standardisés, en fonctions des valeurs prédites par le modèle ANOVA ( cad les moyennes de chaque groupe), montre que les dispersions des résidus sont relativement différentes. L’hypothèse de l’homogénéité des résidus est rejetée par le test de Bartlett, puisque la pvalue est inférieure à 0.05.

Ajustement de l'ANOVA non paramétrique (test de Kruskal- Wallis)

Dans cette situation de rejet des hypothèses de normalité et d’homogénéité des résidus, il est possible de comparer les moyennes à l’aide d’une ANOVA non paramétrique, ou test de Kruskal-Wallis

kruskal.test(DEPDC1 ~group, data=myeloma)

##
## Kruskal-Wallis rank sum test
##
## data: DEPDC1 by group
## Kruskal-Wallis chi-squared = 57.611, df = 6, p-value = 1.374e-10 

La pvalue du test étant inférieure à 0.05, l’hypothèse de l’égalité des moyennes est rejetée. On conclut donc que les moyennes des sept groupes sont globalement différentes. Afin d’évaluer quelles sont les moyennes qui diffèrent entre elles, il est nécessaire de réaliser des comparaisons multiples. Lorsque les hypothèses de normalité et d’homogénéité des résidus sont rejetées, ces comparaisons multiples sont réalisées à l ‘aide de tests de Wilcoxon, qui sont également des tests non-paramétriques. Il existe généralement deux types de comparaisons multiples :

  • celles qui consistent à comparer toutes les moyennes deux à deux, il
    s’agit d’une procédure de Tukey.
  • celles qui consistent à comparer la moyenne de chacun des groupes à
    une même moyenne, celle du groupe contrôle.Il s’agit ici de la
    procédure de Dunnett.

Comparaisons multiples : toutes les comparaisons deux à deux (procédure de Tukey)

Les comparaisons multiples sont réalisées par des tests de wilcoxon, en employant la fonction pairwise.wilcox.test.

pp <- pairwise.wilcox.test(myeloma$DEPDC1, myeloma$group,p.adjust.method ="holm" )
Warning message:
In wilcox.test.default(xi, xj, paired = paired, ...) :
  impossible de calculer la p-value exacte avec des ex-aequos

pp

    Pairwise comparisons using Wilcoxon rank sum test 

data:  myeloma$DEPDC1 and myeloma$group 

                 cyclin.d.1 cyclin.d.2 hyperdiploid low.bone.disease maf    mmset 
cyclin.d.2       1.0000     -          -            -                -      -     
hyperdiploid     0.0534     0.0351     -            -                -      -     
low.bone.disease 0.0650     0.0650     1.0000       -                -      -     
maf              1.0000     1.0000     0.1306       0.1503           -      -     
mmset            1.0000     1.0000     0.0271       0.0650           1.0000 -     
proliferation    0.0650     1.7e-05    1.9e-09      5.5e-09          0.1306 0.0014

P value adjustment method: holm 

A partir de ces tests multiples, il est possible d’obtenir facilement la figure suivante. Le code est disponible dans cet article.

anova à un facteur

Les lettres permettent d’indiquer la significativité des différences des moyennes. La convention étant que si deux moyennes partagent une même lettre alors elles ne sont pas significativement différentes, et au contraire, si deux moyennes ne partagent pas une même lettre alors elles sont significativement différentes.

Comparaisons multiples : toutes les comparaisons au témoin (procédure de Dunnett)

La méthode la plus simple consiste à :

  1. Réaliser toutes les comparaisons deux à deux, sans ajustement
  2. sélectionner les pvalues correspondant à toutes les comparaisons
    avec le groupe contrôle
  3. ajuster ces p-values

Pour illustrer cela, nous allons considérer que le groupe témoin est le groupe « proliferation »


# réalisation de toutes les comparaisons deux à deux sans ajuster les p-values
pp_all <- pairwise.wilcox.test(myeloma$DEPDC1, myeloma$group,p.adjust.method ="none" )
 
pp_all

    Pairwise comparisons using Wilcoxon rank sum test 

data:  myeloma$DEPDC1 and myeloma$group 

                 cyclin.d.1 cyclin.d.2 hyperdiploid low.bone.disease maf    mmset  
cyclin.d.2       0.2667     -          -            -                -      -      
hyperdiploid     0.0036     0.0022     -            -                -      -      
low.bone.disease 0.0052     0.0047     0.6315       -                -      -      
maf              0.8193     0.5625     0.0145       0.0188           -      -      
mmset            0.6805     0.5016     0.0016       0.0051           0.7861 -      
proliferation    0.0046     8.9e-07    8.9e-11      2.8e-10          0.0131 7.8e-05

P value adjustment method: none
# récupération des pvalues des tests de wilcoxon entre la moyenne du groupe contrôle et toutes les autres moyennes.
pp_dunn <- pp_all[[3]][6,]
pp_dunn
cyclin.d.1 cyclin.d.2 hyperdiploid low.bone.disease maf 
4.645628e-03 8.942883e-07 8.856408e-11 2.759132e-10 1.305730e-02 
mmset 
7.773947e-05
> # ajustement de ces p-values par la méthode de Holm
> pp_dunn_adjust <- p.adjust(pp_dunn,method="holm") > pp_dunn_adjust
      cyclin.d.1       cyclin.d.2     hyperdiploid low.bone.disease              maf 
    9.291257e-03     3.577153e-06     5.313845e-10     1.379566e-09     1.305730e-02 
           mmset 
    2.332184e-04 

ANOVA par tests de permutation

Lorsque les hypothèses de normalité et/ou d’homogénéité sont rejetées, une autre solution envisageable est le recours à un test de permutation. Pour plus d’informations sur les tests de permutations, vous pouvez consulter cet article.


library(lmPerm)
Warning message:
le package ‘lmPerm’ a été compilé avec la version R 3.5.1 

set.seed(777)
myeloma_an_perm <- aovp(DEPDC1~group,perm="Prob", data=myeloma)
[1] "Settings:  unique SS "

summary(myeloma_an_perm)
Component 1 :
             Df R Sum Sq R Mean Sq Iter  Pr(Prob)    
group         6  4240344    706724 5000 < 2.2e-16 ***
Residuals   249 12189252     48953                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Là encore, l’ANOVA par permutation met en évidence au moins une différence significative entre les moyennes des différents groupes.

Les comparaisons multiples peuvent se conduire comme expliqué précédemment dans la partie de l’anova non paramétrique ou test de Kruskal Wallis.

J’espère qu’avec cette série d’articles sur l’ANOVA à un facteur, cette approche statistique n’aura plus de secret pour vous et que sa réalisation avec R ne vous posera plus de problèmes.

Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏

Poursuivez votre lecture

Crédit Photo : geralt

16 Responses

  1. Bonjour,

    merci pour cet article fort utile, car cette situation est souvent rencontrée, sans vraiment avoir d’outils pour y remédier!
    J’ai toutefois une question : ces tests/ méthodes s’appliquent-elles dans le cas d’une anova à > 1 facteurs ? Si oui, qu’en est-il du calcul des moyennes corrigées ?

    Merci!

    1. Bonjour,
      merci pour votre commentaire. A ma connaissance, il n’existe pas de méthode non paramétrique alternative à l’ANOVA à deux facteurs. Je pense qu’il doit être possible d’utiliser un test de permutation mais il faut peut être recoder les variables. Sinon, il reste l’utilisation d’une transformation log ou de type box cox…
      Je vais essayer de regarder cela de plus prés et d’écrire un article sur l’ANOVA à deux facteurs dans les prochaines semaines.

  2. Merci pour cette série d’articles sur l’ANOVA à 1 facteur; c’est très clair 🙂
    Concernant la non-indépendance des données, on est en plein dans cette problématique lorsqu’on travaille sur des études cliniques avec un design en cross-over ? quel modèle utilisé pour comparer les données ?
    Merci !!

  3. Bonjour, merci pour vos cours. Ils sont très bien expliqué mais j’ai une question concernant les problèmes de l’anova : Si j’ai les tests d’indépendance et de normalité qui ne sont pas respectés et le seul qui est respecté c’est l’homogénéité. Je dois appliquer quelle méthode ?
    Merci d’avance et bonne journée.

    1. Bonjour Camille, je vous conseille de vous assurer que vos données ne sont pas indépendantes en permutant les lignes avant de refaire votre anova. Vous pouvez utiliser la commande :
      set.seed(1234)
      rows <- sample(nrows(mydata)) mydata <- mydata[rows,]Si les données ne sont pas indépendantes, il faut partir sur un modèle mixte à priori afin d'introduire une matrice de corrélation des résidus, et il faudra sans soute utiliser une transfo log pour s'approcher de la normalité et de l'homogénéité des résidus. C'est plus complexe. Vous trouverez des info dans le livre d'Alain Zuur (mixed effetct models and extension in ecology with R).Si c'est seulement la normalité et ou l'homogénéité qui n'est pas satisfaite, vous pouvez faire une anova non paramétrique (test de kruskal Wallis). Bonne continuation.

      1. Bonjour,
        Je suis dans un cas où j’ai de la dépendance dans mon jeu de données, et les résidus de mon modèle linéaire mixte ne suivent pas une loi normale. Je me demande quel modèle serait approprié et si l’utilisation d’un Kruskal-Wallis est possible sur des données dépendantes.
        Un grand merci pour toutes les explications que vous fournissez. C’est toujours très clair !

  4. Bonjour! Franchement c’est claire votre cours,je vous adore et j’espère que je serai aussi bonne statisticienne que vous, je vous respecte beaucoup…Merci énormément pour vos explications si détaillée…

  5. Bonjour,

    Tout d’abord merci pour vos cours sur ce blog, ils me sont vraiment utiles pour progresser sur R !

    Je voulais savoir, dans le 4.4.1, quelle est la différence entre le test de wilcoxon et le test de Tuckey ? Pourquoi réalisons nous le test de wilcoxon au lieu de Tuckey s’il vous plaît ? (Tuckey utilisé pour l’ANOVA a 1 facteur)

    Je vous remercie par avance,
    Belle journée.

    1. Bonjour,

      l’article est dédié à l’ANOVA non paramétrique. Dans cette situations les comparaisons multiples sont basées sur des tests de wilcoxon, qui sont des tests non paramétriques, et comme on veut les faire deux à deux, on parle de PROCEDUREde Tukey (c’est la procédure qui consiste à faire toutes les comparaisons deux à deux, alors que le procédure de Dunnet consiste à faire toutes les comparaisons par rapport à un contrôle).
      Bonne continuation.

  6. Bonjour,

    Jai une question par rapport à l’indépendance des données.
    Imaginons, je compte les oiseaux d’eau sur 1 lac 1 groupe de 4 lacs en période migratoire tout les 5 jours (le comptage du lac seul et du groupe de 4 lacs ne sont jamais le même jour et en supposant que les oiseaux comptés ne sont jamais les mêmes du à la migration) Au final j’ai 10 replicats pour chaque lac obtenue sur une période de 3 mois
    (Mon but est de déterminer si il y a une différence significative de la richesse spécifique par exemple en fonction des lacs, soit 5 lacs au total)

    Est ce que mes données sont considérées comme indépendantes ou bien il y a pseudo réplication spatiale ? (j’ai un peu commencé à lire le Rbook)

    Cordialement.

    1. Bonjour,

      Je ne sais pas trop, c’est un plan dont je n’ai pas l’habitude, je préfère ne pas vous dire de bêtises…
      Si un spécialiste de ce genre d’étude voit le commentaire, qu’il n’hésite pas à y répondre.
      Merci

  7. Merci pour l’article. C’est intéressant.
    Quel est la différence entre le test de Kruskal Wallis et celui Wilcoxon?

    1. Le test de Wilcoxon permet de comparer deux groupes (c’est la variante non paramétrique du test de Student) et le test de Kruskal-Wallis permet de comparer plus de 2 groupes (c’est la variante non paramétrique de l’anova).

  8. Bonjour,
    J’ai récemment pris connaissance du test de Dunn. Il est pertinent lorsqu’on mène un test post-hoc suite à un test de Kruskal-Wallis : il est basé sur les rangs de l’ensemble des groupes et non pas simplement sur les rangs de deux groupes à la fois.

    Personnellement, j’ai pu observer un test de Kruskal-Wallis significatif et un test post-hoc de Wilcoxon-Mann-Whitney qui ne permettait pas d’établir une différence significative entre au moins deux groupes. Par contre, le test post-hoc de Dunn permettait d’établir une différence significative entre au moins deux groupes – ce qui est cohérent avec le test de Kruskal-Wallis. Pour cause (de ce que j’ai compris), le test de Dunn utilise la somme des rang sur l’ensemble des groupes (comme le test de Kruskal-Wallis) plutôt que les sommes des rangs des échantillons deux-à-deux (Wilcoxon-Mann-Whitney). C’est pourquoi il est souvent cité comme plus « approprié’ lors de comparaisons multiples suite à un test de Kruskal-Wallis.

    Avez-vous déjà utilisé ce test post-hoc auparavant ? Pensez-vous qu’il soit effectivement une meilleure alternative que le test de Wilcoxon-Mann-Whitney ?

    Avec R, vous pouvez le réaliser avec la commande suivant :
    install.packages(‘dunn.test’)
    library(dunn.test)
    dunn.test (x, g=NA, method=p.adjustment.methods, kw=TRUE, label=TRUE,
    wrap=FALSE, table=TRUE, list=FALSE, rmc=FALSE, alpha=0.05, altp=FALSE)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.