Quelques blogs et liens du moments

Inspiré (comme souvent) par Éconoclaste, un billet pour recenser quelques additions récentes à mon agrégateur, dans aucun ordre particulier :

  • Good Stats Bad Stats: “my name is Larry Cahoon. I have a PhD in Statistics and have spent over thirty-five years working on government surveys and censuses”.
  • Whimsley, “…where Tom Slee writes about technology and politics”. Je le signale juste pour son changement d’adresse il y a quelques semaines.
  • “Welcome to Monoskop, the media art and culture wiki.” Le blog recense des bouquins de théorie politique ou artistique des années 60-70, souvent délicieux.
  • Sur le toujours excellent conseil de Joël, Gaston Sanchez : “Data Analysis Visually Enforced”. L’auteur a notamment produit une méthode d’analyse qui a l’air intéressante, mais on manque d’avis dessus.
  • Peter Frase : un (brillant) doctorant en sociologie qui participe aussi à la rédaction du (non moins brillant) magazine américain Jacobin.
  • Brett Keller (santé publique, développement, politiques publiques et statistiques, avec un excellent billet sur la régression sur le mode de raisonnement)

Et pour les intéressés :

Pourquoi aimer les boxplots

Baptiste Coulmont rappelle qu’on n’utilise pas assez les boxplots, et cite au passage Howard Becker, qui vante leurs qualités d’identification des “observations extrêmes”, les outliers. Récemment sur France Culture, on pouvait écouter Bernard Lahire faire la même apologie du travail sur les exceptions, comme par exemple les renversements de genre (il citait les camionneuses et les chirurgiennes).

La qualité première d’un boxplot est effectivement de faire ressortir des “boîtes” les observations qui se trouvent trop éloignées des autres, et qui brisent la symmétrie de la distribution. C’est pour ça que j’utilise souvents les boxplots sur des séries temporelles, pour faire ressortir l’hétérogénéité des séries. Voici un graphique d’un texte communiqué, pas publié mais réplicable :

papier AFSP 2011, annexe figure 11 : résultat d'un modèle additif généralisé

Le ‘Bistro aime aussi les boxplots. Vous en trouverez sur les résultats du concours commun des IEP d’il y a quelques années, par exemple, ou encore sur des biais de notation d’exposés. Mais encore faut-il comprendre les règles de construction du boxplot en premier lieu. Ces règles varient sur la méthode de calcul des outliers, comme le signale cet article co-signé par Hadley Wickham, le créateur de ggplot2.

Le boxplot réduit les éléments d’une fonction de répartition empirique (ECDF, déjà citée) à quelques repères essentiels : premier et dernier quartile, cinquantième pourcentile (médiane) et observations “éloignées”, pour lesquelles les définitions varient. Voici un rapide exemple tiré d’un cours, avec du code Stata1 :

* Données : National Health Interview Survey (USA), 2009.
use data/nhis2009, clear
* Calculer l'Indice de Masse Corporelle (IMC/BMI) des enquêtés.
* Échantillon : population américaine adulte.
gen bmi = 703 * weight / height^2
* Calculer les pourcentiles (càd. 100 quantiles).
* Chaque pourcentile contient approx. 1% de la distribution.
xtile bmi_qt = bmi, nq(100)
* Calculer l'IMC moyen de chaque pourcentile.
bys bmi_qt: egen bmi_qm = mean(bmi)

En projetant ces données dans un graphique, on obtient une courbe qui montre d’emblée qu’il y a plus d’Américains à IMC élevé que l’inverse, et que l’état de santé des 10% les plus obèses est probablement un réel facteur de préoccupation, vu que’un IMC supérieur à 40 fait courir un risque d’obésité morbide :

* La variable contre ses quantiles (ECDF).
sc bmi_qm bmi_qt, ms(o) c(l) xla(1 10 25 50 75 90 99)

IMC USA 2009 par quantiles

En calculant les 25e et 75e pourcentiles (quartiles “Q1” et “Q3”), on peut voir quelle fraction de la courbe va correspondre aux limites inférieure et supérieure de la “boîte” du boxplot :


* Stocker les statistiques détaillées.
qui su bmi, d
* Extraire Q1 et Q3.
local q1 = r(p25)
local q3 = r(p75)
* Graphique avec lignes horizontales à Q1 et Q3.
* On aurait aussi grapher la médiane (Q2 / p50).
sc bmi_qm bmi_qt, ms(o) c(l) xla(1 10 25 50 75 90 99) ///
  yline(`q1' `q3') name(p1, replace)

Ces éléments sont les éléments de construction fixes. Les “moustaches” et les “outliers” dépendent de calculs plus ésotériques, décrits dans ce script pour Stata. (Au passage, j’utilise mon propre thème graphique pour atténuer la mocheté des graphiques Stata).

L’utilité du boxplot n’est pas vraiment, à mon sens, dans la réduction d’une répartition empirique. On voit plus vite où se trouve les “fat tails” dans une ECDF que dans un boxplot, où le nombre d’outliers est en plus fonction de la taille de l’échantillon, ce qui est facilement trompeur. Voici le boxplot horizontal tiré de la distribution ci-dessus :

* Boxplot.
gr hbox bmi

Boxplot IMC

On a facilement l’impression qu’il y a tout plein d’Américains gravement obèses, mais c’est un effet lié à la taille de l’échantillon. Les outliers sont visuellement nombreux mais représentent en réalité moins de 2% de la distribution (n = 464 à IMC > 40 sur N = 24 291). La courbe de l’ECDF est naturellement plus correcte à interpréter ici.

Le boxplot aide plutôt à la comparaison sur des “petits multiples“, c’est-à-dire sur un petit nombre de catégories avec lesquelles on divise une distribution (ici éducation et ethnicité, sans les “outliers” car les “boîtes” parlent d’elles-mêmes) :

* Les boîtes suffisent pour observer l'effet.
gr box bmi, over(educrec1) asyvars over(raceb) noout

IMC * Ethnicité * Éducation

C’est maintenant l’heure d’aller rattraper les cours que j’ai lamentablement ratés ou pas encore rédigés pour demain…

  1. … car je suis une feignasse, mais je posterai du code R plus chouette plus tard. []

Du code et des liens (avec des expressions régulières)

Dans la série “on n’a pas le temps de bloguer, mais d’autres s’en chargent à notre place…” Quelques actualités quand même.

1. Un député américain a demandé la suppression des crédits de recherche pour les sciences sociales.

Bizarre, pour un pays qui devrait avoir besoin de quelques recherches sur le wahhabisme. Ah, il a spécifiquement demandé la suppression de la science politique. Pas de chance, c’est là où se publient les recherches sur les trajectoires des terroristes. Ah, il a aussi une meilleur poste de dépense à conseiller : la recherche médicale (les blouses blanches qui sauvent des vies). Sur les “death panels” ?

Merci au lecteur qui nous a signalé le truc, récemment relaté en détail sur The Monkey Cage avec les manoeuvres précédentes. Je ne mets pas de lien précis, car pour être honnête, c’est vu et revu, et stupide. L’argument sur le wahhabisme est par ailleurs emprunté à un rapport public sur les sciences humaines et sociales, signé par Maurice Godelier. Je l’aime bien, cet argument.

2. Il faut lire Christophe Bouillaud sur les élections en Italie (quel bordel), et le film-documentaire TPB AFK (quelle aventure) sur le procès du site Internet The Pirate Bay.

3. Un excellent exemple de scraping avec expressions régulières sur le blog Quanti, par les auteurs du blog Data Sciences Sociales ; les deux sur la même plateforme que le ‘Bistro.

(La suite est ultra-nerd mais peut-être de salut public pour ceux qui enseignent avec R.)

Ah, l’utilité des expressions régulières… Si je devais apprendre deux choses à toute personne qui utilise un ordinateur, ce serait les raccourcis clavier et les “regex”.

Je m’en sers par exemple dans ce fichier pour compiler tout un cours en une seule frappe clavier qui sélectionne tous les fichiers .Rmd, les compile sous knitr, puis les copie au bon endroit. En pratique, ça donne ça :

html <- dir(pattern="(index|[0-9]{2,}_\\w+).html|style.css")
code <- dir("code", pattern="([0-9]{2,}_\\w+).R$")

La première ligne signifie “sélectionner le fichier index.html, tous les fichiers .html commençant par deux chiffres ou plus suivis d’un underscore et d’un mot, et le fichier style.css”. La seconde ligne signifie presque la même chose mais appliquée uniquement aux scripts .R. Une commande ultérieure les copie dans un dossier, qui est ensuite placé sur GitHub et publié par GitHub Pages.

Un autre exemple dans ce document .Rprofile, qui contient quelques fonctions pour enseigner le même cours. L’objectif était de permettre à une vingtaine d’étudiants débutants de télécharger tous les fichiers du jour en une commande, et de leur épargner les installations et chargements de packages que demande fréquemment R en s’en chargeant à leur place.

La fonction ida.prep() fait ce travail : (1) elle télécharge tous les fichiers pour une séance du cours, puis (2) elle fait scanner les fichiers par la fonction ida.scan() pour voir quels packages y sont chargés, et enfin (3) elle fait charger les packages par la fonction ida.load(), en les téléchargeant au préalable si nécessaire, le plus silencieusement possible (c’est-à-dire pas assez).

Voici les lignes qui détectent toutes les utilisations des commandes library() et require() :

grepl("(library|require)\\(([a-zA-Z0-9]*)\\)", text)
gsub(".*(library|require)\\(([a-zA-Z0-9]*)\\).*", "\\2", text)

Les lignes proviennent de la fonction ida.scan(). La première ligne “attrape” toutes les lignes de code contenant les termes library ou require suivis de quelque chose entre parenthèses. La seconde ligne extrait le contenu des parenthèses. J’envoie ensuite ce vecteur de noms de packages à la fonction ida.load().

Allez, un dernier exemple bien tordu pour la route :

grepl(paste0("^(", paste0(x, 0:3, collapse = "|"), ")_"), prep)

Cette ligne requiert un argument x, qui est le numéro de la séance. Chaque séance est divisée en quatre segments numérotés de 0 à 3. Cette ligne colle le numéro de séance à “0”, puis à “1”, puis à “2”, puis à “3”, puis colle tout ça ensemble avec des barres “|”, qui sont l’opérateur logique “ou” en regex. Tout cela doit être situé en début de ligne (“^”) et suivi d’un underscore.

Cette dernière expression sert à extraire les pages de cours pour une séance donnée, à partir de la page d’index du cours. Le reste du code montre comment exécuter tout le boulot décrit ci-dessus en moins de 100 lignes, qui permettent de gagner beaucoup de temps en classe en réduisant tout le travail de (télé)chargement à une commande, de type ida.prep(n).

4. Plus rapidement, sur le même sujet, il y a de chouettes projets de packages pour R autour de moi, et comme pour les “blogs SHS” il fut un temps, j’aimerais aider la communauté à se former.

Si vous programmez un peu sur R et voulez aider au développement de fonctions pour les analyses de données pour les sciences sociales (et notamment pour les analyses de données d’enquête, comme le permettent par exemple les packages survey et memisc), faîtes signe au Polit’bistro sur Twitter, ou dans les commentaires si vous avez comme moi du mal à tout mettre en 128 caractères.

5. Je n’ai plus le temps de bloguer sur tous les chouettes trucs qu’on peut découvrir sur les blogs de Baptiste Coulmont et Jérôme Cukier, mais vous avez les adresses.

6. Est-ce qu’on peut vraiment tolérer, au sein de l’Union européenne, un territoire qui se dispense d’élection au suffrage universel ?

Je me souviens avoir lu quelque part que le Vatican ne pratiquait pas non plus la transférabilité des peines, ce qui fait qu’un meurtrier ou un violeur au Vatican n’a pas de casier judiciaire à l’extérieur (il est simplement excommunié, en application du droit canonique). À vérifier, mais un juriste avait monté quelque chose d’assez conséquent sur le sujet ; je n’arrive plus à mettre la main dessus.

C’est à présent l’heure d’aller vraiment au bistro, histoire de savoir qui a gagné ce soir.

Données de santé publique (et bonne année en avance)

Les gouvernements européens échangent énormément d’information sur l’état de santé de leurs populations, mais aussi sur l’efficacité relative de leurs systèmes de santé. Conjuguées, ces mesures encouragent les décideurs politiques à réformer dans un contexte normalisé, où chaque pays peut être situé par rapport à une moyenne européenne, en tête ou en fin de classement. La neutralité apparente de ces opérations de mesure et de classement s’efface définitivement lorsque le benchmarking devient une cause instrumentale de réforme.

J’ai récemment eu la chance de participer à un ouvrage collectif sur l’Union européenne et la santé publique. Ma contribution, éphémèrement disponible ici avant le dépôt HAL-SHS, porte sur l’utilisation des données de santé publique au sein de l’Union européenne et sur ses conséquences politiques pour les États-membres. Le texte contient un patchwork de références que j’essaie de réunir autour des conditions de production des politiques de santé publique, ainsi qu’un exemple britannique de réforme guidée par la mesure de la performance.

Je cite cette publication parce qu’une autre publication fait aujourd’hui écho à ces histoires de quantification de la performance : le Global Burden of Disease (GBD) 2010, que vient de publier la revue médicale The Lancet, inclut deux contributions de l’Organisation Mondiale de la Santé et de la Banque Mondiale qui font très directement référence à l’enjeu des données de santé publique et de leur diffusion par les organisations internationales. Les deux contributions sont d’ailleurs les seules à inclure le terme data dès le titre.

Le blog EpiAnalysis a publié un très bon résumé de l’étude GBD 2010, pour celles et ceux qui voudraient rapidement voir à quoi tout cela ressemble. Certaines conclusions font penser aux présentations de Hans Rosling sur le même sujet, car elles invitent à repenser les exceptionnalismes régionaux en matière d’épidémiologie. Ces statistiques pourraient servir à l’allocation des ressources budgétaires par pathologie, ce qui laisse entrevoir l’importance de ce travail d’estimation entrepris au niveau mondial.

La volonté de situer le financement de la santé dans des tableaux de données n’est jamais parfaitement neutre, et cette observation s’applique jusque dans l’enseignement : j’utilise souvent les données IHME (Institute for Health Metrics and Evaluation, l’organisme producteur du GBD 2010) dans mes propres cours, grâce au travail d’une équipe suédoise qui publie l’excellent jeu de données agrégé Quality of Government (le titre est évocateur). Des études à la croisée des disciplines, comme l’excellent récent ouvrage Sick Societies, y ont également recours.

Pour terminer, j’ai réussi à prendre quelques minutes dans mon (absence de) planning pour recenser cette publication, mais je crains de ne pouvoir remettre les pieds au ‘bistro avant l’année prochaine. J’en profite pour rappeler que 2013 sera l’année des statistiques, que l’on espère moins meurtrières et moins injustes que celles de 2012. Espérons aussi que rien de grave n’arrivera à l’architecture d’Internet, qui subit menace après menace de toutes parts, heureusement sans conséquence jusqu’ici grâce à l’échec d’ACTA et, tout récemment, du WCIT-12.

P.S. Merci à Marie-Anne du blog voisin La pensée du discours pour le signalement d’une typo rigolote dans le titre !

Mise à jour : j’avais raté cet article de Science qui évoque le conflit entre l’IMHE et l’OMS sur les données de santé publique mondiale ; lisible en entier ici.

Rechercher dans OpenEdition Search

Vous allez être redirigé vers OpenEdition Search