# A retenir sur reproductibilité de la recherche (Alexandre Hocquet, historien des sciences) Crise de la reproductibilité ; reproducibility crisis ou replication crisis Même dans la recherche la mieux décrite, il existe toujours une part de savoir tacite, càd un savoir qu'on ne sait pas expliciter et qui est impossible à formaliser En anthropologie, le chercheur interagit avec son objet d'étude. La fiabilité, dans cette discipline, est évaluée par autre chose que la reproductibilité, par ex la réflexivité . Ce sont plus des enjeux de transparence que de reproductibilité qui dominent ici. Idem quand on documente un événement rare. Si la reproductibilité conduit à plus de fiabilité en science, c'en est un moyen parmi d'autres, pas toujours suffisant, pas toujours nécessaire Le but de la publication scientifique ou de la "technique littéraire" (litterary technology) de l'époque de Boyle n'était effectivement pas (et n'est toujours pas dans les publications aujourd'hui) exactement la reproductibilité, mais plutôt la légitimité Étudier les controverses, c'est augmenter les chances de comprendre les formes de savoir tacite qui conditionnent la reproduction, qui n'apparaissent pas dans les publications, et qui surgissent au grand jour parce que des chercheurs contestent Sabina Leonelli  étudie ce qu'elle appelle les voyages des données (à l'ère des big data notamment). Les données, jamais "brutes", contiennent en elles toutes les théories, conditions, protocoles, biais, cultures qui ont servi à leur production et leur réutilisation se fait toujours dans d'autres conditions, par des chercheurs appartenant à d'autres cultures. Elle identifie 6 catégorie de reproductibilité : - R. computationnelle : possible à partir d'un ensemble de fichiers et d'instructions écrites. C'est el seul domaine où une reproductivité absolue est envisageable et souhaitable - R. Expérimentale directe (expréiences standardisées) - R. Indirecte ou Hypothétiques (expé semi-standardisées) - R. par expertie : expé non-standard er objets de rechecrhe rare - Observation reproductible : étude de cas non expérimentales - Recherche non reproductible : observation participante Influence de l'informatique sur les méthodes statistiques : facile de faire en qq clic une régression, un test non paramétrique, mai sne signifie pas qu'on comprend forcément bien les hypothèses sou-jacente set qu'on sait interpréter les résultats. Souvent, les défauts de reproductibilité proviennent de mésemploi de méthodes stats et des outils "boîtes noires". Voir aussi : [Reproduire un résultat scientifique : plus facile à dire qu’à faire](https://theconversation.com/reproduire-un-resultat-scientifique-plus-facile-a-dire-qua-faire-129848), Alexandre Hocquet, The Conversation, Mars 2020. types de __Transparence__ : data transparency : "Providing full access to data itself" analytic transparency : "Information about data analysis production transparency : "Process of data collection"  La pre-registration : intervient en amont du travail d'analyse. Le chercheur formalise ses hypothèses de recherche, ses données, son study design et son plan d'analyse. Finalité = prévenir les risques de HARKing - Hypothesizing After the Results are Known Bien distinguer post-diction et prédiction. __transparence n'est pas synonyme de mise à disposition, et réciproquement !__ même lorsqu'on utilise des données confidentielles, il estnécessaire de les gérer méthodiquement en les décrivant précisément, en documentant le protocole de collecte, __Transparence = rendre accessibles à son lectorat les éléments sur lesquels s'est construit le raisonnement__ : sources citées, données analysées ou description des données, traçabilité : garder une trace rigoureuse de la démarche et l'automatiser autant que possible Autre vecteur de transparence = les références bibliographiques: la liste des sources est-elle exhaustive et représentative de l'ensemble des points de vue sur la question ou au contraire, présente-t-elle d'importants biais de sélection ? __eviter les citations de seconde main__ (qui peuvent aboutir à une interprétation fausse) __si source originale non consultable, mentionner que c'est de seconde main__ : (Brown, 2010 cité par Jamison, 2012). Afin de ne pas laisser entendre de manière erronée que vous avez consulté directement la source : # Interagir avec GitLab via RStudio __Etape 1.__ SOUs Rstudio Générer ma clef SSH (qui comprend une partie publique (nom.pu) et une partie privée (nom) Dans Rstudio > Tools > Global Options > GIT/SVN > code SSH : taper sur create (va générer la clef SSH) Bien noter le lien vers le répertoire .ssh (par défaut c:\user\NomUtilisateur\.ssh\id_ed25519 __Etape2.__ Sous GitLab : En haut à droite : Edit profile user Dans le bandeau vertical gauche qui apparaît (l'agrandir si besoin via expand collapse), sélectionner key SSH, Copier - coller le code de la clef # Document computationnel Pour améliorer la traçabilité d'un calcul ## Principe : 1 seul document, comprenant des explictaion, du code, des résultats Session Export vers un document final ((chaque bloc étant soit caché, soit affiché lors de l'export vers le document affiché final) ## Questions Comment structurer le document computationnel quand le cheminement du raisonnement, au cours du projet, n'est pas linéaire (on teste plein de pistes différentes) ? Autrement dit, comment utiliser RMD pour fair eun cahier de labo numérique, versionnable, av ec des étiquettes ? ## En pratique Sous Rstudio : Insérer un bloc (= un bout de code = un __chunk__): - Code> Insert Chunk (ou l eraccourci Ctrl + Alt + I - Ou bien : ```{r} Des icônes apparaissent à droite de la ligne de commande (notamment pour run le bloc) Dans la marge, on peut replier des sections Le bouton __knit__ permet de visualiser le format final du document : - Format Word - Format pdf : nécessaite d'avoir auparavant ○ téléchargé et installé l'application Miktex (https://miktex.org) mais il faut les droits administrateurs, et les mises à jour ○ ou alors le package __TinyTex sous R (--> install_tinytex() )__ (fonctionne bien) - Format html Spécifier les parties qu'on souhaite ou non faire appara^tre dans le doc final ```{r nomBloc, echo=FALSE} : n'apparaîtra pas L'argument cache = TRUE permet de ne pas relancer les calculs (ne pas ré-exécuter de longs bouts de codes) à chaque fois qu'on recompile (vérifier : sauf si ce qui précède a été changé). Faire attention si on a changé le JDD mais pas son nom (le script ne le saura pas) Possible de mettre des options globales pour tous les bouts de code (les chunks) : options par défaut ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` # Etiquettes et logiciels d'indexation pour se retrouver dans un cahier de notes (tracker) Rechercher un mot-clef, indexer (sommaire) un cahier de notes : OK pour un document unique Mais pour plusieurs documents ou fichiers ? __DocFetcher__ : trouver un mot dans une collection de fichiers Encore faut-il que le mo ne soit pas trop fréquent (et DocFetcher allows only case-insensitive search) GitLab le permet aussi Solution : Mettre des Etiquettes et mots-clefs "singuliers" dans un fichier texte Markdown (ou dans les métadonnées de fichiers images ou pdf) : On peut les insérer dans des commentaires Puis rechercher ces mots-clefs avec DocFetcher Ressemble aux tags qu'on peut mettre sur les courriels Et sous Rstudio : Edit>Find> Find in file (permet par exemple de retrouver les scripts dans lesquels on a utilisé telle ou telle fonction peu fréquente) Idem aussi dans NotePad++ Exiftool permet de rajouter un mot-clef (ou étiquettes), en tant que commentaire, dans les propriétés/métadonnées d'un fichier Conseil :avec Exiftool, noter en commentaire l'URL où on a trouvé un fichier ou une photo NB. On peut aussi le faire par un clic-droit> propriétés sous Windows Etiquettes sous MarkDown : syntaxe de type \<\!\-- Etiquette_Mot_Clef --> Pour mes cahiers de notes temporaires (des trucs valables sur qq mois, pas plus, par exemple pour l'organisation d'une grosse réu à venir) "en discontinu" (un jour une réunion sur un sujet A, un autre jour sur B, puis le surlendemain sur A) : en haut de page, mettre : sujet A "suite de la page xx" et en bas "voir suite à la page xx" # RMD Fichier texte associé au [langage de balisage léger (Markdown)] (https://lms.fun-mooc.fr/courses/course-v1:inria+41016+self-paced/courseware/2bfe60a86fed4994b5493a220c38eb69/13f6fd96266746a0bd9d717a12f1f835/4?activate_block_id=block-v1%3Ainria%2B41016%2Bself-paced%2Btype%40vertical%2Bblock%4089c7893cb5aa4644b06569c65945d4d9) Editeur de texte (eg Notepad ++) permet d'ouvrir lisiblement un fichier texte, codé en __UTF8__ par défaut (il sera toujours possible de le lire dans des années : __pérennité__) Traitement d etexte : non pérenne, pas de l'UTF8 Fichier de texte simple : pas possible de mettre en gras, barrer etc D'où langage de balisage ( Reprendre diapo 9 et 10 Voir Le [didacticiel](https://www.jdbonjour.ch/cours/markdown-pandoc/) de Jean-Daniel Bonjour (EPFL), précis, complet, concis, en français Et le pense-bête dans le Mooc: Markdown : introduction et ci-desous Le choix du langage de balisage léger importe peu,car il existe des logiciels qui permettent de traduire l'un vers l'autre (e.g. __outil Pandoc, qui est installé d'office avec Rstudio__ : permet d'afficher le fichier en html, pdf, libre office) Encodage : attention, sous Windows ne sont pas par défaut en UTF8 Dans Rstudio, penser à paramétrer d'emblée pour encodage en UTF8 : File > Save with encoding > UTF8 (et Set as default encoding for source files ?) Il y a aussi : File> Reopen with encoding (NB. Package sous R : en ASCII (pas en UTF8) ## pense-bête RMD \# : nouvelle section \ Commit = sauver \ Commit message = commentaire sur la version sauvée \ \## : nouvelle sous-section \ \_italiques_ \ \*italiques*\ \_\_gras\_\_\ Insérer un hyperlien : entre crochets, le texte qui apparaîtra et entre parenthèse, l'adresse http \[le texte\] \(https://…)\ \ : peut être un système d'étiquettes étiquetage (mots-clefs) Insérer une image : \!\[légende](adresse https ou sur disque dur) Liste à puces :\ - Premier élément ;\ - Deuxième élément ;\ - Dernier élément. Enumération : idem, avec des chiffres Inclure Un bloc de code : ``` Incure un Bloc de code R: ```{r} commandes r ``` Une équation ou expression mathématique : entre deux $$ Par exemple \$X\sim U(0,1)$ s'affichera X ~U(0,1) \ # Logiciels de versionnage (Git) Git = Logiciel de forge = __outil de contrôle de versions__ = gestionnaire de versions GitHub, GitLab = __interfaces web__ pour le logiciel Git (hébergement gratuit de projets publics= GitLab, GItHub : stable, ouvert, __mais pas forcément pérenne__. Il y a des plateformes d'archivages de données ou de codes sources, comme zenodo et figshare (et aussi les dataverses, ou HAL) Installer Git sur la machine (pour pouvoir travailler avec Git (et GitLab) en distant, et pou ravoir les plugins et onglet Git sous RStudio) : https://git-scm.com/downloads On peut utiliser Git : - uniquement en local (pour le versioning des fichiers d'un projet sur lequel on travaille seul, et pour lequel il n'est pas crucial d'avoir une copie distante, sécurisée, sur le Net - En local *et* en distant : nécessite de déclarer un lien entre mon ordi et le Gitlab distant Pour accéder à la fenêtre de commande Git : - Soit cliquer srur l'icône Git Bash du bureau - Soit taper les comandes git sur une quelconque fenêtre de commande : par exemple sous Windows : Démarrer > cmd - Soit via Rstudio Git : conserve historique des modifs sans dupliquer les dossiers de sauvegarde Sauvegarde sur des ordis distants Fusion "automatique" des modifs éditées par plusieurs personnes __Pas besoin d'utiliser Git en ligne de commande : utiliser des interfaces__ Mais besoin de comprendre : - Historique dstribué : cf. diapo une histoire simple.Les fèches indiquent une dépendance d'une verison p/ une autre. Historique à la granuarité du projet pas du fichier - Branche : qd retour à une version précédente poru repartir sur un nouvel historisque - GitHub - GitLab Git add indique quelles modifs conserver ensemble (et à quelle étape elles correspondent) (et en gros quels fichiers je souhaite garder, voire quels bouts d fichiers) Git commit (commit = une version du projet, identifiée par un SHA1) Git checkout : permet de revenir à version n-x etd e retracer l'histoique des modifs (pointe sur la version à partir de laquelle on va retravailler) Git ignore = les fichiers qu'on ne prend pas Git clone : copie sur ma machine un historique d'un rojet distant (historique vierge qu'on crée sur un serveur distant Gitlab par ex) (clone with SSH évite d'avori à toujours rentrer son ldap ensuite ; clone with https demandera, à chaque push ou pull, de retaper le ldap et mdp) Git push : envoie sur le serveur distant. Permetd e synchroniser des branches en sauvegardant des morceaux d'historiques Travail collaboratif (avec git merge) Git push envoie nos modifs locales sur la branches du serveur distant Git pull télécharge sur notre branche locale la dernière version de la branche distante Git peut fusionner automatiquement 2 fichiers modifiés si les modif ne portent pas sur l amême ligne Sinon, nous envoie la question (la ligne, avec le conflit) avec 2 étapes : - 1/ ta version locale n'est pas à jour, fais un gt pull avanat de faire une modif - 2/ si un conflit persiste affiche le lieu du conflit (la ligne de texte) et nous demande de choisir C'est à la personne qui génère le conflit e le résoudre Pour travailler à plusieurs, - Eviter de travailelr tous sur un seul gros fichier : modulariser - Il y aura conflit si une igne donnée a été modifiée de plusieurs côtés - Faire des commits différents pour les modifs de fond, de fore - Faire des petits commits logiques - Git commit -a Modifs : git commit (je peux les faire localement) Synchroniser : git pull, git push Pour travailler à plusieurs sur un texte : s'organiser pour ne pas travailler en même temps sur les mêmes parties du texte (et ainsi éviter les conflits) Overleaf permet de travailler à plusieurs sur un fichier Latex (et gère les commentaires). Gratuit pour 2 personnes, payant pour travailler à plus de 2 Mais pas possible de "localiser" des commentaires-bulles comme dans Word. OU alors, nméroter des lignes et dire "comment ligne xx : " Avec RMD, possible de localiser les commentaires __Evolutivité et pérennité des versions sur un texte__ Modifc apparentes sous Word : - pas sur un fichier texte. - On peut sauvegarder la dernière version et perdre l'historique de smodifs Moteur de Wiki : si on clique sur "chgt récents", on a accès à tout l'historique des modifications. Forat txt. Mais on ne peut modifier qu'une page à la fois Bilan : préféer Github. Suit les versions successives d'un ensemble de fichiers liés. Permetd e corriger plusieurs fichiers simultanément. Sauvegarde centralisée, et copie intérale sur notre ordi ## les interfaces : gitLab [HELP GitLab BASICS (sites inRAE)](https://forgemia.inra.fr/help/gitlab-basics/start-using-git#clone-with-https) GITLab nécessite une authentification : Soit une clé SSH : une clé par machine. Soit une clé https Pour les projets sensibles, confidentiels, préférer le [gitlab institutionnel de notre entreprise](https://forgemia.inra.fr/efno) puis Sign in et Connexion SSO (avec LDAP) Clef SSH : - __Sous GitLab__ : barre de menu en haut à droite : cliquer sur notre avatar/profil, puis Edit Profil, puis dans le bandeau vertical "User Settings" qui apparaît à gauche, cliquer sur SSH Keys : et créer son numéro de clé . - __Sous RStudio__ : - Dans Rstudio > Tools > Global Options > GIT/SVN > on peut indiquer : l'emplacement du git.exe et le code SSH ## Faire le lien entre un projet sur GitLab et le même projet sous RStudio Sous GitLab : Bouton clone Copier l'adresse URL Puis sous Rstudio : File> New project > version Control > git (clone a project from a Git repository) > --> copier l'URL du GITLab A la question "indiquer votre SSK Key" : coller notre numéro de clef SSH Puis à la question ci-dessous, qui demande si on fait confiance à forgemia, repondre yes (sinon, ça ne fonctionnera pas !!!) Sous RSTudio : Je fais une modif dans RMD Icône commit Visualise la modif Puis commande push pour l'enregistrer sur le serveur GitLab __Document computationnel sous RMD (script commenté)__ : Préférable de transmettre (publier) aux autres utilisateur le RMD ET l'HTML (car le rmd seul n'affiche pas les résultats) # Analyse réplicable Jamais de modif de donnees à la main Lire les données à la source Attention aux données manquantes __dès la lecture__ Bibliothèque __parsedate__ pour gestion des dates en norme ISO sous R : Xxxxyy (xxxx : année ; yy = semaine) Le code RMD du Mooc est téléchargeable comme __exemple d'analyse réplicable__ Conseil : Garder toutes les données ensemble, même si de nature diverse (cf. module 5) Métadonnées (= infos sur les données) à garder en format texte Format binaire permet le stockage de données de nature diverses Formats FITS et HDF5 sont de bonnes solutions pratiques (FITS plus facile) pour des données de nature diverse ou des très grosses quantités de données (e.g. lidar, TD°) Il y a des plateformes d'archivages de données ou de codes sources, comme zenodo et figshare (et aussi les dataverses, ou HAL ?) Plus précisément : __HAL, ArXiv__ = archivage et mise à disposition des articles de recherche. Il est possible de déposer ses articles sur Figshare et Zenodo (ces entrepôts de données fournissant même un DOI) mais ces plates-formes sont plutôt destinées à accueillir des données et à servir de site compagnon aux articles de recherche. L’exploitation d’articles de recherche est plus facile dans une archive en ligne que dans un entrepôt de données. __Github, Gitlab ou Software Heritage__ : plutôt destinés à accueillir du logiciel que des données. GitHub et GitLab Pas forcément pérennes. Le code des projets publics de github est désormais automatiquement téléversé sur Software Heritage. C’est également possible pour GitLab, mais il convient de vérifier si c’est bien le cas avec l’administrateur s’il s’agit d’un GitLab institutionnel. Enfin, il existe des mécanismes très simples permettant d’archiver l’état courant d’un dépôt github directement sur zenodo. L’archivage pérène de son code est donc très simple lorsque l’on utilise un gestionnaire de version au jour le jour. __Docker__ : n’est pas une plate-forme, c’est une technologie de conteneur visant à isoler et préserver les environnements logiciels.