Estimation reports présidentielles 2017

Tableau de reports entre les 2 tours (estimation)

vote1t abs2t blc2t nul2t macron2t lepen2t delta2
abs1t 8832102 73224 73839 1192645 401721 4924
blc1t 7097 316489 22330 204942 108798 342
nul1t 3154 16879 58347 113858 96946 152
DUPONTAIGNAN 18932 311314 78055 611274 674514 911
LEPEN 189928 168938 98728 59063 7158737 3097
MACRON 241140 56697 57173 8218992 78533 3812
HAMON 48847 115717 40571 2060785 24193 1174
ARTHAUD 2076 24606 37354 79873 88375 100
POUTOU 4317 95040 62063 168403 64474 208
CHEMINADE 717 13034 6604 31478 13718 35
LASSALLE 4693 103622 65430 137521 123808 226
MELENCHON 1764595 946730 275791 3689297 379752 3786
ASSELINEAU 116230 29307 3657 99345 83837 170
FILLON 862889 749210 184101 4073033 1339924 3839
delta1 4648 693 181 2618 1145 5

delta1 et delta2 correspondent à un ajustement entre les inscrits des deux tours pour s’assurer que le total à chaque tour est bien rigoureusement égal.

L’algorithme utilisé fait que les totaux en ligne et en colonne correpondent exactement aux résultats définitifs publiés. Cela ne doit toutefois pas faire illusion sur la précision obtenue.

Taux de report du premier vers le second tour

A partir du premier tableau, on peut calculer comment se sont répartis les votants du premier tour au second.

vote1t abs2t blc2t nul2t macron2t lepen2t
abs1t 83.53 0.69 0.7 11.28 3.8
blc1t 1.08 47.98 3.39 31.07 16.49
nul1t 1.09 5.84 20.18 39.37 33.52
DUPONTAIGNAN 1.12 18.38 4.61 36.08 39.82
LEPEN 2.47 2.2 1.29 0.77 93.27
MACRON 2.79 0.66 0.66 94.99 0.91
HAMON 2.13 5.05 1.77 89.99 1.06
ARTHAUD 0.89 10.59 16.08 34.39 38.05
POUTOU 1.09 24.1 15.74 42.71 16.35
CHEMINADE 1.09 19.88 10.07 48.02 20.93
LASSALLE 1.08 23.82 15.04 31.61 28.46
MELENCHON 25.01 13.42 3.91 52.28 5.38
ASSELINEAU 34.97 8.82 1.1 29.89 25.22
FILLON 11.97 10.39 2.55 56.5 18.59

Exemple de lecture : 56,50% des électeurs de Fillon au premier tour ont voté Macron au second tour.

Taux de provenance du second tour

Réciproquement, on peut calculer d’où viennent les voix du second tour en proportion.

vote1t abs2t blc2t nul2t macron2t lepen2t
abs1t 72.98 2.42 6.94 5.75 3.78
blc1t 0.06 10.47 2.1 0.99 1.02
nul1t 0.03 0.56 5.48 0.55 0.91
DUPONTAIGNAN 0.16 10.3 7.33 2.95 6.34
LEPEN 1.57 5.59 9.28 0.28 67.29
MACRON 1.99 1.88 5.37 39.62 0.74
HAMON 0.4 3.83 3.81 9.93 0.23
ARTHAUD 0.02 0.81 3.51 0.39 0.83
POUTOU 0.04 3.15 5.83 0.81 0.61
CHEMINADE 0.01 0.43 0.62 0.15 0.13
LASSALLE 0.04 3.43 6.15 0.66 1.16
MELENCHON 14.58 31.33 25.91 17.79 3.57
ASSELINEAU 0.96 0.97 0.34 0.48 0.79
FILLON 7.13 24.8 17.3 19.64 12.6

Exemple de lecture : 7,13% des absentionnistes du second tour ont voté Fillon au premier tour.

Estimation des reports entre les 2 tours

La mise à disposition des données par bureau de vote ( 1er tour et 2ème tour) fournit une masse d’informations importantes.

Le problème d’estimer des reports entre élections quand on ne dispose que des totaux de chaque tour est un problème étudié depuis longtemps sans que des réponses complétement satisfaisantes aient été trouvées. On peut lire à ce sujet l’article suivant qui fait le tour de différentes méthodes.

Méthode

Les tableaux ci-dessus sont obtenus à partir des résultats par bureau de vote.

  • Dans un premier temps, on utilise la procédure ei.reg du package eiPack sous R qui est une méthode classique proposéie par Goodman en 1959. Inconvénient de la méthode : les coefficients obtenus n’ont aucune raison d’être dans l’intervalle [0,1], ce qui est impératif pour un taux de report. On va corriger cela dans la suite.
  • On remplace les coefficients < 0.01, y compris les négatifs, par la valeur 0.01 : cela revient à considérer que les taux de report négatifs ne peuvent pas exister et sont traduit par un très faible taux. Par contre, à ce stade, on laisse les coefficients > 1.
  • On effectue une procédure IPF (Iterative Proportional Fitting) qui revient à caler sur marges imposées (les résultats réels du second tour) une matrice de transfert (imparfaite), celle obtenue en appliquant les coefficients corrigés issus de la régression aux effectifs du premier tour. Cette procédure garantit que les les coefficents soient tous entre 0 et 1.

Programme R

fread("pres2017_bv.csv") -> elec

ei.reg(cbind(abs2t, blc2t, nul2t, macron2t, lepen2t, delta2) ~
  cbind(abs1t,blc1t,nul1t,DUPONTAIGNAN,LEPEN,MACRON,
        HAMON,ARTHAUD,POUTOU,CHEMINADE,
        LASSALLE,MELENCHON,ASSELINEAU,FILLON, delta1),
data=elec) -> regr

regr$coefficients -> coef
coef[coef<0.01]=0.01

sapply(elec[,c(3:16, 22)], sum) -> m1t
sapply(elec[,c(17:21, 23)], sum) -> m2t

val <- coef * m1t
Ipfp(val, list(1,2), list(m1t, m2t)) -> mat

round(mat$x.hat) -> estim
round(prop.table(estim, 1) * 100, 2)
round(prop.table(estim, 2) * 100, 2)