diff --git "a/module3/exo3/Pour \303\251valuation par les pairs/exercice_fr.Rmd" "b/module3/exo3/Pour \303\251valuation par les pairs/exercice_fr.Rmd" new file mode 100644 index 0000000000000000000000000000000000000000..cc8f3b145a179e9b75564cbb2cb2c220f8a02dce --- /dev/null +++ "b/module3/exo3/Pour \303\251valuation par les pairs/exercice_fr.Rmd" @@ -0,0 +1,205 @@ +--- +title: "Document computationnel évalué par des pairs" +author: "Bertille MATRAY" +date: "15 septembre 2020" +output: pdf_document +--- + + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## **Sujet 6: Autour du Paradoxe de Simpson** + + +# Chargement des données +Les données de l'exercice sont disponibles sur gitlab [ici](https://gitlab.inria.fr/learninglab/mooc-rr/mooc-rr-ressources/blob/master/module3/Practical_session/Subject6_smoking.csv). J'ai moi-même charger les données le 15/09/2020. Le séparateur utilisé est la virgule, l'âge des femmes est + +```{r} +data<-read.csv(file.choose(), header = TRUE, sep = ",", dec=".") +head(data) +tail(data) +class(data$Age) +summary(data) +``` +Nous avons vérifié le bon import et que l'âge soit bien un numeric. +Y -t-il des données manquantes ? +```{r} +na_records=apply(data, 1, function (x) any(is.na(x))) +data[na_records,1] +``` +Non il ne manque rien. + + +# Mission 1: Compter les femmes vivantes et décédées en fonction des habitudes de tabagisme + +```{r} +tot_alive=sum(data$Status=="Alive") +tot_dead=sum(data$Status=="Dead") +tot_fumeuse=sum(data$Smoker=="Yes") +tot_nonfumeuse=sum(data$Smoker=="No") +tot_dead +tot_fumeuse +``` +Le nombre total de femmes décédées pendant la période est 369. Le nombre de fumeuse est 582. +En relation avec les habitudes de tabagisme: +```{r} +tableau=table(data$Smoker, data$Status, deparse.level=2) +tableau +mortalite_fumeuse=tableau[2,2]/tot_fumeuse +mortalite_nonfumeuse=tableau[1,2]/tot_nonfumeuse +mortalite_fumeuse +mortalite_nonfumeuse + +``` +Le taux de moralité des fumeuses est plus petit que celui des non fumeuses ! C'est surprenant lorsqu'on connaît les risques du tabac sur la santé. + +J'ai choisis de faire une représentation graphique en baton, en chargeant d'abord la library ggplot2. +```{r} +taux= data.frame(Fumeur=c("Oui","Non"), Taux_de_mortalite=c(mortalite_fumeuse,mortalite_nonfumeuse)) +library(ggplot2) +ggplot(data=taux, aes(x=Fumeur, y=Taux_de_mortalite))+geom_bar(stat="identity") +``` + +# Mission 2 : Prendre en compte les classes d'âge dans l'analyse +Nous considérons les classes 18-34 ans, 34-54 ans, 55-64 ans, plus de 65 ans. 18 est bien l'âge minimum donc on a bien toutes les femmes de l'étude. +```{r} +tot_18_34=sum(data$Age<=34) +tot_34_54=sum(data$Age<=54 & data$Age>34) +tot_54_65=sum(data$Age<=65 & data$Age>54) +tot_65_=sum(data$Age>65) +tot_18_34 +tot_34_54 +tot_54_65 +tot_65_ +``` + +Il nous faut une fonction qui indique la classe d'age, appelée génération, lorsqu'on doit un âge précis en entrée. +```{r} +convert_Age=function(w){ + generation=0 + if(w<=34){ + generation=as.character("18-34") + } + if(w>34){ + if(w<=54){ + generation=as.character("34-54") + } + } + if(w>54){ + if(w<=65) + generation=as.character("55-65") + } + if (w>65){ + generation=as.character("65+") + } + return (generation) +} + +``` + +Ensuite on applique cette fonction aux données. On crée d'abord une colonne de 1314 lignes vides, on l'ajoute au tableau de données data. Enfin on la remplit avec la classe d'âge ligne par ligne. +```{r} +Generation=rep("",1314) +data<-cbind(data,Generation) +for (i in (1:1314)){ + data$Generation[i]=convert_Age(data$Age[i]) +} +``` + +Revenons au lien entre le tabagisme, l'âge et la mortalité. +Si on regarde d'abord la mortalité selon la classe d'âge dns notre jeu de données: + +```{r} +tableau3=table(data$Status, data$Generation, deparse.level=2) +tableau3 +Generation1_dead=tableau3[2,1]/tot_18_34 +Generation2_dead=tableau3[2,2]/tot_34_54 +Generation3_dead=tableau3[2,3]/tot_54_65 +Generation4_dead=tableau3[2,4]/tot_65_ +``` +Représentation graphique des mortes par générations: +```{r} +Taux_deces_par_Generation= data.frame(Generation=c("18-34","35-54","55-65","65+"), Taux_dead=c(Generation1_dead, Generation2_dead, Generation3_dead, Generation4_dead)) +library(ggplot2) +ggplot(data=Taux_deces_par_Generation, aes(x=Generation, y=Taux_dead))+geom_bar(stat="identity") +``` + +Comme on pouvait s'y attendre, la mortalité croit avec l'âge. + +Je cherche à expliquer le résultat de la 1ère partie, à savoir que la mortalité des non fumeuses a été plus élevée que celle des fumeuse, par la distribution des fumeuses dans les classes d'âge: +```{r} +tableau2=table(data$Smoker, data$Generation, deparse.level=2) +tableau2 +Generation1_fumeuse=tableau2[2,1]/tot_18_34 +Generation2_fumeuse=tableau2[2,2]/tot_34_54 +Generation3_fumeuse=tableau2[2,3]/tot_54_65 +Generation4_fumeuse=tableau2[2,4]/tot_65_ +``` +On va représenter la distribution des fumeuses à travers les classes d'âge: + +```{r} +Taux_de_fumeuse_par_Generation= data.frame(Generation=c("18-34","35-54","55-65","65+"), Taux_de_fumeuse=c(Generation1_fumeuse, Generation2_fumeuse, Generation3_fumeuse, Generation4_fumeuse)) +library(ggplot2) +ggplot(data=Taux_de_fumeuse_par_Generation, aes(x=Generation, y=Taux_de_fumeuse))+geom_bar(stat="identity") +``` + +Les fumeuses sont peu représentées dans le groupe 65 ans et plus, en comparaison des autres classes d'âge. Les classes d'âge entre 18 et 65 ans contiennent plus de 40% de fumeuses. Et nous avons vu sur le graphique précédent que ces classes n'étaient pas soumises à des mortalités plus élevées. +Jusqu'ici les données ne participent pas à montrer que le tabagisme augmente la mortalité. + + +# Mission 3 : Régression logistique +On souhaite s'affranchir des classes d'âges qui sont construites arbitrairement et peuvent générer un biais. Pour cela on utilise la regression logistique. + +Pour commencer, 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 ajoute cette colonne Death au tableau data + +```{r} +Death=rep(0, 1314) +for (i in (1:1314)){ + if (data$Status[i]=="Dead"){ + Death[i]=as.numeric(1) + } +} +data<-cbind(data,Death) + +``` + + + +Le modèle demandé par la consigne est Death ~ Age appliqué d'une part aux fumeuses et d'autre part aux non-fumeuses. Je commence par séparer les fumeuses des non fumeuses. +```{r} +Fumeuses=subset(data, data$Smoker=="Yes") +View(Fumeuses) +NonFumeuses=subset(data, data$Smoker=="No") +View(NonFumeuses) +``` +On applique donc le modèle Death~Age aux fumeuses +```{r} +mod2<-glm(Death ~ Age, family=binomial, data=Fumeuses) +summary(mod2) +``` +Chez les fumeuses, le risque de décès augmente significativement avec l'âge. + +Chez les non-fumeuses: +```{r} +mod3<-glm(Death ~ Age, family=binomial(logit), data=NonFumeuses) +summary(mod3) +``` +De même, le risque de décès augmente significativement avec l'âge. + + +## Et donc... + +Cette étude des données ne montre pas d'effet aggravant du tabagisme sur la mortalité des femmes étudiées pendant la période choisie. + +Le modèle suivant étudie l'ensemble du jeu de données et Death ~ Age + Smocker +```{r} +mod1<-glm(data$Death ~ data$Age + data$Smoker, family=binomial(logit), data=data) +summary(mod1) +``` +Le risque de decès est significativement plus fort si l'âge augmente. Le risque de décès est également significativement plus fort si la personne fume mais le facteur Smoker est bien moins significatif que l'âge. + + +## Merci +Manquant de temps, je poste ce travail sans aller plus loin (ceci m'ayant déjà pris des années vu mon niveau de code). Merci de m'avoir lu, bonne continuation à vous. \ No newline at end of file