BioDataScience2::learnr_setup()
SciViews::R("model", lang = "fr")
BioDataScience2::learnr_banner()
BioDataScience2::learnr_server(input, output, session)

Objectifs

Modèle linéaire 1

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + 10 + rnorm(length(x), sd = 0.5)
b <- x*1.2 + 7 + rnorm(length(x), sd = 0.5)
c <- x*1.4 + 6 + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn1 <- dtx(
  x     = c(x, x, x),
  value = c(a, b, c),
  area  = area
)

Voici un nuage de points et un tableau résumé pour vous familiariser avec les données corn1.

lm1 <- lm(data = corn1, value ~ x * area)
#summary(lm1)
lm1_param <- glance(lm1)
lm1_result <- tidy(lm1)

chart(corn1, value ~ x %col=% area) +
  geom_point()
skimr::skim(corn1)

Construisez un modèle linéaire (ANCOVA) pertinent pour expliquer la variable value en fonction de x et de area de corn1. Si vous souhaitez faire passer le modèle linéaire par l'origine, utilisez + 0 dans la formule, pas - 1.

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + 10 + rnorm(length(x), sd = 0.5)
b <- x*1.2 + 7 + rnorm(length(x), sd = 0.5)
c <- x*1.4 + 6 + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn1 <- dtx(
  x     = c(x, x, x),
  value = c(a, b, c),
  area  = area
)
corn1_lm <- lm(data = ___, ___)
summary(corn1_lm) |> tabularise()
corn1_lm <- lm(data = DF, FORMULA)
summary(corn1_lm) |> tabularise()
corn1_lm <- lm(data = DF, VAR1 ~ VAR2 * VAR3)
summary(corn1_lm) |> tabularise()

#### ATTENTION: Hint suivant = solution !####
## Solution ##
corn1_lm <- lm(data = corn1, value ~ x * area)
summary(corn1_lm) |> tabularise()
grade_code("Vous venez de réaliser votre premier modèle linéaire.")
question("Quelle est la valeur de la pente du modèle linéaire du niveau `a` de la variable `area` ?",
  answer(sprintf("%.3f", lm1_result$estimate[[2]]), correct = TRUE),
  answer(sprintf("%.3f", lm1_param$AIC)),
  answer(sprintf("%.3f", lm1_result$estimate[[3]])),
  answer(sprintf("%.3f", lm1_result$estimate[[1]])),
  allow_retry = TRUE, random_answer_order = TRUE)

Modèle linéaire 2

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + 11 + rnorm(length(x), sd = 0.5)
b <- x*1.2 + 11 + rnorm(length(x), sd = 0.5)
c <- x*1.5 + 11 + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn2 <- dtx(
  x     = c(x, x, x),
  value = c(a, b, c),
  area  = area
)

Voici un nuage de points et un tableau résumé pour vous familiariser avec les données corn2.

chart(corn2, value ~ x %col=% area) +
  geom_point()
skimr::skim(corn2)

#lm2 <- lm(data = corn2, value ~ x * area) # modèle le plus compliqué doit être simplifié 
#lm2 <- lm(data = corn2, value ~ x + area + x:area)
lm2 <- lm(data = corn2, value ~ x + x:area)
#summary(lm2)
lm2_param <- glance(lm2)
lm2_result <- tidy(lm2)

Construisez un modèle linéaire (ANCOVA) pertinent pour expliquer la variable value en fonction de x et de area de corn2. Si vous souhaitez faire passer le modèle linéaire par l'origine, utilisez + 0 dans la formule, pas - 1.

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + 11 + rnorm(length(x), sd = 0.5)
b <- x*1.2 + 11 + rnorm(length(x), sd = 0.5)
c <- x*1.5 + 11 + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn2 <- dtx(
  x     = c(x, x, x),
  value = c(a, b, c),
  area  = area
)
corn2_lm <- lm(data = ___, ___)
summary(corn2_lm) |> tabularise()
corn2_lm <- lm(data = DF, VAR1 ~ VAR2 ___)
summary(corn2_lm) |> tabularise()
corn2_lm <- lm(data = DF, VAR1 ~ VAR2 + VAR3)
# ou
corn2_lm <- lm(data = DF, VAR1 ~ VAR2 + VAR2:VAR3)
# ou
corn2_lm <- lm(data = DF, VAR1 ~ VAR2 + VAR3 + VAR2:VAR3)
summary(corn2_lm) |> tabularise()
corn2_lm <- lm(data = corn2, value ~ x + area)
# ou
corn2_lm <- lm(data = corn2, value ~ x + x:area)
# ou
corn2_lm <- lm(data = corn2, value ~ x + area + x:area)
summary(corn2_lm) |> tabularise()

#### ATTENTION: Hint suivant = solution !####
## Solution ##
corn2_lm <- lm(data = corn2, value ~ x + x:area)
summary(corn2_lm) |> tabularise()
grade_code("Plus que quelques notions à vérifier pour bien maitriser le code R relatif à cette matière.")
question("Quelle est la valeur de la pente du modèle linéaire du niveau `c` de la variable `area` ?",
  answer(sprintf("%.3f", (lm2_result$estimate[[2]] + lm2_result$estimate[[4]])), correct = TRUE),
  answer(sprintf("%.3f", lm2_param$AIC)),
  answer(sprintf("%.3f", lm2_result$estimate[[4]])),
  answer(sprintf("%.3f", lm2_result$estimate[[1]])),
  allow_retry = TRUE, random_answer_order = TRUE)

Modèle linéaire 3

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + 8 + rnorm(length(x), sd = 0.5)
b <- x*1 + 12 + rnorm(length(x), sd = 0.5)
c <- x*1 + 11 + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn3 <- dtx(
  x = c(x, x, x),
  value = c(a, b, c),
  area = area
)

Voici un nuage de points et un tableau résumé pour vous familiariser avec les données corn3.

#lm3 <- lm(data = corn3, value ~ x*area)
#lm3 <- lm(data = corn3, value ~ x + area + x:area)
lm3 <- lm(data = corn3, value ~ x + area)
#summary(lm3)
lm3_param <- glance(lm3)
lm3_result <- tidy(lm3)

chart(corn3, value ~ x %col=%area) +
  geom_point()
skimr::skim(corn3)

Construisez un modèle linéaire (ANCOVA) pertinent pour expliquer la variable value en fonction de x et de area de corn3. Si vous souhaitez faire passer le modèle linéaire par l'origine, utilisez + 0 dans la formule, pas - 1.

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + 8 + rnorm(length(x), sd = 0.5)
b <- x*1 + 12 + rnorm(length(x), sd = 0.5)
c <- x*1 + 11 + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn3 <- dtx(
  x = c(x, x, x),
  value = c(a, b, c),
  area = area
)
corn3_lm <- lm(data = ___, ___)
summary(corn3_lm) |> tabularise()
corn3_lm <- lm(data = DF, VAR1 ~VAR2 ___)
summary(corn3_lm) |> tabularise()
corn3_lm <- lm(data = DF, VAR1 ~ VAR2 + VAR3)
# ou
corn3_lm <- lm(data = DF, VAR1 ~ VAR2 + VAR2:VAR3)
# ou
corn3_lm <- lm(data = DF, VAR1 ~ VAR2 + VAR3 + VAR2:VAR3)
summary(corn3_lm) |> tabularise()
corn3_lm <- lm(data = corn3, value ~ x + area)
# ou
corn3_lm <- lm(data = corn3, value ~ x + x:area)
# ou
corn3_lm <- lm(data = corn3, value ~ x + area + x:area)
summary(corn3_lm) |> tabularise()

#### ATTENTION: Hint suivant = solution !####
## Solution ##
corn3_lm <- lm(data = corn3, value ~ x + area)
summary(corn3_lm) |> tabularise()
grade_code("Ici le modèle n'a pas d'interactions et les pentes sont toutes considérées comme les mêmes.")
question("Quelle est la valeur de l'ordonnée à l'origine du modèle linéaire pour le niveau `b` de la variable `area` ?",
  answer(sprintf("%.3f", (lm3_result$estimate[[1]] + lm3_result$estimate[[3]])), correct = TRUE),
  answer(sprintf("%.3f", lm3_param$AIC)),
  answer(sprintf("%.3f", lm3_result$estimate[[4]])),
  answer(sprintf("%.3f", lm3_result$estimate[[1]])),
  allow_retry = TRUE, random_answer_order = TRUE)

Modèle linéaire 4

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + rnorm(length(x), sd = 0.5)
b <- x*1.5  + rnorm(length(x), sd = 0.5)
c <- x*1.2  + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn4 <- dtx(
  x     = c(x, x, x),
  value = c(a, b, c),
  area  = area
)

Voici un nuage de points et un tableau résumé pour vous familiariser avec les données corn4.

#lm4 <- lm(data = corn4, value ~ x * area)
#lm4 <- lm(data = corn4, value ~ x * area + 0)
lm4 <- lm(data = corn4, value ~ x + x:area - 1)
#summary(lm4)
lm4_param <- glance(lm4)
lm4_result <- tidy(lm4)

chart(corn4, value ~ x %col=%area) +
  geom_point()
skimr::skim(corn4)

Construisez un modèle linéaire (ANCOVA) pertinent pour expliquer la variable value en fonction de x et de area de corn4. Si vous souhaitez faire passer le modèle linéaire par l'origine, utilisez + 0 dans la formule, pas - 1.

set.seed(42)
x <- seq(from = 0, to = 25, by = 0.25)
a <- x*1 + rnorm(length(x), sd = 0.5)
b <- x*1.5  + rnorm(length(x), sd = 0.5)
c <- x*1.2  + rnorm(length(x), sd = 0.5)

area <- as.factor(rep(c("a", "b", "c"), each = length(x)))

corn4 <- dtx(
  x     = c(x, x, x),
  value = c(a, b, c),
  area  = area
)
corn4_lm <- lm(data = ___, ___)
summary(corn4_lm) |> tabularise()
corn4_lm <- lm(data = DF, VAR1 ~ Var2 ___)
summary(corn4_lm) |> tabularise()
corn4_lm <- lm(data = DF, VAR1 ~ VAR2 + VAR2:VAR3 ___)
summary(corn4_lm) |> tabularise()
corn4_lm <- lm(data = corn4, value ~ x + x:area ___)
summary(corn4_lm) |> tabularise()

#### ATTENTION: Hint suivant = solution !####
## Solution ##
corn4_lm <- lm(data = corn4, value ~ x + x:area + 0)
summary(corn4_lm) |> tabularise()
grade_code("Cette fois-ci, l'ordonnée à l'origine est forcée à zéro pour toutes les droites.")
question("Quelle est la valeur de l'ordonnée à l'origine du modèle linéaire pour le niveau `b` de la variable `area` ?",
  answer(sprintf("%.3f", 0), correct = TRUE),
  answer(sprintf("%.3f", lm4_param$AIC)),
  answer(sprintf("%.3f", lm4_result$estimate[[3]])),
  answer(sprintf("%.3f", lm4_result$estimate[[2]])),
  allow_retry = TRUE, random_answer_order = TRUE)

Conclusion

Vous venez de terminer votre séance d'exercices qui vise à vérifier que vous avez bien compris les différentes variantes du modèle linéaire de type ANCOVA, ainsi que le code R pour ajuster ces modèles.

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.