BioDataScience2::learnr_setup()
SciViews::R("model", lang = "fr")

set.seed(42)
tumor <- dtx(
  time   = seq(1, 60, by = 1),
  volume = SSgompertz(time, Asym = 8, b2 = 11, b3 = 0.9) +
    rnorm(length(time), 0, 0.05)
)
BioDataScience2::learnr_banner()
BioDataScience2::learnr_server(input, output, session)

Objectifs

Croissance exponentielle

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.

exponent <- function(x, y0, k) y0 * exp(k * x)

set.seed(42)
df1 <- dtx(
  t = seq(0.3, 3, by = 0.1),
  y = exponent(t, y0 = 1.5, k = 1.1) + rnorm(n = length(t), sd = 0.3)
)

Vous avez à votre disposition :

chart(data = df1, formula = y ~ t) +
  geom_point() 
exponent <- function(x, y0, k) y0 * exp(k * x)

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.

exponent <- function(x, y0, k) y0 * exp(k * x)

set.seed(42)
df1 <- dtx(
  t = seq(0.3, 3, by = 0.1),
  y = exponent(t, y0 = 1.5, k = 1.1) + rnorm(n = length(t), sd = 0.3)
)
expo <- ___(data = ___, ___ ~ ___(t, ___, ___),
  start = list(___ = ___, ___ = ___), trace = TRUE)
chart(___)
summary(___)
expo <- nls(data = df1, y ~ exponent(t, ___, ___),
  start = list(y0 = ___, k = ___), trace = TRUE)
chart(___)
summary(___)

#### ATTENTION: Hint suivant = solution !####
## Solution ##
expo <- nls(data = df1, y ~ exponent(t, y0, k),
  start = list(y0 = 1, k = 0.5), trace = TRUE)
chart(expo)
summary(expo)
grade_code("C'est votre premier modèle non linéaire... et certainement pas le dernier.")

Volume tumoral

Des chercheurs en cancérologie essayent de modéliser la croissance d'une tumeur. Pour cela, ils ont mesuré l'évolution du volume de la tumeur au cours du temps. Ils obtiennent le graphique suivant :

chart(data = tumor, formula = volume ~ time) +
  geom_point() + 
  labs(x = "Temps [Jours]", y = "Volume tumoral [10^9 µm^3]")

Aidez-les en réalisant les différents modèles proposés ci-dessous et sélectionnez le meilleur.

Courbe logistique

A partir du jeu de données tumor, modélisez 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.

logis <- nls(data = ___, ___ ~ ___(___, ___, ___, ___))
chart(___)
summary(___)
___(___)
logis <- nls(data = tumor, volume ~ SSlogis(time, ___, ___, ___))
chart(___)
summary(___)
___(logis)

#### ATTENTION: Hint suivant = solution !####
## Solution ##
logis <- nls(data = tumor, volume ~ SSlogis(time, Asym, xmid, scal))
chart(logis)
summary(logis)
AIC(logis)
grade_code("Essayons un autre modèle pour voir si l'on peut faire mieux.")

Modèle de Gompertz

A partir du jeu de données tumor, modélisez 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.

gomp <- nls(data = ___, ___ ~ ___(___, ___, ___, ___))
chart(___)
summary(___)
___(___)
gomp <- nls(data = tumor, volume ~ SSgompertz(time, ___, ___, ___))
chart(___)
summary(___)
___(gomp)

#### ATTENTION: Hint suivant = solution !####
## Solution ##
gomp <- nls(data = tumor, volume ~ SSgompertz(time, Asym, b2, b3))
chart(gomp)
summary(gomp)
AIC(gomp)
grade_code("Et si on en testait un dernier...")

Modèle de Weibull

A partir du jeu de données tumor, modélisez la croissance tumorale (volume) en fonction du temps (time) en utilisant le modèle de Weibull. Calculez le critère d'Akaïke pour votre modèle.

wb <- nls(data = ___, ___ ~ ___(___, ___, ___, ___, ___))
chart(___)
summary(___)
___(___)
wb <- nls(data = tumor, volume ~ SSweibull(time, ___, ___, ___, ___))
chart(___)
summary(___)
___(wb)

#### ATTENTION: Hint suivant = solution !####
## Solution ##
wb <- nls(data = tumor, volume ~ SSweibull(time, Asym, Drop, lrc, pwr))
chart(wb)
summary(wb)
AIC(wb)
grade_code("Ce modèle s'ajuste aussi dans ces données.")

Comparaison des modèles à partir du critère d'Akaïke

question("Quelle est le meilleur modèle ?",
  answer("Modèle de Gompertz", correct = TRUE),
  answer("Courbe logistique"),
  answer("Modèle de von Bertalanffy"), 
  allow_retry = TRUE, random_answer_order = TRUE)

Conclusion

Vous venez de terminer votre séance d'exercices relative à la régression non linéaire. L'utilisation de modèles 'selfStart' rend les calculs bien plus faciles dans R. La difficulté reste, comme toujours, de choisir le bon modèle.

question_text(
  "Laissez-nous vos impressions sur ce learnr",
  answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
  incorrect = "Vos commentaires sont enregistrés.",
  placeholder = "Entrez vos commentaires ici...",
  allow_retry = TRUE
)


BioDataScience-Course/BioDataScience2 documentation built on April 12, 2025, 9:45 a.m.