10.1 Le danger des tests multiples
Les tests t de Student et de Wilcoxon sont limités à la comparaison de deux populations. Poursuivons notre analyse des crabes L. variegatus. Rappelez-vous, nous avons deux variétés (variable species
, B
pour bleue et O
pour orange). Si nous voulons comparer simultanément les mâles et les femelles des deux variétés, cela nous fait quatre sous-populations à comparer (nous utilisons ici la fonction paste()
qui rassemble des chaînes de caractère avec trait comme caractère séparateur sep ="-"
pour former une variable facteur à quatre niveaux, B-F
, B-M
, O-F
, O-M
). Nous transformons cette variable en facteur à l’aide de factor()
et nous ajoutons un label avec labelise()
.
crabs <- read("crabs", package = "MASS", lang = "fr")
crabs %>.%
mutate(., group = labelise(
factor(paste(species, sex, sep = "-")),
"Groupe espèce - sexe", units = NA)) ->
crabs2
La Fig. 10.1 montre la largeur à l’arrière de la carapace chez les quatre groupes ainsi individualisés. Une représentation graphique adéquate avant de réaliser notre analyse ici lorsque le nombre de répliquas est important est le graphique en violon sur lequel nous superposons au moins les moyennes, et de préférence, les points également. Si le nombre de répliquas est plus faible, mais toujours supérieur à 7-8, nous pourrions utiliser le même type de graphique mais avec des boites de dispersion plutôt (voir plus loin, Fig. 10.4). Avec encore moins de répliquas nous présenterons les points et les moyennes uniquement.
chart(data = crabs2, rear ~ group) +
geom_violin() +
geom_jitter(width = 0.05, alpha = 0.5) +
geom_point(data = group_by(crabs2, group) %>.%
summarise(., means = mean(rear, na.rm = TRUE)),
f_aes(means ~ group), size = 3, col = "red")
Nous en profitons également pour essayer l’astuce proposée au module précédent. Au lieu de travailler sur la variable rear
seule, nous allons étudier l’aspect ratio entre largeur à l’arrière (rear
) et largeur maximale (width
) de la carapace afin de nous débarrasser d’une source de variabilité triviale qui est qu’un grand crabe est grand partout, et de même un petit crabe est petit pour toutes ses mesures. Nous prenons soin également de libeller cette nouvelle variable correctement avec labelise()
. Enfin, nous ne conservons que les variables species
, sex
, group
et aspect
avec select()
:
crabs2 %>.%
mutate(., aspect = labelise(
as.numeric(rear / width),
"Ratio largeur arrière / max", units = NA)) %>.%
select(., species, sex, group, aspect) ->
crabs2
skimr::skim(crabs2)
Name | crabs2 |
Number of rows | 200 |
Number of columns | 4 |
_______________________ | |
Column type frequency: | |
factor | 3 |
numeric | 1 |
________________________ | |
Group variables | None |
Variable type: factor
skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
---|---|---|---|---|---|
species | 0 | 1 | FALSE | 2 | B: 100, O: 100 |
sex | 0 | 1 | FALSE | 2 | F: 100, M: 100 |
group | 0 | 1 | FALSE | 4 | B-F: 50, B-M: 50, O-F: 50, O-M: 50 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
aspect | 0 | 1 | 0.35 | 0.03 | 0.28 | 0.32 | 0.36 | 0.38 | 0.41 | ▂▅▃▇▂ |
Nous avons 50 individus dans chacun des quatre groupes. Lorsqu’il y a le même nombre de répliquas dans tous les groupes, on appelle cela un plan balancé. C’est une situation optimale. Nous devons toujours essayer de nous en rapprocher le plus possible car, si le nombre d’individus mesurés diffère fortement d’un groupe à l’autre, nous aurons forcément moins d’information disponible dans le ou les groupes moins nombreux, ce qui déforcera notre analyse.
Nous voyons également que la variable aspect
semble avoir une distribution bimodale d’après le petit histogramme représenté dans le résumé. La Fig. 10.2 avec aspect montre une différence plus qu'avec
rear` seul, à la Fig. 10.1.
chart(data = crabs2, aspect ~ group) +
geom_violin() +
geom_jitter(width = 0.05, alpha = 0.5) +
geom_point(data = group_by(crabs2, group) %>.%
summarise(., means = mean(aspect, na.rm = TRUE)),
f_aes(means ~ group), size = 3, col = "red")
Nous voyons ici beaucoup mieux que la distribution bimodale est essentiellement due au dimorphisme sexuel plutôt qu’à des différences entre les variétés, mais qu’en est-il plus précisément car si nous regardons attentivement, il semble que les moyennes pour les crabes bleus sont légèrement inférieures à ces des crabes oranges.
Comment comparer valablement ces quatre groupes ? Comme nous savons maintenant comparer deux groupes à l’aide d’un test t de Student, il est tentant d’effectuer toutes les comparaisons deux à deux et de résumer l’ensemble, par exemple, dans un tableau synthétique. Cela fait quant même beaucoup de comparaisons (B-F
<-> B-M
, B-F
<-> O-F
, B-F
<-> O-M
, B-M
<-> O-F
, B-M
<-> O-M
, et finalement O-F
<-> O-M
). Cela fait six comparaisons à réaliser.
N’oublions pas que, à chaque test, nous prenons un risque de nous tromper. Le risque de se tromper au moins une fois dans l’ensemble des tests est alors décuplé en cas de tests multiples. Prenons un point de vue naïf, mais qui suffira ici pour démontrer le problème qui apparaît. Admettons que le risque de nous tromper est constant, que nous rejetons ou non \(H_0\), et qu’il est de l’ordre de 10% dans chaque test individuellement46. La seule solution acceptable est que tous les tests soient corrects. Considérant chaque interprétation indépendante, nous pouvons multiplier les probabilités d’avoir un test correct (90%) le nombre de fois que nous faisons le test, soit \(0,9 \times 0,9 \times 0,9 \times 0,9 \times 0,9 \times 0,9 = 0,9^6 = 0,53\). Tous les autres cas ayant au moins un test faux, nous constatons que notre analyse globale sera incorrecte \(1 - 0,53 = 47\%\) du temps47. Notre analyse sera incorrecte une fois sur deux environ.
De manière générale, le nombre de combinaisons deux à deux possibles
dans un set de n
groupes distincts sera calculé à l’aide du
coefficient binomial que nous avions déjà rencontré avec la distribution
du même nom, ici avec \(j\) valant
deux.
\[C^j_n = \frac{n!}{j!(n-j)!}\]
Toujours avec notre approche naïve du risque d’erreur individuel pour un test \(r\) de 10%, le risque de se tromper au moins une fois est alors :
\[1 - (1 - r)^{C^2_n}\]
Voici ce que cela donne comme risque de se tromper dans au moins un des tests en fonction du nombre de groupes à comparer :
Groupes comparés 2 à 2 | 2 | 3 | 4 | 6 | 8 | 10 |
---|---|---|---|---|---|---|
Risque individuel = 10% | 10% | 27% | 47% | 79% | 95% | 99% |
Clairement, on oublie cette façon de faire ! Prendre le risque de se tromper 99 fois sur 100 en comparant 10 groupes différents n’est pas du tout intéressante comme perspective.
Nous allons donc travailler différemment… Ci-après nous verrons qu’une simplification des hypothèses et l’approche par décomposition de la variance est une option bien plus intéressante (ANalysis Of VAriance ou ANOVA). Ensuite, nous reviendrons vers ces comparaisons multiples deux à deux, mais en prenant des précautions pour éviter l’inflation du risque global de nous tromper.