Villes et villages fleuris

En France, la tradition veut que l’on décore les parcs, rond-points et les rues des villes et des villages avec des fleurs. Une autre tradition très française est le concours et la notation, et ce domaine n’y a pas échappé. En effet, le Conseil national des Villes et Villages Fleuris décerne régulièrement des “fleurs” aux différentes communes françaises, suivant la qualité de leurs décorations et de leurs jardins. Ce site donne la liste des villes récompensées. Or, ici, nous aimons beaucoup les données relatives aux villes de France : voir par exemple ici ou ici. Quels sont les déterminants d’une “fleur” ? Comment faire pour en obtenir plus ? Essayons de voir ce que la statistique peut nous apprendre sur le sujet.

Premiers résultats

Nous allons mobiliser d’autres informations sur les communes :

  • Le nombre d’habitants
  • Le nombre d’hôtels présents sur la commune (disponible ici)
  • Le nombre de lits présents dans la commune (disponible au même endroit que précédemment)
  • Le vote politique au second tour de la présidentielle 2012 (disponible ici sur data.gouv)

On récupère donc les informations présentes sur le site des Villes et Villages Fleuris pour connaître le nombre de fleurs associé à chaque ville. C’est 0 pour les villes qui ne sont pas dans la liste du site, et de 1 à 4 pour les autres. Nous allons ensuite réaliser une régression linéaire sur cette variable à partir des autres informations. Le choix de la régression linéaire a été fait car le caractère ordonné, c’est à dire que 2 fleurs soient supérieures à une seule, est important dans ce contexte. Les résultats obtenus sont les suivants :

Variable Coefficient Significatif
Population (en milliers) 0.013 Oui
Nombre d’hôtels 0.036 Oui
Nombre de lits ~ 0 Non
% de votes pour Sarkozy (2012) 0.001 Oui

On voit ainsi que la population, le nombre d’hôtels et le pourcentage de personnes qui ont voté pour Nicolas Sarkozy, le candidat de la droite à l’élection présidentielle en 2012, impliquent un nombre plus important de “fleurs” sur le classement de l’association. On peut en déduire que les villages qui ont tendance à accueillir des touristes décorent plus leurs jardins. Plus marginalement, les villes plus peuplées ou plus conservatrices obtiennent plus de fleurs. Ce résultat nous rappelle les résultats liés aux noms des rues, par exemple la Rue des Fleurs qui est plus marquée à droite.

Répartition géographique

Une autre question qu’on peut se poser est celle de la répartition géographique de ces communes. On peut s’intéresser à leur répartition par département ou par région, mais nous allons plutôt nous intéresser à une autre question, celle de l’autocorrélation spatiale. L’idée est d’étudier l’influence du voisinage entre deux communes : vont-elles avoir le même score en termes de “fleurs” ? Ou est-ce que ces communes sont réparties un peu aléatoirement sur le territoire ? (voir par exemple ici, pour plus d’informations).

Regardons par exemple la carte de Provence-Alpes-Côte d’Azur :

Sur cette carte, les villes et les villages sont en vert lorsqu’ils ont été récompensés, avec une teinte de plus en plus marquée lorsqu’ils ont plusieurs “fleurs”. On remarque que des groupes de communes, par exemple autour de Marseille ou d’Antibes, ont toutes eu des fleurs. Cela pourrait être un effet d’entraînement, par exemple des maires voisins connaissent mieux ce système lorsque leur voisin y a participé.

Avancé – Cette hypothèse peut se vérifier mathématiquement : on peut calculer des indicateurs de “corrélation spatiale”, et donc de regroupements de valeurs similaires, comme par exemple l’Indice de Moran. On trouve un résultat strictement positif, ce qui s’interprète bien de cette façon là.

Sampling graphs – MAD-Stat Seminar at Toulouse School of Economics

Tomorrow (march 23rd), I’ll be presenting my work on sampling designs for graph (and particularly extension sampling designs, with an application to Twitter data) at the MAD Stat seminar of the Toulouse School of Economics. Here are my slides:

 

Announcing Icarus v0.3

This weekend I released version 0.3.0 of the Icarus package to CRAN.

Icarus provides tools to help perform calibration on margins, which is a very important method in sampling. One of these days I’ll write a blog post explaining calibration on margins! In the meantime if you want to learn more, you can read our course on calibration (in French) or the original paper of Deville and Sarndal (1992). Shortly said, calibration computes new sampling weights so that the sampling estimates match totals we already know thanks to another source (census, typically).

In the industry, one of the most widely used software for performing calibration on margins is the SAS macro Calmar developed at INSEE. Icarus is designed with the typical Calmar user in mind if s/he whishes to find a direct equivalent in R. The format expected by Icarus for the margins and the variables is directly inspired by Calmar’s (wiki and example here). Icarus also provides the same kind of graphs and stats aimed at helping statisticians understand the quality of their data and estimates (especially on domains), and in general be able to understand and explain the reweighting process.

Example of Icarus in RStudio
Example of Icarus in RStudio

I hope I find soon the time to finish a full well documented article to submit to a journal and set it as a vignette on CRAN. For now, here are the slides (in French, again) I presented at the “colloque francophone sondages” in Gatineau last october: http://nc233.com/icarus.

Kudos to the CRAN team for their amazing work!

Prénoms au concours d’internat de médecine

Aujourd’hui, un petit article dans la lignée de la sociologie des prénoms, qu’on retrouve fréquemment associée avec les résultats du bac (voir ici par exemple pour un article de Rue89, ou ici pour le site originel). Nous allons nous intéresser aux résultats des ECN, les épreuves classantes nationales des études de médecine qui permettent de choisir les spécialités d’internat. Ils sont disponible sur Legifrance, à ce lien pour ceux de l’année 2016.

Nous allons réaliser un nuage de points sur ces prénoms : en ordonnée, on retrouve la fréquence des noms parmi la liste des 8000 et quelques admis(es), et abscisse, le rang moyen obtenu par les porteurs de ce prénom. On se limite aux prénoms les plus fréquents (plus de 10 inscrits). Voici les résultats obtenus (cliquer pour une version zoomée) :

On peut comparer cette image avec celle des résultats du bac 2015 :

On retrouve certes les mêmes noms parmi les plus fréquents (Marie, Camille, Thomas…) mais la structure dans les prénoms ne semble pas être la même ! Cela peut s’expliquer par un échantillon bien plus faible, et par des effets de sélection à d’autres niveaux dans les études de médecine.

EDIT 07/03 : Pour répondre au commentaire de Baptiste Coulmont, voici le graphe avec les rangs passés au logarithme. On voit effectivement que ce n’est pas exactement les mêmes résultats ; en particulier, il y a plus de noms de garçons qui ressortent dans les bonnes places.

A winning strategy at the lottery

tl;dr – It is possible to construct a winning strategy at the lottery by choosing the numbers that other people rarely select. We discuss this and prove it on a small example.

 

There are many things I don’t like with so-called math reasoning and lotteries, and I wanted to write about it for a very long time. So, on the one hand we have the classic scammers who try to sell you the “most probable numbers” (or alternatively the “numbers that are due”). Of course, neither strategy is mathematically valid (because the draws are independent). On the other hand, many “educated” and “rational” people argue that, given that the expected value of a lottery ticket is negative (because the probability of wining a prize at the lottery is very low), smart people should never buy lottery tickets.

Comic by Zach Wiener, http://www.smbc-comics.com
Comic by Zach Wiener, http://www.smbc-comics.com

Now what if we could find a (mathematically correct!) strategy to make the expected value of our ticket positive? The idea is to choose the numbers that other players choose the least often, so that when we win a prize, it will be divided among fewer other players. But will it be enough to make a significant difference?

The example

Let’s consider a lottery where players have to choose 6 numbers out of 19. The total number of players is 10000. The favorite numbers of the players are 1, 2, 3, 4, 5 and the least favorite are 15, 16, 17, 18, 19. They are respectively selected 2 times more often and 2 times less often than the other numbers 6 –  14. The company who runs the lottery decides to give the players back 90 percent of the amount of the tickets (thus ensuring a 10% profit) depending on the number of numbers they have chosen that also are in the right combination:

  • 0 or 1 correct number: 0%
  • 2 correct numbers: 42%, shared with other winners
  • 3 correct numbers: 10%, shared with other winners
  • 4 correct numbers: 3%, shared with other winners
  • 5 correct numbers: 4%, shared with other winners
  • 6 correct numbers (the jackpot): 40%, shared with (the eventual) other winners

Then we compute the expected value for each ticket that was bought. You can find the R code I used on my GitHub page. I plotted the expected gains against an indicator of the rarity of the combination chosen by each player (the harmonic mean of the inclusion probabilities):

 

Expected gains wrt a measure of the frequency of the combination chosen

As we predicted, the expected gains are higher if you chose an “unpopular” combination. But what impresses me most is the order of magnitude of the effect. It is indeed possible to find a combination that yields a positive expected value (points on the left that are above the red line)!

Further work

I have no idea how all this works when we change the parameters of the problem: numbers to choose from (49 in France for example), number of players, choices of the players (inclusion probabilities of the numbers), payoffs, etc. I bet that the shape of the curve remains the same, but I wonder how high the expected value can get for the rarest combinations, and if it is always possible to find a winning strategy. I might try to work on an analytical solution when I find some time because I believe it involves some sampling theory.

Finally, a question to all people who never play the lottery because the expected value is negative, would you start buying tickets now that you know there exists a strategy with positive expected value?

Comic by Zach Wiener, http://www.smbc-comics.com
Comic by Zach Wiener, http://www.smbc-comics.com

PS: Henri pointed out chapter 11 of Jordan Ellenberg’s “How not to be wrong” which deals with interesting mathematical facts about the lottery, including a similar discussion as this post. Be sure to check it out, it’s really great!

[24] Générateur automatique de prénoms

Il est né le divin enfant ! Oui, mais comment va-t-on l’appeler ?  Comme nous l’avons remarqué dans un post précédent du calendrier de l’avent, depuis 1993 le choix des prénoms est “libéralisé” en France. Dès lors, pourquoi ne pas chercher de nouveaux prénoms à l’aide d’une méthode mathématique ? Suivant une idée développée dans un excellent post du blog science étonnante, nous avons créé une “machine a inventer des prénoms”, que vous pouvez tester ici :

 

Mes prénoms préférés générés par la machine pour le moment : Fauliphare et Zauli !

La machine fonctionne a l’aide d’une chaîne de Markov qui indique la probabilité de passage d’une lettre à l’autre. Les probabilités sont calculées à l’aide d’une base de données de prénoms français.

[23] Petite règle statistique pour se représenter une probabilité

Afin de me représenter ce qu’est une probabilité p (particulièrement lorsqu’elle est faible) j’utilise la petite règle suivante :

  • Si je tente l’expérience 1/p fois (arrondi à l’inférieur lorsque ce n’est pas un nombre entier), j’ai “de bonnes chances” que l’événement se réalise
  • Il me faudra attendre 3/p essais pour être “pratiquement certain” que l’événement se réalise

Si par exemple on me dit que “un français sur cinq a plus de 65 ans“, je sais qu’en prenant 5 français au hasard dans la population, j’ai de bonnes chances qu’au moins un ait plus de 65 ans parmi eux, et que je suis presque certain d’en trouver un si je sélectionne 15 français.

Il est facile de voir pourquoi ça marche : la probabilité d’obtenir au moins un succès en n lancers est :

\(\Pr(un~succes) = 1-\Pr(aucun~succes)\)

La probabilité de n’avoir aucun succès vérifie une loi binomiale de paramètre p, soit :

\(\Pr(un~succes) = 1-(1-p)^{\frac{1}{p}} = 1 – \exp ( \frac{1}{p} \log(1-p) )\)

Or, quand p est petite, on a:

\(\log(1-p) \sim -p\)

Donc finalement :

\(\Pr(un~succes) \sim 1-\exp(-1) \sim 0.63\)

De la même façon avec 3/p essais :

\(\Pr(un~succes) \sim 1-\exp(-3) \sim 0.95\)

 

On peut vérifier la qualité des deux approximations avec deux petits graphes (pour p compris entre 0 et 0.5 – au-delà de 0.5, l’arrondi de 1/p étant égal à 1, cela n’aurait plus beaucoup de sens) :

Simulation de l'approximation 1/p pour différentes valeurs de p
Simulation de l’approximation 1/p pour différentes valeurs de p
Simulation de l'approximation 3/p pour différentes valeurs de p
Simulation de l’approximation 3/p pour différentes valeurs de p

Voilà, mis à part quelques effets de seuil et le fait que l’approximation est un peu trop conservative lorsqu’on se rapproche de p = 0.5, ce n’est pas trop mal !

 

[22] L’affaire “Fun Radio”

Les sondages peuvent parfois faire l’actualité sans parler de politique ! Prenons l’exemple de l’affaire qui oppose Fun Radio et l’institut Médiamétrie, qui est chargé de la mesure d’audience sur les chaînes de télé, de radio, et même des sites internet. Un animateur de la matinale de la radio avait demandé à ses auditeurs, dans le cas où ils seraient contactés par Médiamétrie, de déclarer qu’ils n’écoutaient que Fun Radio (et aucune radio), et qu’ils étaient à l’écoute de la station durant toute la journée. Cela a conduit Médiamétrie à retirer momentanément Fun Radio du panel de mesure. Cette décision a eu des conséquences importantes sur les finances de la radio : en effet, la répartition des revenus publicitaires est directement indexée sur ces calculs d’audience. Ainsi, la radio s’est pourvu en justice pour être réintégrée, ce qui sera a priori le cas.

Je ne commenterai pas la décision de justice, n’y connaissant rien, mais j’ai plutôt envie de commenter d’un point de vue de sondeur cette affaire. En effet, si l’on résume, les messages ont eu (potentiellement) trois effets :

  1. Encourager les auditeurs de la matinale à répondre aux enquêteurs de Médiamétrie lorsque ceux-ci les contactent ;
  2. Sur-déclarer un temps d’écoute pour la radio Fun Radio ;
  3. Sous-déclarer un temps d’écoute pour d’autres radios.

À mon sens, ces trois problèmes demandent des solutions différentes ! Je vais laisser le premier de coté, qui me semble le plus intéressant d’un point de vue sondages, pour parler brièvement des deux autres.

Tout d’abord le deuxième : on peut imaginer qu’en utilisant des sources extérieures comme le panel Radio global sur le temps d’écoute moyen de la radio en France, ou des enquêtes type Emploi du Temps de l’INSEE, on puisse repérer des outliers (c’est à dire des personnes qui déclarent des valeurs qui sortent très largement de la moyenne) et les traiter, ou les exclure. En gros, écouter la radio 24h par jour, c’est suspect.

Le troisième point est le plus ardu à corriger, mais on peut faire l’hypothèse (soyons optimistes) que quelqu’un qui est prêt à mentir si un animateur radio le lui demande est un auditeur exclusif de la radio en question, ce qui neutralise l’effet.

Reste donc le premier point. Tout praticien des sondages sait que les individus sélectionnés dans un échantillon ne sont pas tous volontaires pour répondre aux questionnaires, loin de là. Cela crée un biais, qui est étudié et traité en statistiques par des méthodes de “correction de la non-réponse”. On pourrait donc imaginer que ces méthodes servant à prendre en compte la non-réponse pourraient suffire à annuler le biais en question, mais le problème est plus compliqué que cela. Je vais tenter d’expliquer à l’aide d’un exemple : supposons qu’il existe uniquement deux radios, une pour les “jeunes”, et une pour les autres. Dans ce cas, Médiamétrie cherche à savoir combien de personnes écoutent chaque radio. Si 10% des jeunes répondent avant l’effet de l’annonce, Médiamétrie a l’habitude de multiplier par 10 (pour simplifier) le nombre d’auditeurs de Fun Radio : si le nombre de répondants augmente, il suffit de changer un peu le coefficient multiplicatif, mais cela n’aura pas d’effet sur l’écoute de l’autre radio, et les chiffres devraient être globalement les mêmes.

Pourquoi je dis que c’est plus compliqué ? Parce que les méthodes de la correction de la non-réponse reposent sur de l’information auxiliaire, par exemple les informations démographiques. On peut facilement séparer (par exemple via les variables d’âge) l’auditeur moyen de Fun Radio de celui de France Inter, mais ce sera plus compliqué avec NRJ ou une autre station destinée à un même public. Il est d’ailleurs intéressant de noter que c’est NRJ qui a initialement porté réclamation auprès de Médiamétrie. Et donc, la mesure “absolue” de l’audience de Fun Radio (en excluant les points 2 et 3) n’est pas trop mauvaise. Celle de Nostalgie n’est pas impactée non plus, mais celle de NRJ peut l’être énormément. En effet, plus de jeunes répondent, mais les répondants écoutent moins NRJ (car ils sont plutôt auditeurs de Fun Radio), donc l’estimation finale est à la baisse pour cette radio, alors que le comportement de leurs auditeurs n’a pas changé.

Voilà, vous en savez plus sur ceux qui travaillent en secret pour Médiamétrie !

[21] Lettres internationales

Reprenons la même logique que dans l’article du 16 décembre : quelle lettre a le plus d’habitants dans le Monde ? Ce coup-ci, on va se limiter au nom des pays (encore que ce serait intéressant de reproduire l’idée sur les villes, mais les données seraient difficiles à trouver : peut-être une prochaine fois !). Pour cela, on utilise les données disponibles ici, on normalise les noms des pays en retirant tout ce qui est entre parenthèses et précédé d’une virgule (décision totalement subjective, mais ce n’est pas une science exacte). Les noms des pays sont ici en Anglais : c’est la norme internationale après tout.

Les résultats sont les suivants :

Les lettres des deux pays les plus peuplés ont été colorées en bleu pour la Chine, en jaune pour l’Inde, et en vert pour les trois lettres que les pays ont en commun (encore une fois, en anglais). On remarque que ces trois lettres, I, N et A, sont les trois plus fréquentes : est-ce que c’est dû à leur appartenance à ces deux pays, ou est-ce que c’est le fait qu’elles soient fréquentes qui fait qu’elles se retrouvent dans les deux noms ?

Pour rappel, les résultats obtenus sur les villes de France sont les suivants :

On voit bien que la répartition n’est pas la même : E, R, S par exemple sont bien moins fréquentes au niveau mondial qu’au niveau français.

[20] Données du chômage au format “xkcd”

Aujourd’hui on reprend les données du chômage récupérées hier sur le site de l’Insee. On va transformer le graphe qu’on a créé avec ggplot2 pour le faire ressembler aux graphes de l’excellent comic xkcd. On va utiliser pour cela le package R xkcd :

install.packages("xkcd", dependencies = T)

Il faut ensuite installer la police “xkcd”. Le script suivant fait l’affaire :

library(extrafont)

download.file("http://simonsoftware.se/other/xkcd.ttf",
 dest="xkcd.ttf", mode="wb")
system("mkdir ~/.fonts")
system("cp xkcd.ttf ~/.fonts")
font_import(pattern = "[X/x]kcd", prompt=FALSE)
fonts()
fonttable()
if(.Platform$OS.type != "unix") {
 ## Register fonts for Windows bitmap output
 loadfonts(device="win")
} else {
 loadfonts()
}

Il ne reste plus qu’à modifier un peu notre graphe original et utiliser le thème theme_xkcd() dans ggplot2. Notez l’utilisation de geom_smooth à la place de geom_line afin de lisser la courbe pour renforcer l’aspect bande dessinée.

library(xkcd)
library(ggplot2)

plot_chomage <- ggplot(donnees_chomage, aes(x=TIME_PERIOD, y=OBS_VALUE)) +
 geom_smooth(colour="red", size=2, level=0, formula = y ~ poly(x, 9), method="lm") +
 xlab("Annee") +
 ylab("Taux de chomage") +
 geom_vline(xintercept = c(1993,2008), color="grey", linetype="dashed") +
 annotate("text", c(1993,2008), c(0.15), label=c("1993","2008"), 
 color="grey", family="xkcd") +
 theme_xkcd()

print(plot_chomage)
Taux de chômage en France entre 1975 et 2016 – style “xkcd”

Et voilà un graphe au style “xkcd” pour le taux de chômage en France ! Le sujet n’étant peut-être pas le plus adapté au format BD, je donne pour l’exemple le graphe des prénoms de l’article du 13 décembre que je me suis également amusé à xkcd-iser :

Part des 10 prénoms les plus populaires en France - style xkcd
Part des 10 prénoms les plus populaires en France – style xkcd