diff --git a/module3/exo3/exercice_fr.Rmd b/module3/exo3/exercice_fr.Rmd index 7eece5e296bb586e88166aa8a263ca75b44c2b9e..b9394b7aafa0b40ce9830a69f0a4c0dddd1aa6a5 100644 --- a/module3/exo3/exercice_fr.Rmd +++ b/module3/exo3/exercice_fr.Rmd @@ -1,33 +1,307 @@ --- -title: "Votre titre" -author: "Votre nom" -date: "La date du jour" -output: html_document +title: 'Sujet 6 : Autour du Paradoxe de Simpson' +author: "Leharanger Maxime" +date: "23/12/2020" +output: + pdf_document: default + word_document: default + html_document: default --- - +```{r} +library(formatR) +library(knitr) +library(markdown) +library(rmarkdown) +``` ```{r setup, include=FALSE} -knitr::opts_chunk$set(echo = TRUE) +knitr::opts_chunk$set(echo = TRUE,tidy.opts=list(width.cutoff=55), tidy=TRUE) +``` + + +# Question 1 + +```{r include=FALSE, linewidth=60} +smp <- read.csv2("C:/Users/Maxime Leharanger/Desktop/ED 585/Mooc Recherche reproductible principes méthodologiques pour une science transparente/Subject6_smoking.csv") +``` + +## Résumé du fichier "Sujet 6 : Autour du Paradoxe de Simpson" + +```{r} +summary(smp) +``` + +## Calcul du taux de mortalité pour chaque groupe## +### Sélection des données# + +```{r} +smp$X.Age. <- as.numeric(as.character(smp$X.Age.)) +#Convertion des données "AGE" en variable numérique +smoker <- subset(smp, smp$X.Smoker.== "Yes")#Sélection de la variable Fumeuse +nosmoker <- subset(smp, smp$X.Smoker.== "No")#Sélection de la variable non Fumeuse +summary(smoker)#Résumé des données des fumeuses +summary(nosmoker)#Résumé des données des non-fumeuses +``` + +### Assignation du taux de mortalité chez les fumeuses à la variable "mortalité.smoker" + +```{r} +mortalite.smoker <- sum(smoker$X.Status.[] == "Dead") / (sum(sum(smoker$X.Status.[] == "Alive"),sum(smoker$X.Status.[] == "Dead"))) +``` + +### Assignation du taux de mortalité chez les non-fumeuses à la variable "mortalité.nosmoker" + +```{r message=TRUE} +mortalite.nosmoker <- sum(nosmoker$X.Status.[] == "Dead") / (sum(sum(nosmoker$X.Status.[] == "Alive"),sum(nosmoker$X.Status.[] == "Dead"))) +``` + +### Taux de mortalité chez les fumeuses + +```{r} +mortalite.smoker +``` + +### Taux de mortalité chez les non-fumeuses + +```{r} +mortalite.nosmoker +``` + +## Représentation graphique des effectifs## + +```{r} +barplot(table(smp$X.Status.,smp$X.Smoker.), + main = "Nombre de personne en vie/décédé en fonction \n du groupe fumeuse/non-fumeuse", + beside= TRUE, + xlab = "Fumeuse", + ylab = "Nombre de personne",legend.text = c("Alive","Dead"),col = c("white", "black")) ``` -## Quelques explications +## Calcul de l'intervalle de confiance## +### Installation des packages + +```{r} +library(binom) +``` + +### Intervalles de confiance chez les fumeuses + +```{r} +binom.confint(sum(smoker$X.Status.[] == "Dead"),sum(sum(smoker$X.Status.[] == "Alive"),sum(smoker$X.Status.[] == "Dead")),method="exact") +``` + +Le taux de mortalité chez le groupe "Fumeuse" est de 0.2388316 et est bien compris entre l'intervalle de confiance [0.2047323;0.2756061]. + +### Intervalles de confiance chez les non-fumeuses + +```{r} +binom.confint(sum(nosmoker$X.Status.[] == "Dead"),sum(sum(nosmoker$X.Status.[] == "Alive"),sum(nosmoker$X.Status.[] == "Dead")),method="exact") +``` +Le taux de mortalité chez le groupe "Non-fumeuse" est de 0.3142077 et est bien compris entre l'intervalle de confiance [0.2807031;0.3492176]. + +## En quoi ce résultat est-il surprenant ? + +Ce résultat est surprenant car je m'attendais à ce que le taux de mortalité soit plus élevé chez le groupe "fumeuse" par rapport au groupe "non-fumeuse". Dans ce cas-là c'est l'inverse. + + +# Question 2 + +## Sélection des données + +### Transformation de la variable "Age" en données numériques + +```{r} +smp$X.Age. <- as.numeric(as.character(smp$X.Age.)) +``` + +### Classifaction de la variable "Age" en plusieurs classe d'âge + +```{r} +smp$X.Age. <- cut(smp$X.Age., breaks = c(18, 34, 54, 64, 99), include.lowest = TRUE) +``` + +### Sélection de la variable "Fumeuse" en fonction de son état de vie et de sa classe d'âge + +```{r} +smoker <- subset(smp, smp$X.Smoker.== "Yes", X.Status. & X.Age.) +``` + +### Sélection de la variable "non Fumeuse" en fonction de son état de vie et de sa classe d'âge + +```{r} +nosmoker <- subset(smp, smp$X.Smoker.== "No",X.Status. & X.Age.) +``` -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 . +### Résumé des données des fumeuses -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: +```{r} +summary(smoker) -```{r cars} -summary(cars) ``` -Et on peut aussi aisément inclure des figures. Par exemple: +### Résumé des données des personnes non-fumeuses -```{r pressure, echo=FALSE} -plot(pressure) +```{r} +summary(nosmoker) ``` -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. +## Calcul du taux de mortalité + +### Assignation du taux (en % arrondi au centième) de mortalité chez le groupe des personnes fumeuses en fonction de chaque classe d'âge + +```{r} +Mort.smk <- c(round(sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "[18,34]")/ (sum(sum(smoker$X.Status.[] == "Alive" & smoker$X.Age.[]== "[18,34]"),sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "[18,34]")))*100,2), +round(sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "(34,54]")/ (sum(sum(smoker$X.Status.[] == "Alive" & smoker$X.Age.[]== "(34,54]"),sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "(34,54]")))*100,2), +round(sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "(54,64]")/ (sum(sum(smoker$X.Status.[] == "Alive" & smoker$X.Age.[]== "(54,64]"),sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "(54,64]")))*100,2), +round(sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "(64,99]")/ (sum(sum(smoker$X.Status.[] == "Alive" & smoker$X.Age.[]== "(64,99]"),sum(smoker$X.Status.[] == "Dead" & smoker$X.Age.[]== "(64,99]")))*100,2)) +``` + +### Assignation du taux de mortalité (en % arrondi au centième) chez le groupe des personnes non-fumeuses en fonction de chaque classe d'âge + +```{r} +Mort.nosmk <- c(round(sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "[18,34]")/ (sum(sum(nosmoker$X.Status.[] == "Alive" & nosmoker$X.Age.[]== "[18,34]"),sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "[18,34]")))*100,2), +round(sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "(34,54]")/ (sum(sum(nosmoker$X.Status.[] == "Alive" & nosmoker$X.Age.[]== "(34,54]"),sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "(34,54]")))*100,2), +round(sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "(54,64]")/ (sum(sum(nosmoker$X.Status.[] == "Alive" & nosmoker$X.Age.[]== "(54,64]"),sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "(54,64]")))*100,2), +round(sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "(64,99]")/ (sum(sum(nosmoker$X.Status.[] == "Alive" & nosmoker$X.Age.[]== "(64,99]"),sum(nosmoker$X.Status.[] == "Dead" & nosmoker$X.Age.[]== "(64,99]")))*100,2)) +``` + +### Tableau récapitulatif du taux (en % arrondi au centième) de mortalité entre les groupes en fonction des classes d'âge + +```{r} +Tx.mortalite <- data.frame(Mort.nosmk,summary(smoker$X.Age.), Mort.smk,summary(nosmoker$X.Age.))#Création du tableau récapitulatif +rownames(Tx.mortalite) <- c("[18-34]","[34-54]","[55-64]","[65-99]") +colnames(Tx.mortalite) <- c("Pourcentage de mortalité chez les fumeuses","Nombre de fumeuses","Pourcentage de mortalité chez les non-fumeuses","Nombre de non-fumeuses") +Tx.mortalite#Affichage tableau +``` + +## En quoi ce résultat est-il surprenant ? + +Ce résultat est surprenant car je m'attendais à ce que les taux de mortalités chez les fumeuses soient plus fort par rapport au groupe non-fumeuse à chaque classe d'âge. Ici, c'est l'inverse. Cependant on remarque une disproportion de l'échantillon en fonction de la classe d'âge. En effet, la mortalité augmente avec l'âge, et il y a moins de personnes âgées dans le groupe "fumeuses" (49). Nous pouvons nous demander si le biais de la mortalité "naturelle" ne permet pas dans ce cas là, d'observer l'effet du tabagisme sur la mortalité des femmes fumeuses. Les deux groupes auraient dû avoir le même nombre de personnes. + +## Représentation graphique des effectifs + +```{r} +barplot(table(smoker$X.Status.,smoker$X.Age.), + main = "Nombre de personne en vie/décédé en fonction de sa classe \n d'âge chez les personnes fumeuses", + beside= TRUE, + xlab = "Classe d'âge", ylab = "Nombre de personne", legend.text = c("Alive","Dead"), col = c("white", "black")) + +barplot(table(nosmoker$X.Status.,nosmoker$X.Age.), + main = "Nombre de personne en vie/décédé en fonction de sa classe \n d'âge chez les personnes non-fumeuses", + beside= TRUE, + xlab = "Classe d'âge",ylab = "Nombre de personne",legend.text =c("Alive","Dead"),col=c("white","black")) +``` + + Dans le premier tableau, nous observons une proportion de personnes fumeuses plus grande pour les classes d'âges plus jeune ([18,34],(34,54])) et qui sont moins à risque de mortalité. +A l'inverse dans le deuxième tableau la forte proportion de personnes non-fumeuses dans la dernière classe d'âge (64,99] permet d'observer une mortalité beaucoup plus grande. + +# Question 3 + +## Gestion des données + +```{r include=FALSE} +smp <- read.csv2("C:/Users/Maxime Leharanger/Desktop/ED 585/Mooc Recherche reproductible principes méthodologiques pour une science transparente/Subject6_smoking.csv") +``` +```{r} +summary(smp)#Résumé du fichier +smp$X.Age. <- as.numeric(as.character(smp$X.Age.)) +#Transformation de la variable Age en données numériques +smp$X.Status. <- factor(smp$X.Status., labels = c("0","1")) +#"0" signifie que les individus sont en vie et "1" signifie qu'ils sont morts +colnames(smp) <- c("X.Smoker.","DEATH","AGE") +#Dénomination des variables selon la consigne +smoker <- data.frame(subset(smp, smp$X.Smoker.== "Yes")) +#Sélection de la variable Fumeuse +nosmoker <- data.frame(subset(smp, smp$X.Smoker.== "No")) +#Sélection de la variable Non-Fumeuse +``` + + +## Régression Logistique + +### Vérifications des paramètres de la régression logistique chez les personnes fumeuses : + +```{r} +summary(smoker); +``` + +VA à expliquer = 582; VA explicatives : age(1) Status(1) +Il faut au moins 5-10 évènements par VA explicative; + +```{r} +(1+1)* 10 +(1+1)* 5 +``` + +20 < 582, il faut au minimum 20 personnes pour la variable à expliquer et nous en avons 582 -> paramètre accepté +10 < 582, il faut au minimum 10 personnes pour la variable à expliquer et nous en avons 582 -> paramètre accepté + +### Vérifications des paramètres de la régression logistique chez les personnes non-fumeuses : + +```{r} +summary(nosmoker) +``` + +VA à expliquer = 732; VA explicatives : age(1) Status(1); +Il faut au moins 5-10 évènements par VA explicative; + +```{r} +(1+1) * 10 +(1+1)* 5 +``` + +20 < 732, il faut au minimum 20 personnes pour la variable à expliquer et nous en avons 732 -> paramètre accepté +10 < 732, il faut au minimum 10 personnes pour la variable à expliquer et nous en avons 732 -> paramètre accepté + +### Calcul de la régression logistique chez les fumeuses + +```{r} +reg.smoker <- glm(smoker$DEATH~smoker$AGE, data=smoker, family=binomial(link=logit)) +summary(reg.smoker) +``` + +L'âge chez les personnes fumeuses sont statistiquement associés à la mortalité (<2e-16 ***). Lorsque l'âge augmente de 1 chez les fumeurs, le niveau de mortalité augmente de plus 8%. + +```{r} +x =smoker$AGE +y = as.numeric(as.character(smoker$DEATH)) +#Convertion de la variable "DEATH" en variable numérique +COEFF= coef(reg.smoker) +#Assignation des coefficients de la régression logistique +logit_ypreditsmoker = COEFF[2]*x + COEFF[1] +ypreditsmoker=exp(logit_ypreditsmoker)/(1 + exp(logit_ypreditsmoker)) +# transfo inverse de logit +plot(x,y, ylim = c(0,1)) +points(x,ypreditsmoker, col="red") +#Représentation de la régression logistique + +``` + +### Calcul de la régression logistique chez les non-fumeuses + +```{r} +reg.nosmoker <- glm(nosmoker$DEATH~nosmoker$AGE, data=nosmoker, family="binomial") +summary(reg.nosmoker) +``` + +L'âge chez les personnes non-fumeuses sont statistiquement associés à la mortalité (<2e-16 ***). Lorsque l'âge augmente de 1 chez les non-fumeurs, le niveau de mortalité augmente plus de 10%. + +```{r} +x2 = nosmoker$AGE +y2 = as.numeric(as.character(nosmoker$DEATH)) +COEFF2= coef(reg.nosmoker) +logit_ypreditnosmoker = COEFF2[2]*x2 + COEFF2[1] +ypreditnosmoker = exp(logit_ypreditnosmoker)/(1 + exp(logit_ypreditnosmoker)) +plot(x2,y2, ylim = c(0,1)) +points(x2,ypreditnosmoker, col="red") +``` + +## Ces régressions vous permettent-elles de conclure sur la nocivité du tabagisme ? + +Ces régressions ne permettent pas de conclure sur la nocivité du tabagisme. En effet, ces régressions permettent de quantifier le lien entre la variable "DEATH" et la variable "AGE", c'est à dire que plus les sujets sont agés plus le niveau de mortalité augmente. + +Pour étudier l'effet du tabagisme sur la mortalité, il faut prendre en compte l'effet de l'âge sur le taux de mortalité. La disproportion des classes d'âge entraine un biais d'interprétation qui ne permet pas de conclure sur l'effet du tabagisme sur la mortalité. + + -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.