Stata était de passage à Paris

Je n’ai pas pu y assister, mais le premier French Stata Users Group Meeting s’est tenu hier à Sciences Po, à Paris.

Ce blog ne parle plus beaucoup de Stata, même si je continue, comme d’autres, à l’enseigner, et avec plaisir, car c’est un langage simple (au moins en surface ; sous le capot, en particulier lorsque l’on rentre dans Mata, c’est en réalité plus compliqué). L’installation est triviale, chaque ligne de code est une commande avec un résultat – généralement – visible à l’écran, et les étudiants arrivent à apprendre une cinquantaine de commandes assez rapidement, ce qui permet de couvrir beaucoup de sujets en un temps record. Cette facilité a un coût, et le langage est évidemment limité de plein de manières, la principale étant que Stata ne peut facilement manipuler qu’un seul objet.

Les présentations de Stata Paris 2017 montrent que le langage Stata est en pleine forme, avec de nombreux nouveaux packages publiés sur SSC, le serveur centralisé qui remplit la même fonction que CRAN et Bioconductor pour le langage R. À titre d’exemple, j’aperçois, dans les présentations, un package pour gérer le format SDMX –  équivalent R : package rsdmx ; voir aussi cette collection de connecteurs SDMX –, ainsi que de nouveaux estimateurs, qui renvoient à la base d’utilisateurs de Stata, composée principalement (à mon sens) d’économistes et d’économètres, puis d’épidémiologistes, de politistes et de sociologues, mais dans une moindre mesure.

Au passage : Stata 15 est pour bientôt sorti

Je remarque aussi, à l’occasion de ce billet, que StataCorp va bientôt sortir a sorti la version 15 de son langage/logiciel, dans laquelle on trouve vraiment plein de chouettes nouveautés, dont un nouveau préfixe bayes: qui fait exactement ce que vous pensez, et la possibilité de générer des documents HTML ou PDF avec Markdown + Stata.

Add. Merci à Alexis et Tristan pour la correction sur Stata 15, je laggue… !

GitHub mania

GitHub est une plateforme qui héberge du code sur la base d’un système de collaboration, git, qui a fait ses preuves en servant à coordonner le travail des 40 000 collaborateurs au noyau de Linux. Les Internets regorgent de ressources sur Git : voici une vidéo pour les plus avertis, et un guide de présentation plus accessible.

Les deux auteurs de ce blog sont assez fan de GitHub : vous nous y retrouverez assez facilement — et je pense que Joël a vraiment innové en publiant du code sur GitHub et en se faisant citer par le Canard enchaîné la même semaine ! GitHub a l’avantage d’être gratuit, ouvert et (très) robuste, de ne pas souffrir de limite sur la taille des documents, et enfin d’être obsessionnellement collaboratif. C’est une plateforme parfaite pour copier-coller des petits bouts de code, ou même pour héberger des données. J’ai testé ces fonctionnalités à partir de l’année dernière, en évoquant rapidement les résultats ici.

Cette année, j’ai testé les fonctions collaboratives de GitHub en donnant un coup de main sur un plugin Stata pour TextMate, et en commençant à soumettre des fonctions dans quelques packages pour R. C’était l’objet du point n°4 dans un billet de février, qui a débouché sur une fonction du package questionr de Julien Barnier, qui continue là où son très bon package rgrs s’était arrêté, et à qui j’espère pouvoir bientôt soumettre de nouvelles fonctions, inspirées de mes expériences (et de celles de mes étudiants) avec la manipulation de données d’enquêtes sous Stata.

Je viens aussi de publier une fonction dans GGally, un package qui a vocation à construire sur l’excellente librairie graphique ggplot2 ; là aussi, j’espère pouvoir écrire quelques fonctions de plus en m’inspirant du package arm d’Andrew Gelman et al., qui sert à analyser des régressions. Je vous raconte ça parce que je suis content comme un môme quand j’arrive à coder des trucs utiles aux autres, et parce que je souhaite encourager tous les lecteurs de ce blog à jeter un coup d’oeil à GitHub, qui a de très nombreux usages scientifiques, bien au-delà de la « pure » programmation.

Rêvons qu’un jour, il sera possible à la science politique de faire un coup de force en rendant publics ses jeux de données et ses scripts d’analyse sur une plateforme comme GitHub (ou même HAL-SHS), ce qui permettrait d’insister un peu plus lourdement sur l’opacité des méthodes de collecte et de redressement que l’on rencontre dans le secteur commercial. On peut d’ailleurs trouver sur GitHub des scripts ayant servi à des membres de l’équipe de campagne de Barack Obama l’année dernière…

Une fonction Stata pour gérer les problèmes de dépendance aux packages

Contrairement aux offres grand public de plus en plus pasteurisées, les logiciels de statistiques sentent encore très fort le fromage informatique, et on n’échappe jamais réellement aux problèmes infernaux de dépendance aux libraires.

Le problème se pose notamment dans un cours que je donne, et j’ai presque réussi à éliminer le problème en installant, au premier cours et par script interposé, la totalité des packages Stata dont on se sert en classe. Mais dans les scripts hebdomadaires, je voulais garder une mention courte et lisible des dépendances pour guider le lecteur (dont les étudiants à moitié paniqués dès que “ça ne marche plus”).

Le résultat est le petit bout de code packages_required, qui scanne une liste en début de script et qui, le cas échéant, installe le package manquant. Je me demande si l’équivalent existe sous R. Le blog is.R() utilise souvent une petite boucle pour pallier aux dépendances (exemple), ce qui suggère qu’une fonction de base qui (1) vérifierait l’existence d’une librairie, (2) la téléchargerait si nécessaire, et (3) la chargerait ne doit pas exister (cf. page 46 de R Inferno).

Malheureusement, ni Stata ni R ne gèrent la dépendance au café (et aucun ne le réchauffe non plus, mais c’est probablement en développement quelque part).

Cartographie pas si facile

Suite à ma note sur le megacombo “R + Google Map Charts” et aux commentaires avisés d’Éric Verdeil, un autre blogueur du coin, j’essaie de fabriquer des cartes avec maptools sous R et spmap sous Stata. J’essaie, plus exactement, de reproduire ce type de cartes, qui ont un lien avec ma thèse (message subliminal à quelques lecteurs et à moi-même).

Après quelques heures de code et une bonne dizaine d’emails échangés avec Baptiste Coulmont, dont les conseils avisés m’ont permis de régler plusieurs problèmes que je n’aurais jamais réussis à élucider tout seul, je pense avoir simplement réussi à me prouver que ce n’était pas simple.

Mais après quelques minutes de code supplémentaire, toujours avec l’aide inestimable de Baptiste Coulmont, je peux enfin mettre cette note à jour et visualiser correctement, voire même élégamment (si le terme est approprié), le taux de mortalité par cancer du poumon chez les femmes en 2008 dans les 27 États-membres de l’Union européenne, en suivant un modèle de l’European Cancer Observatory :

J’ai utilisé un fonds de carte EuroGeographics, des données de l’International Agency for Cancer Research, et la patience de Baptiste, plus quelques autres correspondants qui recevront bientôt tous un email de remerciements avec un lien vers une page permettant de répliquer l’intégralité de ma démarche.

En attendant, le code est disponible, avec la carte et des explications je ne sais pas vraiment si j’ai le droit de distribuer les fichiers SHP (shapefile) utilisés pour la carte, même avec une mention complète de la source.

Comme l’écrit Baptiste, le code final n’est pas très impressionnant, mais il a fallu de nombreuses étapes avant d’arriver à intégrer exactement les bonnes commandes, et à résoudre les situations illogiques. Le même résultat sous Stata (non reproduit ici) est moins élégant, mais s’obtient en une demi-douzaine de lignes à partir d’un modèle disponible dans la documentation du module approprié.