1. Contexte et objectif
Au second tour des municipales de Toulouse 2026, seules deux listes s’affrontent : Moudenc (DVD) et Piquemal (LFI, avec fusion Briançon PS). Pour chaque bureau de vote, on connaît les résultats complets du 1er tour (10 listes) et du 2nd tour (2 listes). L’objectif est d’estimer dans quelle proportion les électeurs de chaque liste du 1er tour ont reporté leurs voix vers l’un des deux finalistes. On tente aussi d’estimer le comportement des nouveaux votants entre les deux tours.
Ce document explique la méthode statistique utilisée, ses hypothèses, ses limites, et l’interprétation des résultats.
On notera R1 le 1er tour et R2 le 2nd tour.
2. Le problème : on n’observe pas le comportement individuel
Les données électorales sont agrégées par bureau de vote. On observe le nombre de voix pour chaque liste dans chaque bureau, mais pas le comportement individuel des électeurs : on ne sait pas qui a voté pour qui. Par exemple, si la liste A fait 100 voix au 1er tour et 80 voix au 2nd tour, on ne peut pas conclure que 80 % des électeurs A ont voté pour le même candidat au 2nd tour. Certains peuvent être partis vers l’autre finaliste, ou s’être abstenus.
Pour inférer un comportement individuel (le taux de report) à partir de données agrégées, on utilise une technique classique en sociologie électorale : la régression écologique (ou inférence écologique [1]).
3. Le modèle de régression linéaire
3.1. Variables
Pour chaque bureau de vote \(i\) (284 au total), on définit :
-
Variable dépendante : \(y_i\) = score de Piquemal au 2nd tour (en % des exprimés R2) dans le bureau de vote \(i\)
-
Variables explicatives :
-
\(x_{k,i}\) = score de la liste \(k\) au 1er tour (en % des exprimés R1) dans le bureau de vote \(i\), pour \(k = 0 \ldots 9\)
-
\(\Delta\text{part}_i\) = variation de participation entre les deux tours :
-
avec :
| \(v^{R1}_i\) |
nombre de votants au 1er tour dans le bureau \(i\) |
| \(v^{R2}_i\) |
nombre de votants au 2nd tour dans le bureau \(i\) |
| \(I_i\) |
nombre d’inscrits sur les listes électorales du bureau \(i\) (identique aux deux tours) |
3.2. Équation du modèle
On cherche alors à résoudre l’équation suivante pour chaque bureau \(i\) :
avec :
| \(y_i\) |
score de Piquemal au 2nd tour dans le bureau \(i\) (en proportion des exprimés R2) |
| \(x_{k,i}\) |
score de la liste \(k\) au 1er tour dans le bureau \(i\) (en proportion des exprimés R1) |
| \(\beta_k\) |
coefficient de report agrégé estimé de la liste \(k\) vers Piquemal (approximation du taux de report moyen sous hypothèse d’homogénéité). Ce sont ces valeurs là qui nous intéressent car elles permettent d’estimer la fidélité ou infidélité électorale de chaque liste au 1er tour. |
| \(\gamma\) |
effet des nouveaux votants (mobilisés entre R1 et R2) sur le score de Piquemal (paramètre à estimer) |
| \(\Delta\text{part}_i\) |
variation de participation dans le bureau \(i\) (définie ci-dessus) |
| \(\varepsilon_i\) |
terme d’erreur — variation du bureau \(i\) non expliquée par le modèle |
Interprétation des coefficients :
-
\(\beta_k\) ≈ part moyenne estimée des électeurs de la liste \(k\) au R1 ayant voté Piquemal au R2 (interprétation agrégée, non individuelle !)
-
\(\gamma\) = effet agrégé de la variation de participation sur le score de Piquemal (interprétation descriptive uniquement ; ne permet pas d’identifier directement le comportement individuel des nouveaux votants)
| Les coefficients ne sont pas contraints dans l’intervalle \([0,1\)]. Cela pourrait donner lieu à une étude plus approfondie intéressante même s’il y a fort à parier (intuition) que les résultats finaux soient similaires. Ils peuvent ainsi, horreur absolue, être négatifs ou supérieurs à 1. Ces valeurs ne doivent pas être interprétées littéralement. |
3.3. Résultats avec les données du 1er tour à Toulouse
| Liste | Voix R1 | Score R1 | \(\beta_k\) estimé (MCO) |
|---|---|---|---|
Briançon (PS) |
39 245 |
25,0 % |
\(0{,}73\) |
Moudenc (DVD) |
58 462 |
37,2 % |
\(\approx 0{,}00\) |
Piquemal (LFI) |
43 274 |
27,6 % |
\(\approx 1{,}00\) |
Leonardelli (RN) |
8 447 |
5,4 % |
\(\approx 0{,}00\) |
Meilhac |
2 648 |
1,7 % |
\(0{,}10\) |
Autres (5 listes) |
4 945 |
3,1 % |
instable (faible volume de voix : coefficients non robustes et non interprétables) |
| Ces valeurs sont issues du modèle mono-output en pourcentages (variable dépendante = score Piquemal R2 en % des exprimés), utilisé ici à des fins d’illustration. L’estimation finale (§ Résultats de la régression) repose sur un modèle multi-output en volumes absolus avec trois équations simultanées (Moudenc, Piquemal, non-votants), ce qui explique des coefficients légèrement différents (ex. \(\beta_{\text{Briançon}}^P = 0{,}674\) au lieu de \(0{,}73\)). |
4. Traitement spécial des listes fusionnées
Briançon (PS) et Piquemal (LFI) ont fusionné avant le second tour. Leurs électeurs du 1er tour ont reçu une consigne de vote explicite.
Le modèle confirme que la fusion a fonctionné côté LFI : \(\beta_{\text{Piquemal}} \approx 1{,}00\). En revanche, côté PS, la fusion est partielle : \(\beta_{\text{Briançon}} = 0{,}73\), soit un taux de fuite de 27 % vers Moudenc ou absentention. Ce résultat est analytiquement intéressant car il quantifie le coût électoral de la consigne de fusion pour le PS.
5. Mais qu’est ce qu’une régression linéaire multivariée (MCO) ?
5.1. Exemple introductif
On se place dans un cas volontairement simplifié : 3 listes au 1er tour (A, B, C), seules A et B passent au 2nd tour (C est éliminée). On observe 3 bureaux de vote.
| Les données de la colonne « A (2nd tour) » ont été construites à partir de coefficients choisis à l’avance (\(\beta_A = 0{,}90\), \(\beta_B = 0{,}10\), \(\beta_C = 0{,}60\)). Donc dans ce cas, cela tombe en marche ! Les MCO retrouvent donc ces coefficients exactement, avec des résidus nuls (ce qui n’arrive jamais) C’est un choix pédagogique pour rendre le calcul vérifiable à la main. Sur des données réelles, les résidus ne sont jamais nuls. |
| Bureau | A (1er tour) | B (1er tour) | C (1er tour) | A (2nd tour) |
|---|---|---|---|---|
1 |
100 |
60 |
80 |
144 |
2 |
50 |
100 |
40 |
79 |
3 |
120 |
40 |
60 |
148 |
On cherche trois paramètres :
| \(\beta_A\) |
fraction des voix de la liste A au 1er tour qui se reportent sur A au 2nd tour |
| \(\beta_B\) |
fraction des voix de la liste B au 1er tour qui se reportent sur A au 2nd tour |
| \(\beta_C\) |
fraction des voix de la liste C au 1er tour qui se reportent sur A au 2nd tour |
Le modèle sans constante pour le bureau \(i\) s’écrit :
avec :
| \(y_i\) |
nombre de voix obtenues par la liste A au 2nd tour dans le bureau \(i\) |
| \(a_i, b_i, c_i\) |
nombres de voix obtenues par les listes A, B, C au 1er tour dans le bureau \(i\) |
| \(\beta_A, \beta_B, \beta_C\) |
taux de report estimés vers A — les inconnues du modèle |
| \(\varepsilon_i\) |
résidu — écart entre la valeur observée et la valeur prédite par le modèle |
On applique dans tous les cas la même formule MCO. Ici, avec 3 bureaux et 3 inconnues, le système est carré et les données fictives sont sans bruit : les MCO donnent une solution exacte (\(\varepsilon_i = 0\) pour tout \(i\)). Sur des données réelles avec \(n = 284\) bureaux, le système est sur-déterminé et les résidus sont non nuls — mais la formule reste identique.
|
Qu’est-ce qu’un système sur-déterminé ? Un système d’équations est dit sur-déterminé lorsqu’il y a plus d’équations que d’inconnues (\(n > p\)). Ici, chaque bureau de vote génère une équation, et les inconnues sont les taux de report \(\beta_k\). Avec \(n = 284\) bureaux et \(p = 11\) inconnues (cas réel), il y a 284 équations pour 11 inconnues. Sauf si les données sont parfaitement cohérentes — ce qui ne se produit jamais sur des données réelles en raison du bruit électoral —, il n’existe aucune solution exacte. Les MCO trouvent alors le vecteur \(\hat{\boldsymbol{\beta}}\) qui minimise la somme des carrés des résidus \(\sum_i \varepsilon_i^2\), c’est-à-dire la solution « la moins mauvaise » au sens de l’erreur quadratique. |
On pose :
La solution MCO est donnée par l’équation normale :
| Cette expression suppose que la matrice \(\mathbf{X}^\top \mathbf{X}\) est inversible. En pratique, les solveurs numériques utilisent une pseudo-inverse ou une décomposition lorsque cette condition n’est pas vérifiée. |
Après calcul :
Ce qui donne :
On peut vérifier : \(\hat{y}_1 = 0{,}90 \times 100 + 0{,}10 \times 60 + 0{,}60 \times 80 = 90 + 6 + 48 = 144\). Les résidus sont nuls et le \(R^2 = 1\).
| Les résidus sont nuls ici parce que les données fictives ont été construites sans bruit. Sur des données réelles, le comportement électoral varie d’un bureau à l’autre (profils sociologiques différents, dynamiques locales) et le modèle linéaire n’est qu’une approximation : les résidus sont alors non nuls, et le \(R^2 < 1\). |
5.2. Exemple avec résidus non nuls
On reprend le même cadre mais avec 4 bureaux et des données de vote qui ne vérifient plus exactement le modèle linéaire. Le système est sur-déterminé (4 équations, 3 inconnues).
| Bureau | A (1er tour) | B (1er tour) | C (1er tour) | A (2nd tour) |
|---|---|---|---|---|
1 |
100 |
60 |
80 |
147 |
2 |
50 |
100 |
40 |
82 |
3 |
120 |
40 |
60 |
145 |
4 |
70 |
80 |
90 |
128 |
On pose :
Le code R suivant réalise l’estimation :
X <- matrix(c(100, 60, 80,
50, 100, 40,
120, 40, 60,
70, 80, 90), nrow = 4, byrow = TRUE)
y <- c(147, 82, 145, 128)
# Régression sans constante (- 1)
# On contraint le modèle à passer par l'origine : sans voix au 1er tour, il n'y a pas de voix au 2nd tour !
modele <- lm(y ~ X - 1)
print(round(coef(modele), 3)) # XA=0.842 XB=0.133 XC=0.661 Les reports agrégés estimés !
print(round(fitted(modele), 1)) # 145.1 81.9 146.0 129.1
print(round(residuals(modele), 1)) # 1.9 0.1 -1.0 -1.1
print(round(summary(modele)$r.squared, 4)) # 0.99
Après calcul de l’équation normale \(\hat{\boldsymbol{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}\) :
Les valeurs prédites et les résidus sont :
| Bureau | \(y_i\) (observé) | \(\hat{y}_i\) (prédit) | \(\varepsilon_i = y_i - \hat{y}_i\) |
|---|---|---|---|
1 |
147 |
145,1 |
+1,9 |
2 |
82 |
81,9 |
+0,1 |
3 |
145 |
146,0 |
−1,0 |
4 |
128 |
129,1 |
−1,1 |
Le \(R^2 = 0{,}998\) : le modèle explique 99,8 % de la variance des voix A au 2nd tour. Les résidus sont faibles mais non nuls. Les MCO ont trouvé la solution qui minimise \(\sum_i \varepsilon_i^2 = 1{,}9^2 + 0{,}1^2 + 1{,}0^2 + 1{,}1^2 \approx 5{,}8\).
5.3. Estimation par MCO avec les données réelles : formulation multi-output
On cherche les coefficients du vecteur \(\beta\) de façon à rendre les erreurs les plus petites possibles, au sens de la somme des carrés. C’est-à-dire que l’on cherche à minimiser l’expression suivante :
avec :
| \(n\) |
nombre de bureaux de vote (ici \(n = 284\)) |
| \(\mathbf{x}_i\) |
vecteur ligne des \(11\) variables explicatives |
| \(\boldsymbol{\beta}\) |
vecteur des \(11\) paramètres à estimer \((\beta_0, \ldots, \beta_9, \gamma)\) |
La solution analytique est :
avec :
| \(\mathbf{X}\) |
matrice \(284 \times 11\) dont chaque ligne est le vecteur \(\mathbf{x}_i\) d’un bureau |
| \(\mathbf{y}\) |
vecteur \(284 \times 1\) des scores Piquemal au R2 |
| \(\mathbf{X}^\top \mathbf{X}\) |
matrice \(11 \times 11\) (inversible si les colonnes de \(\mathbf{X}\) sont linéairement indépendantes) |
| \(\mathbf{X}^\top \mathbf{y}\) |
vecteur \(11 \times 1\) des produits scalaires entre chaque variable explicative et \(\mathbf{y}\) |
6. Résultats de la régression — données réelles 2026
| Contrairement à la formulation initiale en pourcentages, l’estimation finale est réalisée sur les volumes de voix absolus. Les coefficients doivent donc être interprétés comme des flux agrégés et non comme des proportions strictes. |
6.1. Mise en œuvre
Le modèle a été estimé sur les 284 bureaux de vote de Toulouse (\(n = 284\), \(p = 11\) variables). Les variables explicatives sont les volumes de voix absolus au R1 (10 listes + non-votants R1). Le terme « non-votants R1 » joue un rôle analogue à \(\Delta\text{part}_i\) dans la formulation en pourcentages : il permet de capter la mobilisation différentielle entre les deux tours, en attribuant un coefficient aux électeurs qui n’avaient pas voté au 1er tour. Les variables dépendantes sont les volumes au R2 : voix Moudenc, voix Piquemal, non-votants R2.
6.2. Coefficients estimés
| Liste (1er tour) | → Moudenc | → Piquemal | → Abstention | Σ |
|---|---|---|---|---|
Briançon (PS) |
25 % |
67 % |
0 % |
92 % |
Moudenc (DVD) |
119 % |
−7 % |
−12 % |
100 % |
Piquemal (LFI) |
−4 % |
106 % |
−3 % |
100 % |
Leonardelli (RN) |
112 % |
−26 % |
+17 % |
103 % |
Meilhac |
81 % |
9 % |
+3 % |
93 % |
Scalli |
−64 % |
137 % |
+19 % |
— (instable) |
Adrada |
−11 % |
36 % |
+8 % |
— (instable) |
Menéndez |
−96 % |
85 % |
+70 % |
— (instable) |
Cottrel |
150 % |
−5 % |
−39 % |
— (instable) |
Pedinotti |
−10 % |
76 % |
+56 % |
— (instable) |
Non-votants (1er tour) |
1 % |
9 % |
91 % |
100 % |
| Les trois équations (Moudenc, Piquemal, abstention) sont estimées indépendamment sans contrainte de somme. Les coefficients peuvent donc ne pas totaliser 100 % (horreur), ce qui reflète une absence de contrainte de conservation des flux dans le modèle. Encore un fois, on peut refaire une étude analogue avec cette contrainte mais, intuition, les résultats finaux seraient similaires. |
6.3. Diagramme de Sankey des reports estimés
Terminons, par un joli diagramme de Sankey pour visualiser les flux de voix estimés par le modèle. Chaque ruban représente un flux de voix d’une liste du 1er tour vers un finaliste du 2nd tour ou vers l’abstention. La largeur de chaque ruban est proportionnelle au volume de voix transférées.
Les coefficients hors [0, 1] sont contraints pour la représentation : valeurs négatives ramenées à 0, sommes supérieures à 1 normalisées, résidu affecté à l’abstention. Les listes en gris ont des coefficients instables (faible volume de voix).
6.4. De la régression aux 27 % : calcul détaillé
Le chiffre "27 % des électeurs Briançon ont voté Moudenc" est la valeur clé de l’analyse. Voici comment on y arrive pas à pas.
6.4.1. Étape 1 : lire les deux coefficients bruts
Au second tour, chaque électeur du 1er tour fait face à exactement trois issues possibles : voter Moudenc, voter Piquemal, ou ne pas voter (abstention, blanc, nul). Pour couvrir les trois issues — et notamment estimer le comportement des nouveaux votants entre les deux tours — le modèle estime simultanément trois régressions sur les 284 bureaux, avec les mêmes 11 variables explicatives :
où \(a_i\) désigne le nombre de voix Briançon dans le bureau \(i\) au 1er tour.
On lit dans le tableau précédent :
| Source | Destination | Coefficient brut |
|---|---|---|
Briançon (1er tour) |
→ Moudenc (2nd tour) |
\(\hat{\beta}^{M}_{\text{Br}} = 0{,}247\) |
Briançon (1er tour) |
→ Piquemal (2nd tour) |
\(\hat{\beta}^{P}_{\text{Br}} = 0{,}674\) |
Interprétation directe : pour chaque voix Briançon au 1er tour dans un bureau, le modèle estime que \(0{,}247\) vote va vers Moudenc et \(0{,}674\) vote va vers Piquemal. Les \(1 - 0{,}247 - 0{,}674 = 0{,}079 \approx 8\,\%\) restants correspondent aux blancs, nuls et au résidu du modèle.
6.4.2. Étape 2 : normaliser pour obtenir un pourcentage entre finalistes
Les deux coefficients bruts ne somment pas à 1 (ils somment à \(0{,}247 + 0{,}674 = 0{,}921\)). Pour exprimer la part de chaque finaliste parmi ceux des électeurs Briançon qui ont effectivement voté au 2nd tour, on normalise :
| Le 27 % affiché dans l’application est cette valeur normalisée. Les \(1 - 0{,}247 - 0{,}674 = 0{,}079 \approx 8\,\%\) restants représentent la part non ventilée entre les deux finalistes — résidu du modèle et comportements non captés (blancs, nuls, variation d’abstention). Ce résidu ne doit pas être interprété comme un flux identifié vers l’abstention. De même pour les 27 %. |
6.5. Les 94 % de mobilisation en faveur de Piquemal : calcul détaillé
Entre les deux tours, la participation a progressé de +17 017 votants (56,5 % vers 62,6 %). Ces nouveaux votants proviennent nécessairement des non-votants du 1er tour. On applique la même normalisation qu’à l’étape 2 ci-dessus, mais cette fois sur la ligne Non-votants R1 du tableau des coefficients.
6.5.1. Étape 1 — lire les coefficients bruts
| Source | Destination | Coefficient brut |
|---|---|---|
Non-votants R1 |
→ Moudenc (2nd tour) |
\(\hat{\beta}^{M}_{\text{NV}} = 0{,}006\) |
Non-votants R1 |
→ Piquemal (2nd tour) |
\(\hat{\beta}^{P}_{\text{NV}} = 0{,}085\) |
Le coefficient \(\hat{\beta}^{P}_{\text{NV}} = 0{,}085\) signifie : pour chaque non-votant au 1er tour dans un bureau, le modèle estime que \(0{,}085\) vote va vers Piquemal au 2nd tour. Les \(0{,}914\) restants correspondent aux non-votants R1 qui restent non-votants au R2 (coefficient \(\hat{\beta}^{A}_{\text{NV}} = 0{,}914\)).
6.5.2. Étape 2 — normaliser entre les deux finalistes
On ne garde que ceux qui ont effectivement voté au 2nd tour, en normalisant comme pour Briançon :
| Cette estimation repose sur une approximation : le coefficient MCO décrit le comportement moyen de l’ensemble des 122 377 non-votants R1, et on l’applique ici au sous-ensemble des 17 017 qui ont effectivement voté au R2. L’hypothèse implicite est que ce sous-ensemble se comporte comme la moyenne. Ce qui est raisonnable mais non garanti. |
6.6. Qualité d’ajustement
| Variable dépendante | \(R^2\) |
|---|---|
Voix Moudenc (2nd tour) |
0,9984 |
Voix Piquemal (2nd tour) |
0,9982 |
Non-votants (2nd tour) |
0,9988 |
Les \(R^2\) sont excellents (≥ 0,984).
| Dans les régressions écologiques inter-tours, des valeurs élevées de \(R^2\) sont en partie mécaniques (forte corrélation géographique entre tours) et ne garantissent pas à elles seules la validité des coefficients de report. |
6.7. Tentative d’interprétation
| Piquemal (LFI) |
\(\approx 100\,\%\) de fidélité vers l’union, la fusion côté LFI a fonctionné. |
| Briançon (PS) |
\(73\,\%\) vers Piquemal, \(27\,\%\) vers Moudenc, fuite notable du PS. |
| Moudenc (DVD) |
\(\approx 100\,\%\) de fidélité vers Moudenc. |
| Leonardelli (RN) |
\(\approx 100\,\%\) vers Moudenc. Report quasi-total de l’électorat RN vers la droite. |
| Meilhac |
\(90\,\%\) Moudenc, \(10\,\%\) Piquemal. |
| Non-votants R1 |
\(91\,\%\) restent abstenants au R2. Comme vu, selon le modèle, les 9 % qui se mobilisent au R2 voteraient à 94 % pour Piquemal et à 6 % pour Moudenc. |
| Petites listes |
coefficients hors \([0,1]\) — instabilité numérique due au faible nombre de voix. Non interprétables. |
6.8. Utilisation dans le simulateur
Les coefficients des listes robustes (Briançon, Moudenc, Piquemal, Leonardelli, Meilhac) sont utilisés comme valeurs par défaut des curseurs du simulateur de report intégré à la carte. Les petites listes conservent une valeur par défaut de 50 %.
7. Limite fondamentale : l’inférence écologique
L'ecological fallacy (paradoxe de Robinson, 1950) désigne l’erreur qui consiste à inférer un comportement individuel à partir de corrélations agrégées.
Exemple : si les bureaux où Leonardelli est fort au 1er tour montrent un score Moudenc plus élevé au 2nd tour, cela ne prouve pas que les électeurs Leonardelli individuellement ont voté Moudenc. Un troisième facteur géographique pourrait expliquer les deux.
Ce que le modèle dit : les \(\beta_k\) sont des estimations de reports moyens agrégés, valides sous hypothèse forte d’homogénéité du comportement entre bureaux. En présence d’hétérogénéité non observée, ils peuvent être biaisés (ecological fallacy).
Avec 284 bureaux couvrant des géographies très diverses (centre, périphérie nord, Mirail, quartiers résidentiels), l’hypothèse d’homogénéité me semble raisonnablement satisfaite.
8. Données de référence
8.1. Résultats du 1er tour — 15 mars 2026
-
Inscrits : 281 354
-
Votants : 158 977 (participation : 56,5 %)
-
Exprimés : 157 021
| Liste | Voix | % exprimés |
|---|---|---|
Moudenc (DVD) |
58 462 |
37,2 % |
Piquemal (LFI) |
43 274 |
27,6 % |
Briançon (PS) |
39 245 |
25,0 % |
Leonardelli (RN) |
8 447 |
5,4 % |
Meilhac |
2 648 |
1,7 % |
Cottrel |
1 953 |
1,2 % |
Pedinotti |
1 611 |
1,0 % |
Adrada |
653 |
0,4 % |
Scalli |
438 |
0,3 % |
Menéndez |
290 |
0,2 % |
8.2. Résultats du 2nd tour — 22 mars 2026
-
Inscrits : 281 355
-
Votants : 175 994 (participation : 62,6 %)
-
Exprimés : 171 073
| Liste | Voix | % exprimés | Bureaux en tête |
|---|---|---|---|
Moudenc (DVD) |
92 151 |
53,9 % |
160 BV |
Piquemal / Briançon (Union gauche) |
78 922 |
46,1 % |
124 BV |
Moudenc est réélu maire de Toulouse avec 53,9 % des exprimés. La participation a progressé de +6,1 points par rapport au 1er tour (56,5 % → 62,6 %), soit +17 017 votants supplémentaires en valeur absolue.
8.3. Reproduire l’estimation
Les données et le code sont disponibles pour reproduire l’estimation :
-
X_bureaux_R1.csv — matrice des variables explicatives (284 bureaux × 11 colonnes : voix R1 par liste + non-votants R1)
-
Y_bureaux_R2.csv — matrice des variables dépendantes (284 bureaux × 3 colonnes : voix Moudenc, Piquemal, non-votants R2)
Le script R suivant reproduit l’estimation à partir de ces deux fichiers :
#!/usr/bin/env Rscript
# MCO-elections-toulouse.R
# Régression écologique MCO multi-output — Toulouse Municipales 2026
#
# Usage : Rscript notes/MCO-elections-toulouse.R (depuis la racine du dépôt)
# Rscript MCO-elections-toulouse.R (depuis notes/)
# ── Lire les données ──────────────────────────────────────────────────────────
# X : variables explicatives — voix R1 par liste + non-votants R1 (284 bureaux × 11 colonnes)
# Y : variables dépendantes — voix R2 Moudenc, Piquemal, non-votants (284 bureaux × 3 colonnes)
X <- as.matrix(read.csv("notes/X_bureaux_R1.csv", row.names = 1)[, -1])
Y <- as.matrix(read.csv("notes/Y_bureaux_R2.csv", row.names = 1)[, -1])
# ── Régression MCO sans constante ─────────────────────────────────────────────
# Le -1 supprime l'ordonnée à l'origine (équivalent de numpy.linalg.lstsq)
# Y peut avoir plusieurs colonnes : lm() estime une équation par colonne
fit <- lm(Y ~ X - 1)
# ── Résultats : coefficients en pourcentages ──────────────────────────────────
# coef(fit) renvoie une matrice (11 variables × 3 équations)
# On multiplie par 100 pour lire des pourcentages de report
beta <- coef(fit)
rownames(beta) <- colnames(X) # lm() préfixe "X" automatiquement, on corrige
print(round(beta * 100, 1))
9. Références
-
Wikipédia FR — Inférence écologique : https://fr.wikipedia.org/wiki/Inf%C3%A9rence_%C3%A9cologique
-
ENSAE — Reports de votes entre les deux tours d’une élection présidentielle : https://www.ensae.org/global/gene/link.php?doc_id=1279
-
HAL SHS — Analyse écologique, modèles multi-niveaux et sociologie électorale : https://shs.hal.science/halshs-00422081/document