Skip to content

Commit e573d29

Browse files
première version du learnr A10Lb
1 parent c6edcec commit e573d29

File tree

1 file changed

+214
-11
lines changed

1 file changed

+214
-11
lines changed
Lines changed: 214 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
22
title: "Test de Kruskal-Wallis"
33
author: "Guyliann Engels & Philippe Grosjean"
4-
description: "**SDD I Module 10** Utilisation du test de Kruskal-Wallis à la place de l'ANOVA."
4+
description: "**SDD I Module 10** Test de Kruskal-Wallis à la place de l'ANOVA."
55
tutorial:
66
id: "A10Lb_kruskal"
7-
version: 2.0.0/0
7+
version: 2.0.0/6
88
output:
99
learnr::tutorial:
1010
progressive: true
@@ -13,11 +13,19 @@ runtime: shiny_prerendered
1313
---
1414

1515
```{r setup, include=FALSE}
16-
BioDataScience3::learnr_setup()
17-
SciViews::R()
18-
library(mlearning)
16+
BioDataScience2::learnr_setup()
17+
SciViews::R("infer", lang = "fr")
1918
20-
# ...
19+
# dataframe
20+
# Replace df, group and yvar by a biological context
21+
set.seed(43)
22+
df <- dtx(
23+
group = as.factor(rep(letters[1:3], each =30)),
24+
yvar = c(
25+
rnorm(30, 10, 2),
26+
rnorm(30, 13, 3),
27+
rnorm(30, 6, 2))
28+
)
2129
```
2230

2331
```{r, echo=FALSE}
@@ -30,12 +38,207 @@ BioDataScience3::learnr_server(input, output, session)
3038

3139
------------------------------------------------------------------------
3240

33-
**Ce tutoriel correspond à la version 2021-2022. Il est en cours de révision pour la version 2022-2023. Vous devez probablement penser à installer une version plus récente du package qui contient les exercices finalisés !**
34-
3541
## Objectifs
3642

37-
- ...
43+
Tout comme le test de Wilcoxon est la version non paramétrique du test *t* de Student, le test de Kruskal-Wallis est la version non paramétrique de l'analyse de variance.
44+
45+
Dans ce tutoriel, vous allez pouvoir autoévaluer votre capacité à :
46+
47+
- Déterminer quand utiliser un test de Kruskal-Wallis à la place de l'anova
48+
- Utiliser le test ce test non paramétrique pour résoudre des questions pratiques en biologie
49+
50+
N'entamer ce tutoriel qu'après avoir compris ce qu'est une ANOVA à un facteur présenté dans le [module 10](https://wp.sciviews.org/sdd-umons/?iframe=wp.sciviews.org/sdd-umons-2022/variance.html) du cours et vous être autoévalué via le learnr **A10La_anova** intitulé "ANOVA à un facteur".
51+
52+
## Situation
53+
54+
BLABLABLA
55+
56+
Les données employées sont des données générées ne provenant pas d'une expérience scientifique publiée. Le tableau employé et le suivant :
57+
58+
```{r, echo=TRUE}
59+
skimr::skim(df)
60+
```
61+
62+
Votre objectif va être de comparer les moyennes des trois groupes.
63+
64+
## Un peu de théorie
65+
66+
Lorsque l'on souhaite comparer une variable quantitative en fonction d'une variable qualitative à trois niveaux ou plus, notre premier choix se porte sur une ANOVA. Pour réaliser une ANOVA, il faut cependant respecter les conditions d'application suivantes :
67+
68+
- échantillon représentatif (par exemple, aléatoire),
69+
- observations indépendantes,
70+
- variable dite réponse quantitative,
71+
- une variable dite explicative qualitative à trois niveaux ou plus,
72+
- distribution Normale des résidus,
73+
- homoscédasticité (même variance intragroupe).
74+
75+
Les quatre premières conditions sont similaires pour le test de Kruskal-Wallis. Les deux dernières conditions sont propres à l'ANOVA.
76+
77+
Attention, le raisonnement entre ANOVA (test paramétrique) et Kruskal-Wallis (test non paramétrique) est le même qu'entre le test de Student ou celui de Wilcoxon. Lorsque les conditions sont remplies, l'ANOVA est un test plus puissant à utiliser en priorité. Nous le préférerons donc, sauf dans les cas impossibles où aucune transformation des données ne permet d'obtenir une distribution acceptable des résidus et des variances.
78+
79+
L'instruction a réaliser dans R est la suivante :
80+
81+
```{r, echo=TRUE, eval=FALSE}
82+
kruskal.test(data = DF, YNUM ~ XFACTOR)
83+
```
84+
85+
- DF : le tableau de données
86+
- YNUM : la variable quantitative
87+
- XFACTOR : la variable
88+
89+
À présent que vous êtes au point concernant les conditions d'application, il est temps de répondre à la question scientifique posée précédemment.
3890

39-
## Test de Kruskal-Wallis
91+
## Description graphique
4092

41-
TODO: ce tutoriel doit encore être écrit. Vous devez probablement penser à installer une version plus récente du package qui contient les exercices finalisés !
93+
Toute analyse débute par la description du problème à l'aide de descripteurs numériques et de graphiques **pertinents**.
94+
95+
Prenons un exemple concret, si vous réalisez des analyses comparant les moyennes de 3 groupes, il semble évident de présenter les moyennes de chaque groupe. Il ne vous viendraient pas à l'esprit de m'être l'accent sur les médianes de ces 3 groupes.
96+
97+
Réalisez des boites parallèles. Ajoutez en plus le nombre d'observations au-dessus de chaque boite.
98+
99+
```{r boxplot_h2, exercise=TRUE, exercise.lines=8}
100+
# fonction comptant les observations
101+
give_n <- function(x)
102+
c(y = max(x) * 1.1, label = length(x))
103+
# graphique
104+
chart(data = __, ___ ~ ___) +
105+
geom____() + # boites de dispersion parallèles
106+
___(fun.data = give_n, geom = "text", hjust = 0.5)
107+
```
108+
109+
```{r boxplot_h2-hint-1}
110+
# fonction comptant les observations
111+
give_n <- function(x)
112+
c(y = max(x) * 1.1, label = length(x))
113+
# graphique
114+
chart(data = __, yvar ~ group) +
115+
geom_boxplot() + # boites de dispersion parallèles
116+
stat_summary(fun.data = give_n, geom = "text", hjust = 0.5)
117+
118+
#### ATTENTION: Hint suivant = solution !####
119+
```
120+
121+
```{r boxplot_h2-solution}
122+
## Solution ##
123+
# fonction comptant les observations
124+
give_n <- function(x)
125+
c(y = max(x) * 1.1, label = length(x))
126+
# graphique
127+
chart(data = df, yvar ~ group) +
128+
geom_boxplot() + # boites de dispersion parallèles
129+
stat_summary(fun.data = give_n, geom = "text", hjust = 0.5)
130+
```
131+
132+
```{r boxplot_h2-check}
133+
grade_code("Lors du choix du graphique et des descripteurs numériques est amené à évolué en fonction du test que vous allez réaliser. On ne réalisera pas le même graphique pour une ANOVA à un facteur que pour un test de Kruskal-Wallis. Afin de ne pas multiplier les exercices dans cette séance, vous avez été guidé vers un graphique adapté pour un test non paramétrique. Les boites de dispersion parallèles sont tout indiquées pour cette expérience. L'ajout du nombre de valeurs sur un graphique n'est pas indispensable si on propose un tableau descriptif.")
134+
```
135+
136+
Que cela soit un tableau résumé ou un graphique, ils ne permettent pas d'affirmer ou d'infirmer qu'il y a une différence significative entre les groupes présentés. Vous devez réaliser des tests d'hypothèses.
137+
138+
## Vérification des conditions d'applications
139+
140+
Le premier choix pour répondre à la question posée est d'employer une anova à un facteur. Ce test impose plusieurs conditions d'application que nous avons, rappelées précédemment. Vérifiez l'homoscédasticité au seuil alpha de 5%.
141+
142+
```{r bartlett1_h2, exercise=TRUE}
143+
___(data = ___, ___ ~ ___)
144+
```
145+
146+
```{r bartlett1_h2-hint-1}
147+
bartlett.test(data = ___, ___ ~ ___)
148+
149+
#### ATTENTION: Hint suivant = solution !####
150+
```
151+
152+
```{r bartlett1_h2-solution}
153+
## Solution ##
154+
bartlett.test(data = df, yvar ~ group)
155+
```
156+
157+
```{r bartlett1_h2-check}
158+
grade_code("La variance entre les 3 groupes diffère au seuil alpha de 5%. Tentez dans l'exercice suivant une transformation mathématique afin de réussir à valider cette condition.")
159+
```
160+
161+
Vérifiez à nouveau l'homoscédasticité au seuil alpha de 5% en appliquant une transformation mathématique. Utilisez le logarithme népérien (`log()`)
162+
163+
```{r bartlett2, exercice=TRUE}
164+
___(data = ___, ___(___) ~ ___)
165+
```
166+
167+
```{r bartlett2-solution}
168+
## Solution ##
169+
bartlett.test(data = df, log(yvar) ~ group)
170+
```
171+
172+
```{r bartlett2_check}
173+
grade_code("Malgré la transformation mathématique employée, il y a hétéroscédasticité entre les 3 groupes au seuil alpha de 5%. En pratique, vous devriez tenter plusieurs modifications. Vu que cette condition n'est pas respectée, nous ne pouvons pas employer l'ANOVA à un facteur. Nous devons du coup passer sur un test non paramétrique comme le test de Kruskal-Wallis")
174+
```
175+
176+
## Kruskal-Wallis
177+
178+
Étant donné que nous ne pouvons pas comparer les moyennes des trois groupes, nous allons réaliser une comparaison des rangs moyens.
179+
180+
```{r kruskal, exercise=TRUE}
181+
___(data = ___, ___ ~ ___)
182+
```
183+
184+
```{r kruskal-solution}
185+
## Solution ##
186+
kruskal.test(data = df, yvar ~ group)
187+
```
188+
189+
```{r kruskal-check}
190+
grade_code("Vous avez réalisé le test adéquat à la situation. Comme vous l'avez remarqué, l'instruction a réaliser est simple. L'étape la plus importante est la suivante. Vous devez interpréter correctement ce test.")
191+
```
192+
193+
```{r kruskal}
194+
question("Sélectionnez l'interprétation adaptée au test réalisé ci-dessus",
195+
answer("Les moyennes des trois groupes diffèrent significativement au seuil alpha de 5%."),
196+
answer("Au moins la moyenne d'un groupe diffèrent des autres significativement au seuil alpha de 5%."),
197+
answer("Les rangs moyens différents significativement au seuil alpha de 5%"),
198+
answer("Au moins le rang moyen d'un groupe diffèrent des autres significatievment au seuil alpha de 5%.", correct = TRUE), correct = "L'interprétation complète est la suivante : Au moins un rangs moyen d'un groupe diffèrent des autres significatievment au seuil alpha de 5% (H : 66.931, df : 2, valeur de p : 2.925e-15 ).",
199+
allow_retry = TRUE,
200+
random_answer_order = TRUE)
201+
```
202+
203+
## Test de comparaison multiple
204+
205+
Votre test statistique précédent vous a permis de savoir qu'au moins un groupe diffère des deux autres. Il a présent temps de réaliser un test de comparaison multiple pour comparer les groupes deux à deux. Ce test de comparaison multiple doit être employé **si et seulement si** vous avez rejeté H0 avec le test de Kruskal-Wallis.
206+
207+
```{r mult_h2, exercise=TRUE}
208+
summary(kw_comp. <- nparcomp::___(data = ___, ___~ ___))
209+
plot(___)
210+
211+
```
212+
213+
```{r mult_h2-hint-1}
214+
summary(kw_comp. <- nparcomp::nparcomp(data = ___, ___ ~ ___))
215+
plot(___)
216+
217+
#### ATTENTION: Hint suivant = solution !####
218+
```
219+
220+
```{r mult_h2-solution}
221+
## Solution ##
222+
summary(kw_comp. <- nparcomp::nparcomp(data = df, yvar ~ group))
223+
plot(kw_comp.)
224+
```
225+
226+
```{r mult_h2-check}
227+
grade_code("Le code est employé est correct. Comme vous en avez maintenant l'habitude, cela n'est pas suffisant. Vous devez être capable d'intepréter ces résultats.")
228+
```
229+
230+
Votre comparaison des rangs moyens est terminée. L'interprétation statistique et biologique complète de ce test n'est pas une étape à banaliser. Elle est très similaire à la celle de l'anova à un facteur proposé dans la séance d'exercice autoévalué via le learnr **A10La_anova** intitulé "ANOVA à un facteur". Étant donné que les valeurs sont simulées pour cet exercice, l'interprétation complète n'est pas réalisée dans cette séance d'exercices.
231+
232+
## Conclusion
233+
234+
Bravo ! Vous venez de terminer une analyse non paramétrique complète associée au test de Kruskal-Wallis. Lors de la vérification des conditions d'application, tentez toujours de transformer vos données afin de pouvoir employer une anova à un facteur, qui est un test plus puissant.
235+
236+
```{r comm_noscore, echo=FALSE}
237+
question_text(
238+
"Laissez-nous vos impressions sur cet outil pédagogique",
239+
answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
240+
incorrect = "Vos commentaires sont enregistrés.",
241+
placeholder = "Entrez vos commentaires ici...",
242+
allow_retry = TRUE
243+
)
244+
```

0 commit comments

Comments
 (0)