BioDataScience2::learnr_setup() SciViews::R("model", lang = "fr") # crabs crabs <- read("crabs", package = "MASS") # bull read(file = system.file("extdata", "belgianblue.xlsx", package = "BioDataScience2"), type = "xlsx") %>.% labelise(., label = list(weight = "Masse", age = "Age", variety = "Variété"), unit = list(weight = "kg", age = "mois")) %>.% sfilter(., age <= 40) -> bull bull_lm <- lm(data = bull, weight ~ age) lm_result <- tidy(bull_lm) lm_param <- glance(bull_lm)
BioDataScience2::learnr_banner()
BioDataScience2::learnr_server(input, output, session)
Ce tutoriel sur la régression linéaire débute par un rappel sur la corrélation et les corrélogrammes. Cette matière est détaillée dans le module 6 de science des données I. Les objectifs de ce tutoriel sont :
Revoir la corrélation et les indices de Pearson et Spearman
Découvrir la régression linéaire dans R, en particulier la fonction lm()
.
Paramétrer l'équation d'une régression linéaire.
Cinq mesures morphologiques ont été étudiées sur 200 crabes. On retrouve quatre groupes composés de 50 individus, soit des crabes bleus mâles et femelles et des crabes oranges mâles et femelles.
crabs <- read("crabs", package = "MASS") skimr::skim(crabs)
La fonction skimr::skim()
vous permet d'obtenir de nombreuses informations sur le tableau crabs
. N'hésitez pas à consulter la page d'aide du jeu de données pour en apprendre davantage avec ?MASS:crabs
.
Réalisez une matrice de corrélation avec le coefficient de corrélation de Pearson sur ce jeu de données. N'utilisez que les variables pertinentes. Sélectionnez ces variables sur base de leur nom. Affichez un corrélogramme avec la partie supérieure uniquement (upper
).
crabs_corr <- correlation(sselect(___, ___:___), use = ___, method = ___) plot(crabs_corr, ___ = ___)
crabs_corr <- correlation(sselect(___, ___:___), use = "complete.obs", method = "pearson") plot(crabs_corr, type = ___) # Relisez le chapitre 12 du livre science des données 1 <https://wp.sciviewg/sdd-umons/>
correlation(sselect(crabs, ___:___), use = "complete.obs", method = "pearson") plot(crabs_corr, type = "upper") #### ATTENTION: Hint suivant = solution !####
## Solution ## crabs_corr <- correlation(sselect(crabs, front:depth), use = "complete.obs", method = "pearson") plot(crabs_corr, type = "upper")
grade_code("Vous vous rappelez comment réaliser une matrice de corrélation et un corrélogramme. Présenter une matrice de corrélation sous la forme d'un graphique, c'est quand même plus convivial.")
Répondez à la question ci-dessous.
question("Quelles sont les combinaisons de variables les plus corrélées ? (sélectionnez les deux variables)", answer("front"), answer("width", correct = TRUE), answer("depth"), answer("rear"), answer("length", correct = TRUE), type = "multiple", allow_retry = TRUE, random_answer_order = TRUE, submit_button = "Soumettre une réponse", try_again_button = "Resoumettre une réponse")
L'analyse de la corrélation est utile comme première approche afin de déterminer si une régression linéaire est intéressante avec nos données.
Pour aborder la régression linéaire, nous revenons sur le jeu de données bull
déjà utilisé lors du learnr de révision et issu de données de l'association wallonne de l'élevage. Ce jeu de données bull
contient les variables suivantes :
r paste0("<code>", names(bull), "</code>")
Votre objectif sera de réaliser une régression linéaire de la masse des taureaux (mesurée en kg) en fonction de leur âge (en mois).
Toute analyse commence par la description des données, surtout si elles sont nouvelles pour vous ! Commencez donc en réalisant un graphique en nuage de point de la masse en fonction de l'âge des taureaux.
chart(data = ___, ___ ___ ___) + ___()
chart(data = ___, ___ ___ ___) + geom_point() #### ATTENTION: Hint suivant = solution !####
## Solution ## chart(data = bull, weight ~ age) + geom_point()
grade_code("Vous avez réalisé le nuage de points souhaité.")
Le plus important ici à noter est la forme du nuage de points. S'étire-t-il en diagonale le long d'une droite ? C'est évidemment indispensable pour que les données conviennent à une régression linéaire. Vous pouvez aussi observer l'étalement des points, la présence de différents patchs qui suggèreraient peut-être l'existence de sous-populations, ou encore les valeurs extrêmes qui vous pousseraient à investiguer plus à fond (individus aberrants, erreurs de mesure ou d'encodage des données, par exemple). Dans notre cas, le nuage de point s'étire linéairement et il n'y a pas d'autres problèmes détectés.
Vous complétez la description des données avec un tableau général via skimr::skim()
et par une matrice de corrélation entre les trois variables quantitatives présentes :
skimr::skim(bull)
Le tableau contient deux variables qualitatives et trois variables quantitatives avec r nrow(bull)
taureaux qui ont été mesurés et il n'y a pas de valeurs manquantes. La quantité de données disponibles est acceptable pour une régression linéaire. Les distributions de l'âge et de la masse montrent qu'il y a plus de données pour les faibles valeurs, la distribution dans la plage d'âges étudiée -entre 13 et 40 mois- n'est pas homogène, mais sans que cela ne soit dramatique (cela se voit aussi sur le graphique, plus haut, avec comparativement un peu moins de données pour des âges de 30 à 40 mois).
correlation(num_vars(bull)) |> tabularise()
Toutes les corrélations sont positives et élevées. La corrélation entre la masse et l'âge est la plus forte.
Souvenez-vous que tabularise()
est une nouvelle fonction qui permet de réaliser un tableau propre des résultats (nous l'avons découvert dans le learnr précédent).
Complétez à présent les instructions ci-dessous afin de réaliser une régression linéaire de la masse en fonction de l'âge de nos taureaux.
bull_lm <- lm(data = ___, ___ ~ ___) # Tableau résumé de la régression linéaire summary(___) |> tabularise() # Graphique de la régression ___(___)
bull_lm <- lm(data = ___, ___ ~ age) # Tableau résumé de la régression linéaire summary(___) |> tabularise() # Graphique de la régression chart(___) #### ATTENTION: Hint suivant = solution !####
## Solution ## bull_lm <- lm(data = bull, weight ~ age) # Tableau résumé de la régression linéaire summary(bull_lm) |> tabularise() # Graphique de la régression chart(bull_lm)
grade_code("Vous avez réalisé votre première régression linéaire. Analysez le tableau et le graphique issus de ce modèle et répondez aux questions qui suivent.")
Suite à votre analyse, répondez aux questions suivantes :
quiz( question(text = "Quelle est la valeur de l'ordonnée à l'origine ?", answer(sprintf("%.2f", lm_result$estimate[1]), correct = TRUE), answer(sprintf("%.2f", lm_result$estimate[2])), answer(sprintf("%.2f", lm_result$std.error[1])), answer(sprintf("%.2f", lm_result$std.error[2])), answer(sprintf("%.2f", lm_result$statistic[1])), answer(sprintf("%.2f", lm_result$statistic[2])), answer(sprintf("%.2f", lm_param$r.squared[1])), allow_retry = TRUE, random_answer_order = TRUE, correct = "Vous pouvez repérer des éléments clés dans le tableau des résultats.", incorrect = "Oups, il semble que vous avez mal lu le tableau résumé de la régression linéaire.", submit_button = "Soumettre une réponse", try_again_button = "Resoumettre une réponse"), question(text = "Quelle est la valeur de la pente ?", answer(sprintf("%.2f", lm_result$estimate[1])), answer(sprintf("%.2f", lm_result$estimate[2]), correct = TRUE), answer(sprintf("%.2f", lm_result$std.error[1])), answer(sprintf("%.2f", lm_result$std.error[2])), answer(sprintf("%.2f", lm_result$statistic[1])), answer(sprintf("%.2f", lm_result$statistic[2])), answer(sprintf("%.2f", lm_param$r.squared[1])), allow_retry = TRUE, random_answer_order = TRUE, correct = "Oui, vous avez compris.", incorrect = "Ce n'est pas correct. Regardez plus attentivement vos résultats.", submit_button = "Soumettre une réponse", try_again_button = "Resoumettre une réponse"), question(text = "Est ce que la valeur de l'ordonnée à l'origine est significativement différente de zéro au seuil alpha de 5% ?", answer("oui", correct = TRUE), answer("non"), allow_retry = TRUE, submit_button = "Soumettre une réponse", try_again_button = "Resoumettre une réponse"), question( text = "Est ce que la valeur de la pente est significativement différente de zéro au seuil alpha de 5% ?", answer("oui", correct = TRUE), answer("non"), allow_retry = TRUE, submit_button = "Soumettre une réponse", try_again_button = "Resoumettre une réponse") )
La paramétrisation du modèle est une étape indispensable dans la réalisation d'une régression linéaire.
question(text = "Sélectionnez parmi les propositions suivantes l'équation paramétrée du modèle.", answer("$\\operatorname{y} = \\beta_{1} \\operatorname{x}+ \\alpha$"), answer("$\\operatorname{weight} = \\alpha + \\beta_{1} \\operatorname{age}$"), answer("$\\operatorname{y} = 26.335 \\operatorname{x} + 199.687$"), answer("$\\operatorname{weight} = 26 \\operatorname{age} + 200$"), answer("$\\operatorname{Masse [kg]} = 26.3 \\operatorname{Age [mois]} + 199.7$", correct = TRUE), answer("$\\operatorname{Masse [kg]} = 199.7 \\operatorname{Age [mois]} + 26.3$"), allow_retry = TRUE, submit_button = "Soumettre une réponse", try_again_button = "Resoumettre une réponse", correct = "Vous avez démontré votre capacité à choisir la bonne équation paramétrée du modèle dans la liste. Dans le learnr suivant, vous apprendrez à générer une telle équation.")
Votre auto-évaluation concernant la régression linéaire dans R (première partie) est terminée. Il est temps de revenir au syllabus et d'aborder la section relative à l'Analyse des résidus qui feront l'objet du prochain learnr et que vous travaillerez encore avec des exercices pratiques tout au long du module et après.
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, submit_button = "Soumettre une réponse", try_again_button = "Resoumettre une réponse" )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.