Skip to content

Commit 54b4b34

Browse files
committed
add new learnr (B04La_nls)
1 parent f45a604 commit 54b4b34

File tree

12 files changed

+853
-0
lines changed

12 files changed

+853
-0
lines changed

inst/tutorials/B02Lb_reg_poly/B02Lb_reg_poly.html

100644100755
File mode changed.

inst/tutorials/B02Lb_reg_poly/B02Lb_reg_poly_files/figure-html/unnamed-chunk-3-1.png

100644100755
File mode changed.

inst/tutorials/B02Lb_reg_poly/B02Lb_reg_poly_files/figure-html/unnamed-chunk-4-1.png

100644100755
File mode changed.

inst/tutorials/B03La_mod_lin/B03La_mod_lin.html

100644100755
File mode changed.

inst/tutorials/B03La_mod_lin/B03La_mod_lin_files/figure-html/unnamed-chunk-3-1.png

100644100755
File mode changed.

inst/tutorials/B03La_mod_lin/B03La_mod_lin_files/figure-html/unnamed-chunk-4-1.png

100644100755
File mode changed.

inst/tutorials/B03La_mod_lin/B03La_mod_lin_files/figure-html/unnamed-chunk-5-1.png

100644100755
File mode changed.

inst/tutorials/B03La_mod_lin/B03La_mod_lin_files/figure-html/unnamed-chunk-6-1.png

100644100755
File mode changed.
Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
---
2+
title: "Régression non linéaire"
3+
author: "Guyliann Engels & Philippe Grosjean"
4+
description: "**SDD II Module 4** Application des concepts liés à la régression non linéaire"
5+
tutorial:
6+
id: "B04La_nls"
7+
version: 1.0.0/5
8+
output:
9+
learnr::tutorial:
10+
progressive: true
11+
runtime: shiny_prerendered
12+
---
13+
14+
```{r setup, include=FALSE}
15+
BioDataScience2::learnr_setup()
16+
SciViews::R()
17+
18+
set.seed(42)
19+
tumor <- tibble(
20+
time = seq(1, 60, by = 1),
21+
volume = SSgompertz(time, Asym = 8, b2 = 11, b3 = 0.9) + rnorm(length(time), 0, 0.05)
22+
)
23+
```
24+
25+
```{r, echo=FALSE}
26+
BioDataScience2::learnr_banner()
27+
```
28+
29+
```{r, context="server"}
30+
BioDataScience2::learnr_server(input, output, session)
31+
```
32+
33+
----
34+
35+
## Objectifs
36+
37+
- Maîtriser l'ajustement d'une courbe dans un nuage de points à l'aide de la régression non linéaire.
38+
39+
## Croissance exponentielle
40+
41+
Réalisez une régression non linéaire sur le jeu de données `df1` de la variable `y` en fonction de la variable `t`.
42+
43+
```{r expo_init}
44+
exponent <- function(x, y0, k) y0 * exp(k * x)
45+
46+
set.seed(42)
47+
df1 <- tibble(
48+
t = seq(0.3, 3, by = 0.1),
49+
y = exponent(t, y0 = 1.5, k = 1.1) + rnorm(n = length(t), sd = 0.3)
50+
)
51+
```
52+
53+
Vous avez à votre disposition :
54+
55+
- le graphique suivant pour visualiser les données
56+
57+
```{r}
58+
chart(data = df1, formula = y ~ t) +
59+
geom_point()
60+
```
61+
62+
- la fonction suivante pour calculer votre modèle
63+
64+
```{r echo=TRUE}
65+
exponent <- function(x, y0, k) y0 * exp(k * x)
66+
```
67+
68+
Fixez vos paramètres de départ à 1 pour `y0` et à 0.5 pour `k` et affichez les différentes étapes du calcul itératif.
69+
70+
```{r expo_prep}
71+
# copy of expo_init
72+
exponent <- function(x, y0, k) y0 * exp(k * x)
73+
74+
set.seed(42)
75+
df1 <- tibble(
76+
t = seq(0.3, 3, by = 0.1),
77+
y = exponent(t, y0 = 1.5, k = 0.7) + rnorm(n = length(t), sd = 0.15)
78+
)
79+
```
80+
81+
```{r expo_h3, exercise = TRUE, exercise.setup = "expo_prep"}
82+
expo <- ___(___, ___, ___, ___)
83+
summary(___)
84+
```
85+
86+
```{r expo_h3-hint-1}
87+
expo <- nls(data = ___, ___ ~ exponent(___, ___, ___),
88+
start = list(___), trace = ___)
89+
summary(___)
90+
```
91+
92+
```{r expo_h3-hint-2}
93+
expo <- nls(data = df1, y ~ exponent(t, ___, ___),
94+
start = list(y0 = ___, k = ___), trace = ___)
95+
summary(___)
96+
#### ATTENTION: Hint suivant = solution !####
97+
```
98+
99+
```{r expo_h3-solution}
100+
expo <- nls(data = df1, y ~ exponent(t, y0, k),
101+
start = list(y0 = 1, k = 0.5), trace = TRUE)
102+
summary(expo)
103+
```
104+
105+
```{r expo_h3-check}
106+
grade_code("Félicitation ! Voici ton premier modèle non linéaire... et certainement pas le dernier.")
107+
```
108+
109+
## Volume tumoral
110+
111+
Des chercheurs en cancérologie essayent de modéliser la croissance tumoral. Pour cela, ils ont mesuré l'évolution du volume de la tumeur au cours du temps. Ils obtiennent le graphique suivant :
112+
113+
```{r}
114+
chart(data = tumor, formula = volume ~ time) +
115+
geom_point() +
116+
labs(x = "Time [Days]", y = "Tumor volume [10^9 µm^3")
117+
```
118+
119+
Aidez-les en réalisant les différents modèles proposés ci-dessous et sélectionnez le meilleur.
120+
121+
### Courbe logistique
122+
123+
A partir du jeu de données `tumor`, modéliser la croissance tumorale (`volume`) en fonction du temps (`time`) en utilisant une courbe logistique. Calculez le critère d'Akaïke pour votre modèle.
124+
125+
```{r tumor_logis_h3, exercise = TRUE}
126+
logis <- ___(___,___)
127+
summary(___)
128+
___(___)
129+
```
130+
131+
```{r tumor_logis_h3-hint-1}
132+
logis <- nls(data = ___, ___ ~ SSlogis(___, ___, ___, ___))
133+
summary(___)
134+
___(___)
135+
```
136+
137+
```{r tumor_logis_h3-hint-2}
138+
logis <- nls(data = tumor, volume ~ SSlogis(time, ___, ___, ___))
139+
summary(___)
140+
___(logis)
141+
142+
#### ATTENTION: Hint suivant = solution !####
143+
```
144+
145+
```{r tumor_logis_h3-solution}
146+
logis <- nls(data = tumor, volume ~ SSlogis(time, Asym, xmid, scal))
147+
summary(logis)
148+
AIC(logis)
149+
```
150+
151+
```{r tumor_logis_h3-check}
152+
grade_code("Tu progresses bien ! Essayons un autre modèle pour voir si l'on peut trouver mieux.")
153+
```
154+
155+
### Modèle de Gompertz
156+
157+
A partir du jeu de données `tumor`, modéliser la croissance tumorale (`volume`) en fonction du temps (`time`) en utilisant le modèle de Gompertz. Calculez le critère d'Akaïke pour votre modèle.
158+
159+
```{r tumor_gomp_h3, exercise = TRUE}
160+
gomp <- ___(___,___)
161+
summary(___)
162+
___(___)
163+
```
164+
165+
```{r tumor_gomp_h3-hint-1}
166+
gomp <- nls(data = ___, ___ ~ SSgompertz(___, ___, ___, ___))
167+
summary(___)
168+
___(___)
169+
```
170+
171+
```{r tumor_gomp_h3-hint-2}
172+
gomp <- nls(data = tumor, volume ~ SSgompertz(time, ___, ___, ___))
173+
summary(___)
174+
___(gomp)
175+
176+
#### ATTENTION: Hint suivant = solution !####
177+
```
178+
179+
```{r tumor_gomp_h3-solution}
180+
gomp <- nls(data = tumor, volume ~ SSgompertz(time, Asym, b2, b3))
181+
summary(gomp)
182+
AIC(gomp)
183+
```
184+
185+
```{r tumor_gomp_h3-check}
186+
grade_code("Bravo ! C'est impressionnant. Et si on en testait un dernier ...")
187+
```
188+
189+
### Modèle de von Bertalanffy
190+
191+
A partir du jeu de données `tumor`, modéliser la croissance tumorale (`volume`) en fonction du temps (`time`) en utilisant le modèle de von Bertalanffy. Calculez le critère d'Akaïke pour votre modèle.
192+
193+
```{r tumor_vb_h3, exercise = TRUE}
194+
vb <- ___(___,___)
195+
summary(___)
196+
___(___)
197+
```
198+
199+
```{r tumor_vb_h3-hint-1}
200+
vb <- nls(data = ___, ___ ~ SSasympOff(___, ___, ___, ___))
201+
summary(___)
202+
___(___)
203+
```
204+
205+
```{r tumor_vb_h3-hint-2}
206+
vb <- nls(data = tumor, volume ~ SSasympOff(time, ___, ___, ___))
207+
summary(___)
208+
___(vb)
209+
210+
#### ATTENTION: Hint suivant = solution !####
211+
```
212+
213+
```{r tumor_vb_h3-solution}
214+
vb <- nls(data = tumor, volume ~ SSasympOff(time, Asym, lrc, c0))
215+
summary(vb)
216+
AIC(vb)
217+
```
218+
219+
```{r tumor_vb_h3-check}
220+
grade_code("Tu maitrises parfaitement la régression non linéaire !")
221+
```
222+
223+
### Comparaison des modèles à partir du critère d'Akaïke
224+
225+
```{r qu_tumor}
226+
question("Quelle est le meilleur modèle ?",
227+
answer("Modèle de Gompertz", correct = TRUE),
228+
answer("Courbe logistique"),
229+
answer("Modèle de von Bertalanffy"),
230+
allow_retry = TRUE, random_answer_order = TRUE
231+
)
232+
```
233+
234+
## Conclusion
235+
236+
Vous venez de terminer votre séance d'exercice.
237+
238+
```{r comm_noscore, echo=FALSE}
239+
question_text(
240+
"Laissez-nous vos impressions sur ce learnr",
241+
answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
242+
incorrect = "Vos commentaires sont enregistrés.",
243+
placeholder = "Entrez vos commentaires ici...",
244+
allow_retry = TRUE
245+
)
246+
```

0 commit comments

Comments
 (0)