The source of this document is available on gitlab.
Last version: 2020-02-04

Module 4 / Exercice 1

Exercice 1 : Ré-exécuter n'est pas répliquer…

Même si la terminologie peut varier d'un auteur ou d'une communauté à l'autre, il est important de comprendre que l'on peut distinguer différents niveaux de "réplication" selon que l'on s'est contenté de vérifier que l'on pouvait ré-exécuter le code et obtenir exactement les mêmes résultats ou bien que l'on arrivait à reproduire des résultats similaires en suivant une approche similaire (éventuellement avec un autre langage, une autre méthode de calcul, etc.). À ce sujet, vous pourrez vouloir par exemple lire https://arxiv.org/abs/1708.08205.

Le diable se cache souvent dans des endroits auxquels on n'aurait jamais pensé et nous sommes nous-mêmes allés de surprise en surprise en préparant ce MOOC, notamment avec l'exercice du module 2 sur Challenger. C'est pourquoi nous vous proposons dans cet exercice, de refaire une partie de l'analyse des données de Challenger, comme l'ont fait Siddhartha Dallal et ses co-auteurs il y a presque 30 ans dans leur article Risk Analysis of the Space Shuttle: Pre-Challenger Prediction of Failure et publié dans le Journal of the American Statistical Association (Vol. 84, No. 408, Déc., 1989) mais dans un autre langage de votre choix (Python, R, Julia, SAS…).

Nous savons d'expérience que si les estimations de pente et d'intercept sont généralement les mêmes, on peut avoir des différences lorsque l'on regarde les estimateurs de variance et le R2 un peu plus dans les détails. Il peut également y avoir des surprises dans le graphique final selon les versions de bibliothèques utilisées.

L'ensemble des calculs à effectuer est décrit ici avec les indications sur comment contribuer : https://app-learninglab.inria.fr/gitlab/moocrr-session2/moocrr-reproducibility-study/

Vous y trouverez notre réplication des calculs de Dallal et al. (en R), une mise en œuvre en Python et une en R (très similaires à ce que vous avez pu utiliser dans le module 2). Cet exercice peut donc se faire à deux niveaux :

  1. un niveau facile pour ceux qui repartiront du code dans le langage qu'ils n'auront initialement pas utilisé et se contenteront de le ré-exécuter. Pour cela, nul besoin de maîtriser la régression logistique, il suffit de bien inspecter les sorties produites et de vérifier qu'elles correspondent bien aux valeurs attendues. Pour ceux qui ré-exécuteraient le notebook Python dans l'environnement Jupyter du MOOC, n'hésitez pas à consulter les ressources de la section 4A du module 2 qui expliquent comment y importer un notebook.
  2. un niveau plus difficile pour ceux qui souhaiteront le réécrire complètement (éventuellement dans un autre langage que R ou Python, l'expérience peut être d'autant plus intéressante que nous n'avons pas testé ces variations). Là, si les fonctions de calcul d'une régression logistique ne sont pas présentes, il y a par contre intérêt à en savoir un minimum pour pouvoir les implémenter. L'exercice en est d'autant plus instructif.

Vous pourrez alors discuter sur le forum des succès et des échecs que vous aurez pu rencontrer. Pour cela :

Ne vous inquiétez pas si ces consignes vous semblent peu claires sur l'instant, elles sont rappelées en haut du tableau et vous vous rendrez vite compte s'il vous manque quelque chose quand vous essaierez de remplir ce tableau.

Nous effectuerons une synthèse illustrant les principales divergences observées et nous vous l'enverrons à la fin du MOOC.

Exercice 1: Re-execution is not replication…

Unfortunately terminology varies a lot between authors and communities, but it is important to understand the distinction between different levels of "replication". You can be satisfied with re-running the code and get exactly the same results, but you can also try to obtain similar results using a similar approach, changing for example the programming language, computational method, etc. An article we recommend on this topic is https://arxiv.org/abs/1708.08205.

Often the devil is in the details that one would have never thought about, and we have had our share of surprises while preparing this MOOC, in particular with the exercise on the Challenger catastrophe from module 2. We therefore propose in this exercise that you re-do a part of this analysis, following the example of Siddhartha Dallal and co-authors almost 30 years ago in their article Risk Analysis of the Space Shuttle: Pre-Challenger Prediction of Failure, published in the Journal of the American Statistical Association (Vol. 84, No. 408, Déc., 1989), but using a different language of your choosing (Python, R, Julia, SAS…).

Our experience shows that the estimations of slope and intercept are generally the same, but there can be differences when looking at variance estimators and R2 in more detail. Another source of surprises is the final graphical presentation, depending on the versions of the libraries that are used.

The computations to be done are described at https://app-learninglab.inria.fr/gitlab/moocrr-session2/moocrr-reproducibility-study/ together with instructions for contributing.

You will find there our replications of the computations by Dallal et al. (in R), one in Python and one in R (very similar to what you have used in module 2). This exercise can be done at two levels:

  1. an easy level at which you start from the code in the language that you did not use initially, and content yourself with re-executin it. This doesn't require mastering logistic regression, it is sufficien to inspect the outputs produced and check that they correspond to the expected values. For those who want to re-execute the Python notebook in our MOOC's Jupyter environment, check the resources for sequence 4A of module 2 that explain how to import a notebook.
  2. a more difficult level at which you rewrite the analysis completely, possibly in a different language than Python or R, which makes the exercise more interesting because we have not tested such variants. If logistic regression is not already implemented for your language, you will need a good understanding of it in order to write the code yourself, which of course makes the exercise even more instructive.

You can discuss your successes or failures on the forum, after following these instructions:

Don't worry if these instructions seem confusing, they are reproduced above the table and you will quickly notice if something is missing when you try to add your data.

We will compile a synthesis of the principal divergences observes and make it available at the end of the MOOC.