diff --git a/module3/exo3/exercice_fr.Rmd b/module3/exo3/exercice_fr.Rmd index efe1eb617990ab37bf2e18503e0b3e8e6b301490..2e1e62774a1bb07cf8969f288ef5b9eaa25416f0 100644 --- a/module3/exo3/exercice_fr.Rmd +++ b/module3/exo3/exercice_fr.Rmd @@ -5,29 +5,160 @@ date: "01/02/2024" output: html_document --- +Représentez dans un tableau le nombre total de femmes vivantes et décédées sur la période en fonction de leur habitude de tabagisme. -```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) +```{r} +data_url = "https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/-/raw/master/module3/Practical_session/Subject6_smoking.csv" ``` +```{r} +data = read.csv(data_url) +head(data) +``` +```{r} +tableau <- table(data$Smoker, data$Status) + +# Renommer les lignes et les colonnes +rownames(tableau) <- c("Non Fumeur", "Fumeur") +colnames(tableau) <- c("Vivant", "Décédé") + +# Affichage du tableau +print(tableau) +``` + + + Vivant Décédé + Non Fumeur 502 230 + Fumeur 443 139 + -## Quelques explications +# Données +total_smokers <- 582 +deaths_smokers <- 139 +total_non_smokers <- 732 +deaths_non_smokers <- 230 -Ceci est un document R markdown que vous pouvez aisément exporter au format HTML, PDF, et MS Word. Pour plus de détails sur R Markdown consultez . +# Calcul des taux de mortalité +mortality_rate_smokers <- deaths_smokers / total_smokers +mortality_rate_non_smokers <- deaths_non_smokers / total_non_smokers -Lorsque vous cliquerez sur le bouton **Knit** ce document sera compilé afin de ré-exécuter le code R et d'inclure les résultats dans un document final. Comme nous vous l'avons montré dans la vidéo, on inclue du code R de la façon suivante: +# Fonction pour calculer l'intervalle de confiance binomial +binom_conf_interval <- function(p, n, alpha = 0.05) { + z <- qnorm(1 - alpha / 2) + se <- sqrt(p * (1 - p) / n) + lower <- p - z * se + upper <- p + z * se + return(c(lower, upper)) +} + +# Calcul des intervalles de confiance +ci_smokers <- binom_conf_interval(mortality_rate_smokers, total_smokers) +ci_non_smokers <- binom_conf_interval(mortality_rate_non_smokers, total_non_smokers) + +# Création du graphique +barplot( + c(mortality_rate_smokers, mortality_rate_non_smokers), + ylim = c(0, 0.4), + names.arg = c("Fumeurs", "Non fumeurs"), + ylab = "Taux de mortalité", + col = c("lightblue", "lightgreen"), + main = "Taux de mortalité par groupe avec intervalles de confiance" +) + +# Ajout des barres d'erreur pour les intervalles de confiance +segments(1, ci_smokers[1], 1, ci_smokers[2], lwd = 2, col = "blue") +segments(2, ci_non_smokers[1], 2, ci_non_smokers[2], lwd = 2, col = "green") -```{r cars} -summary(cars) ``` +figure + +En quoi ce résultat est-il surprenant ? + +ce résultat est surprenant car le taux de mortalité est plus élevée chez les femmes non fumeuses -Et on peut aussi aisément inclure des figures. Par exemple: +# 2ème questions + +Reprenez la question 1 (effectifs et taux de mortalité) en rajoutant une nouvelle catégorie liée à la classe d'âge. On considérera par exemple les classes suivantes : 18-34 ans, 34-54 ans, 55-64 ans, plus de 65 ans. En quoi ce résultat est-il surprenant ? Arrivez-vous à expliquer ce paradoxe ? De même, vous pourrez proposer une représentation graphique de ces données pour étayer vos explications. + +```{r} +library(ggplot2) + +# Convertir la colonne "age" en type numérique +data$age <- as.numeric(as.character(data$age)) + +# Créer des classes d'âge +data$age_category <- cut(data$Age, breaks = c(18, 34, 54, 65, Inf), labels = c("18-34 ans", "34-54 ans", "55-64 ans", "plus de 65 ans")) + +# Calculer le taux de mortalité pour chaque catégorie d'âge et pour les fumeurs et les non-fumeurs +taux_mortalite <- aggregate(data$Status== "Dead", by = list(data$Smoker, data$age_category), FUN = mean) + +# Renommer les colonnes pour plus de clarté +colnames(taux_mortalite) <- c("Smoker", "Age_Category", "Mortality_Rate") + +# Filtrer les données pour exclure les valeurs NA +taux_mortalite <- na.omit(taux_mortalite) + +# Afficher les résultats +print(taux_mortalite) + +# Créer un graphique à barres pour visualiser le taux de mortalité par catégorie d'âge et pour les fumeurs et les non-fumeurs +ggplot(taux_mortalite, aes(x = Age_Category, y = Mortality_Rate, fill = Smoker)) + + geom_bar(stat = "identity", position = "dodge") + + labs(x = "Catégorie d'âge", y = "Taux de mortalité", fill = "Fumeur") + + ggtitle("Taux de mortalité par catégorie d'âge et par fumeur/non-fumeur") + + theme_minimal() -```{r pressure, echo=FALSE} -plot(pressure) ``` -Vous remarquerez le paramètre `echo = FALSE` qui indique que le code ne doit pas apparaître dans la version finale du document. Nous vous recommandons dans le cadre de ce MOOC de ne pas utiliser ce paramètre car l'objectif est que vos analyses de données soient parfaitement transparentes pour être reproductibles. +figure + +ce résultat est surprenant car pour la classe d'âge 65 et plus, le taux de mortalité est pratiquement identique entre les fumeuses et non-fumeuses + +ce résultat doit être expliqué par l'augmentation de l'incidence de maladies plus sévère avec l'âge et que donc cela se confond avec le tabagisme + +# 3ème questions + +Afin d'éviter un biais induit par des regroupements en tranches d'âges arbitraires et non régulières, il est envisageable d'essayer de réaliser une régression logistique. Si on introduit une variable Death valant 1 ou 0 pour indiquer si l'individu est décédé durant la période de 20 ans, on peut étudier le modèle Death ~ Age pour étudier la probabilité de décès en fonction de l'âge selon que l'on considère le groupe des fumeuses ou des non fumeuses. Ces régressions vous permettent-elles de conclure sur la nocivité du tabagisme ? Vous pourrez proposer une représentation graphique de ces régressions (en n'omettant pas les régions de confiance). + + +```{r} +library(ggplot2) +library(dplyr) + +# Chargement des données +data <- read.csv("https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/-/raw/master/module3/Practical_session/Subject6_smoking.csv") + +# Création de la variable "Death" +data$Death <- ifelse(data$Status == "Dead", 1, 0) + +# Réalisation de la régression logistique pour les fumeuses +regression_fumeuses <- glm(Death ~ Age, data = filter(data, Smoker == "Yes"), family = binomial) + +# Réalisation de la régression logistique pour les non-fumeuses +regression_non_fumeuses <- glm(Death ~ Age, data = filter(data, Smoker == "No"), family = binomial) + +# Résumé des résultats de la régression pour les fumeuses +summary(regression_fumeuses) + +# Résumé des résultats de la régression pour les non-fumeuses +summary(regression_non_fumeuses) + +# Représentation graphique des régressions +ggplot(data, aes(x = Age, y = Death, color = Smoker)) + + geom_point() + + geom_smooth(method = "glm", method.args = list(family = "binomial"), se = TRUE) + + labs(x = "Âge", y = "Probabilité de décès", color = "Fumeur") + + ggtitle("Régression logistique de la probabilité de décès en fonction de l'âge par groupe de fumeur/non-fumeur") + +``` + +figure + +Pour les âges inférieurs à 65 ans, le tabagisme est nocif puisque le taux de mortalité est plus élevé chez les fumeuses que les non-fumeuses mais au-dessus de cet âge (de 65 ans), la courbe s'inverse légèrement ce qui indique que le taux de mortalité est presque identique + + + + + + -Comme les résultats ne sont pas stockés dans les fichiers Rmd, pour faciliter la relecture de vos analyses par d'autres personnes, vous aurez donc intérêt à générer un HTML ou un PDF et à le commiter. -Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel.