class: inverse, center, middle background-image: url(data:image/png;base64,#images/leaf_carre_blanc.jpg) background-size: cover # Atelier recherche reproductible <img src="data:image/png;base64,#images/inra_imabs_short.png" width="300px"/> ### Journée reproductibilité IMABS INRAE .large[Tifenn Corre | Elise Maigné | 5 Février 2021] <!-- ############################################################ --> --- ## Pourquoi de la recherche reproductible ? -- - Revues qui demandent de plus en plus les données et le code (délais parfois longs entre soumission, relecture et publication) -- - Travailler à plusieurs -- - Transmettre son travail (y compris à soi-même !) --- ## Fil rouge de l'atelier .pull-left[ Ma collègue et moi avons écrit un article en 2014. Aujourd'hui, la revue me dit OK pour la publication mais il faut actualiser les données. J'ai retrouvé un dossier contenant des codes et des données. - **Etape 1** : identifier les problèmes éventuels qui font que ça n'est pas vraiment reproductible. - **Etape 2** : créer un nouveau projet vide et télécharger des données plus récentes. - **Etape 3** : réappliquer le code sur les nouvelles données dans une démarche RR. ] .pull-right[  ] <!-- ############################################################ --> --- class: inverse, middle, center # Etape 1 : Identification des problèmes <!-- ############################################################ --> --- ## Etape 1 - Identification des problèmes Récupérer et dézipper dans un dossier "AtelierRR" pour l'après-midi : **dossier zip à télécharger** <!-- https://filesender.renater.fr/?s=download&token=cd1bbf5f-7a63-4ebc-a8da-d4b7e76e71e0 --> *Vous n'avez pas forcément besoin d'exécuter les codes à cette étape* <hr> - Quelles sont les difficultés rencontrées pour reproduire les résultats de l'article 2014 ? - Quelles sont les données utilisées pour produire l'article ? - Quel programme fait quoi ? - Identifier les points problématiques dans le code. <hr> 10 minutes <!-- ############################################################ --> --- ## Etape 1 - Correction -- - Données utilisées : **niveau_de_vie.csv** -- - Programmes utilisés : **code_prep.R et code_plot.R** (avec des modifications à faire) -- - Problèmes dans le code : - Il manque l'appel aux librairies - Correction des données sans explications - Le code ne produit pas exactement ce qu'on veut - Chemins absolus à modifier dans le code <!-- ############################################################ --> --- ## Bilan Etape 1 : champs couverts par la recherche reproductible : -- - Gestion des données -- - Structuration de l'information -- - Précision de calcul -- - Bien coder -- - Gestion du workflow -- - Gestion de l'environnement logiciel -- - Versionning -- - Mise à disposition du code -- - ... <!-- ############################################################ --> --- ## Bilan Etape 1 : champs couvert par la recherche reproductible : - **Gestion des données** - **Structuration de l'information** - Précision de calcul - **Bien coder** - **Gestion du workflow** - **Gestion de l'environnement logiciel** - **Versionning** - Mise à disposition du code - ... <!-- ############################################################ --> --- class: inverse, middle, center # Les données <!-- ############################################################ --> --- ## Données - Source - Comment indiquer la source des données ? - Comment retrouver aisément la source des données ? - Comment mettre à disposition ses données ? -- <hr> .left-column[ **URL** ] .right-column[ - Exemple : [https://www.insee.fr/fr/statistiques/3559982#tableau-figure1_radio1]([https://www.insee.fr/fr/statistiques/3559982#tableau-figure1_radio1]) - Pas pérenne ! Le site web peut changer, les données peuvent être modifiées... - **A minima URL + la date d'accès + conserver une copie** ] -- <hr> .left-column[ **DATAVERSE (entrepôt de données)** ] .right-column[ - Exemple : [https://data.inrae.fr/](https://data.inrae.fr/) - Si données publiables (données expérimentales par ex.). - **DOI + version** ] <!-- ############################################################ --> --- ## Données - Stockage - Assurer la **pérennité**, la **portabilité** et l'**interopérabilité**. - Les données doivent pouvoir être lues peu importe le système ou l'environnement, intégrées par un autre logiciel... - Eviter les formats propriétaires .doc, .xls, .xlsx ou codés (.pdf) et privilégier des **formats ouverts** (texte) de préférence : txt, csv... - Conserver les données brutes, à ne pas toucher. ► **Dossier `./databrut`** - Ne pas mélanger dans un même dossier données brutes et données modifiées <!-- ############################################################ --> --- class: inverse, middle, center # L'architecture <!-- ############################################################ --> --- ## L'architecture Des habitudes à prendre pour tous ses projets -- .pull-left[ `./databrut` = on ne touche pas ! JAMAIS `./scripts` = les codes ] -- .pull-right[ **A partir de `databrut` et `scripts` on doit pouvoir tout refaire.** ] -- <hr> .pull-left[ `./results` = données intermédiaires, plots... `./doc` = biblio, documents divers.... ] .pull-right[ On peut rajouter des dossiers (pas trop) avec un nom compréhensible ] -- <hr> .left-column[ **EXEMPLE** ] .right-column[ ``` ./databrut ./scripts ./results ./results/data ./results/graphs ./biblio ./articleredaction ``` ] <!-- ############################################################ --> --- class: inverse, middle, center # Etape 2 : Nouveau projet, nouvelles données <!-- ############################################################ --> --- ## Etape 2 - Nouveau projet, nouvelles données - A vous ! - Créer un dossier "article_2021" (au même niveau que article_2014) - Y créer l'architecture suivante : ``` ./databrut ./scripts ./results ./results/data ./results/graphs ``` - Récupérer les nouvelles données [https://www.insee.fr/fr/statistiques/3559982#graphique-figure1_radio1](https://www.insee.fr/fr/statistiques/3559982#graphique-figure1_radio1) - Les sauvegarder dans le dossier `./databrut` sans modifier le nom du fichier <hr> 5 minutes <!-- ############################################################ --> --- ## Etape 2 - Nouveau projet, nouvelles données - Ouvrir RStudio et créer un nouveau projet (File > New project > Existing directory (cocher "open in new session" puis pointer vers le dossier article_2021 créé précédemment)) - Créer un fichier README (texte, markdown...) à la racine du dossier article_2021, en expliquant le projet et en mettant la source des données. .left-column[ ** Exemple de fichier README.md (langage markdown)** ] .right-column[ ``` # Projet article 2021 **Date** : 05/02/2021 **Auteur** : Elise Maigné & Tifenn Corre Mise à jour de l'article sur la comparaison des niveaux de vie entre hommes et femmes. Mà j avec données téléchargées le 05/02/2021... ``` ] - Quel est le problème avec le fichier téléchargé ? <hr> 5 minutes <!-- ############################################################ --> --- ## Etape 2 - Nouveau projet, nouvelles données Les données sont au format Excel : éviter au maximum la manipulation de données dans ce fichier ! 2 solutions : <hr> -- **1 - ** En faire un CSV dans le bon sens (SANS MODIFIER LES DONNEES) à mettre dans `./databrut`. Ex. dans LibreOffice : copier la sélection, puis dans un nouveau fichier : clic droit > collage spécial > collage spécial... > cliquer sur le bouton transposer > sauver le fichier. !! Encodage UTF-8 !! Expliquer ce qui a été fait à la main dans le README. [Lien vers fichier csv dans le bon sens](https://forgemia.inra.fr/elise.maigne/rr_imabs/-/blob/master/article_2021/results/data/reve-niv-vie-individu-sexe-med.csv) -- **OU** **2 - ** Script R pour lire le fichier Excel directement et extraire les données vers `./results/data`. [Lien vers code R pour extraire les données](https://forgemia.inra.fr/elise.maigne/rr_imabs/-/blob/master/correction_exos/conversion_excel_to_csv.R) <hr> 5 minutes <!-- ############################################################ --> --- class: inverse, middle, center # Pause 15 minutes <!-- ############################################################ --> --- class: inverse, middle, center # Le code <!-- ############################################################ --> --- ## Ecrire un code propre - Eviter les chemins absolus ```r paramchemin <- "/home/emaigne/Documents/2021_RR_IMABS/article_2021/" setwd(paramchemin) # Set working directory df <- read.csv("./databrut/reve-niv-vie-individu-sexe-med.csv") # En relatif par rapport au wd ``` - Si modification des données (exemple corrections, suppression lignes...), il faut expliquer pourquoi. - Valeurs qui peuvent changer au milieu du code --> les mettre en paramètres + justification ```r salaire <- salaire/1539.42 # ??? Je ne peux pas savoir ce qui est fait ``` ```r # smic mensuel brut (en euros) pour 151.67 heures de travail de l'annee de référence annee_ref <- 2020 smic_mens_brut <- 1539.42 # Source https://www.insee.fr/fr/statistiques/1375188 salaire_smic <- salaire / smic_mens_brut ``` <!-- ############################################################ --> --- class: inverse, middle, center # Etape 3 - Ecriture code reproductible <!-- ############################################################ --> --- ## Etape 3 - Ecriture code reproductible - A vous ! - Copier les codes `code_prep.R` et `code_plot.R` du dossier article_2014 dans `article_2021/scripts/` et les modifier. - A corriger : - Chemins absolus - Correction des données sans explications - Le graph ne fait pas tout à fait ce qui est attendu... <hr> 10 minutes -- <hr> Correction des scripts : [Préparation des données](https://forgemia.inra.fr/elise.maigne/rr_imabs/-/blob/master/correction_exos/code_prep_correction.R) et [Graphique](https://forgemia.inra.fr/elise.maigne/rr_imabs/-/blob/master/correction_exos/code_plot_correction.R) <!-- ############################################################ --> --- ## Etape 3 - Amélioration du script Métadonnées, trame avec description, library, fonctions, paramètres... .left-code[ ```r #### DESCRIPTION #### # Ce code fait un beau graphique # Auteur : Elise Maigné # Date 15/10/2020 # source données : cars (package R datasets) #### PACKAGES #### library(ggplot2) #### SCRIPT PARAMETERS #### # Enter a qualitative RcolorBrewer Palette (Paired or Set3) colpal <- "Paired" # colpal <- "Set3" #### MAIN #### data(sleep) p <- ggplot(data = sleep, aes(x = group, y= extra)) + geom_boxplot() + geom_jitter(aes(color = ID), width=0.2) if(is.null(colors) == F) p <- p + scale_colour_brewer(palette = colpal) p ``` ] .right-plot[ <img src="data:image/png;base64,#Presentation_atelier_RR_IMABS_files/figure-html/metadata-out-1.png" width="100%" /> ] <!-- ############################################################ --> --- class: inverse, middle, center # Chaîne de traitements <!-- ############################################################ --> --- ## Gestion du workflow - manuellement <img src="images/workflow_article2021.png" alt="Image workflow" style="float:right;width:20%"> Comment indiquer dans quel ordre doivent tourner les programmes ? -- - Explications dans le README ET/OU - Numérotation des programmes ET/OU - Shéma ET/OU - Programme main.R dans lequel on met les paramètres et qui appelle les autres (ou main.sh, ou makefile) <!-- ############################################################ --> --- ## Gestion du workflow - par des outils dédiés <img src="images/workflow_article2021.png" alt="Image workflow" style="float:right;width:20%"> Comment faire tourner les programmes dans le bon ordre ? -- - [snakemake](https://snakemake.github.io/) : a framework for reproducible data analysis - [nextflow](https://genotoul-bioinfo.pages.mia.inra.fr/use-nextflow-nfcore-course/) : orchestrateur de workflows - [Galaxy](http://bioinfo.genotoul.fr/index.php/training-2/galaxy-training/) : pour des biologistes, peu de ligne de commandes. Lien vers le hackathon inter cati : [hackathon reproductibilité](https://inter_cati_omics.pages.mia.inra.fr/reproductibility/) <!-- ############################################################ --> --- ## Document computationnel Permet d'intégrer des chunks de code directement dans un article (ou un rapport, une étude...). - Avec R : Rmarkdown (fichier .Rmd, dans RStudio : File > New file > R Markdown) - Avec Python (ou autre) : [Jupyter notebook ou JupyterLab](https://jupyter.org/) Langage markdown. Voir [Rmarkdown Cheat Sheet](https://rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf) **Exemple : ** ```` ```{r} data(cars) plot(cars$speed, cars$dist) ``` ```` <!-- --> <!-- ############################################################ --> --- class: inverse, middle, center # Gestion de version <!-- ############################################################ --> --- ## Gestion de version **Gestion de version :** Convention de nommage des fichiers. Exemple avec la date : `YYYYMMDD_codeplot.R` Date et version pour modifications : `YYYYMMDD_codeplot_V2.R` --> confusions ! <hr> -- **Mieux : git** (github, gitlab) Forgemia (instance gitlab)--> attention ça n'est pas pour stocker des données (.gitignore). Rapide démo en ligne de commande : ```r $ git add . (pour ajouter les modifications au commit) $ git commit -m "message du commit" (pour commiter, avec un message court expliquant ce qui est fait) $ git push (pour enyoyer les modifications au serveur distant) $ git pull (pour récupérer la version du serveur distant) ``` <!-- ############################################################ --> --- class: inverse, middle, center ## Gestion de l'environnement <!-- ############################################################ --> --- ## Gestion de l'environnement **Versions des packages/modules & dépendances :** Dans R : problèmes fréquents de version de R, versions des packages (et de leurs nombreuses dépendances) : `sessionInfo()` - [package renv](https://rstudio.github.io/renv/articles/renv.html) : (ex packrat) "project-local R dependency management " **Mais ça n'est pas un problème que pour R : ** - [CONDA](https://docs.conda.io/projects/conda/en/latest/) : "Package, dependency and environment management for any language---Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN" **Conteneurisation de l'environnement et des dépendances :** - [docker](https://www.docker.com/) : création de conteneurs logiciels. - [singularity](https://singularity.lbl.gov/) : idem sans avoir besoin de droits avancés. **Golden standard : ** singularity + conda. Voir [hackathon reproductibilité](https://inter_cati_omics.pages.mia.inra.fr/reproductibility/) <!-- ############################################################ --> --- # Pour aller plus loin - Forge MIA (gitlab) : [https://forgemia.inra.fr/](https://forgemia.inra.fr/) - Les documents d'aujourd'hui : [dépot gitlab](https://forgemia.inra.fr/elise.maigne/rr_imabs) - [MOOC RR](https://www.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/about) qui revient très souvent : - Gitlab - Document computationnel (Rmarkdown ou Jupyter notebook ou OrgMode) - Session actuelle ouverte jusqu'au 20 mars 2021 - [Vers une recherche reproductible *Faire évoluer ses pratiques*](https://rr-france.github.io/bookrr/) (Loic Desquilbet, Sabrina Granger, Boris Hejblum, Arnaud Legrand, Pascal Pernot, et al.) - [How To Make A Pie: Reproducible Research for Empirical Economics & Econometrics](https://www.tse-fr.eu/publications/how-make-pie-reproducible-research-empirical-economics-econometrics) (Valérie Orozco, Christophe Bontemps, Elise Maigné, Virginie Piguet, Annie Hofstetter, et al.) in [JoES](https://onlinelibrary.wiley.com/doi/abs/10.1111/joes.12389?af=R). - [Rmarkdown Cheat Sheet](https://rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf)