Canada’s electoral encyclopedia

How PoliCan’s MMP simulator does its calculations

by Maurice Y. Michaud (he/him)

Mathematical symbolsThe PoliCan MMP simulator does not purport that the results of the general elections that you can run through it would have been exactly as shown. These simulations are based on the assumption that each party would have received the same number of votes as they did in an election held in the first-past-the-post method. It is known, however, that voter behaviour would be dif­fer­ent if strategic voting were eliminated, like it would be in a proportional system. PoliCan also recognizes that the proportional single transferable vote system (STV) would achieve better proportionality. However, MMP was selected because it is impossible to develop a simulator of how a past election might have worked under an STV system because voters did not rank candidates during those elections. Both the quota and the transfer value could be calculated, but in the ab­sence of ranked choices beyond the first choice, that transfer value could not be applied.

The consensus in Canada and Québec has been that the number of seats in each assembly should remain the same or only increase a little bit in a PR system. That is not always the case in such systems. In Germany, for instance, there can be “overhang seats” to ac­com­mo­date over­performing parties in the local round yet achieve near-perfect overall proportionality through the regional rounds. Instead, this simulator is based on the Scottish formula, which achieves much-closer rather than near-perfect proportionality, the underlying idea being that any proportional system would be better than the current FPTP system. Running a few simulations should convince you of that.
 

The “Scottish formula” and the PoliCan MMP simulator, explained

The D’Hondt method is at the base of the Scottish formula used for this simulator. Where the Scottish formula differs from D’Hondt is in the starting point, namely in the number of seats attributed to each party.

In the pure D’Hondt method, each party begins with no seat, which gives the initial divider (or denominator) the value of 1. For the Scot­tish Parliament, people are given two ballots: one to elect their local or “constituency” member by the first-past-the-post system, and one to elect their “additional” or regional member based on party preference from a closed list of candidates. That is why we call such a system “mixed member”: there is a mix of two types of MLAs or MPs, and there is a mix of two counting methods. The D’Hondt method is only applied to the regional ballots but takes into account the seats won by FPTP. So if Party A won 64 FPTP seats and Party B won 31, their initial dividers when entering the first round would be 65 and 32.

Had Québec gone ahead with its proposed reform of 2019, it, too, would have modified D’Hondt to take into account the seats won. However, it would have divided that number by 2 before the +1 required to prevent a division by zero error. So if Party A had won 64 FPTP seats and Party B had won 31, their initial dividers when entering the first round would been 33 (that’s clear) and 17 (not as clear on first glance until one realizes that any remainder would have been rounded to the next whole number before applying the +1.) In addition to suggesting too many regions, the proposed system was designed to minimize instances of minority goverments and would not have been as “compensatory” as the public was told.

The most common alternative to the D’Hondt method is the Sainte-Laguë method, which is used in Germany and New Zealand, among other countries. It functions much like D’Hondt except that the initial denominator is set to 1 (but 0.7 in Norway and 0.6 in Sweden) and then incremented by 2. You will notice that, if you choose a country’s settings instead of customizing the ratio and the threshold, and that country happens to be using the Sainte-Laguë method, the simulator will adapt its calculations accordingly.

To help reach proportionality, it is best that there be more compensatory seats so that the formula can be applied more often. The simulator stops the assignments once the available seats have all been assigned, even if proportionality has not been reached, as that is how systems proposed in Canada would have worked. These systems considered a ratio of 67:33, or thereabouts, and were projected to achieve much-closer pro­por­tion­a­lity and not allowing overhang seats. The simulator espouses this idea and its default ratio is also 67:33, but that ratio can be adjusted to 50:50, 55:65, or from 60:40 to 75:25. It sets the ratio of 0:100 for countries where all seats are attributed proportionally.

One unintended consequence of applying the D’Hondt formula often is that the quo­tients for each party could get low enough to allow a marginal party to win a seat during one of the last rounds. Therefore, it is common to set a threshold percentage of votes for the entire juris­dic­tion — anywhere from 2% to 5% — in order for a party to qualify for compensatory seats. Some countries also set a higher threshold for parties that run together as a coalition, but the simulator does not permit grouping parties as if they were one... at least, not yet.

The simulator’s default setting is 5%, but it can be changed to as low as 2% or as high as 10%. It also offers alternate thresholds, namely winning a given number of local seats without con­sid­er­a­tion of the per­cent­age of votes in the jurisdiction, or winning a given number of local seats as well as reaching a certain percentage in the jurisdiction, which sets the bar higher.
 

Qualifying for regional (or compensatory) seats

As an example, let’s take the 2021 federal general election, in which the Liberal Party won a second consecutive minority government, and let’s assume that a party must obtain 5% of the votes nationwide to qualify for regional seats. Banners (or non-parties) and independent can­di­dates are always excluded from consideration. The number of votes will be the numerator for parties that qualify.

LPC CPC BQ NDP GPC PPC IND Notes
Votes 32.51%
5,537,638
33.70%
5,740,074
7.64%
1,301,615
17.74%
3,022,328
2.33%
396,988
4.94%
840,993
0.43%
72,828
100%*
17,034,243*
Qualified ✓ = 4
* Including minor parties and banners not displayed in this table.

It is worth noting how far the Green Party was from reaching the 5% threshold given that it had surpassed it by 1.54% in the 2019 federal election. But also noteworthy is how the People’s Party came only 0.06% short. If we were to change the threshold to 4.5%, the PPC could have obtained as many as 17 regional seats, mostly at the expense of both the Liberals and the Conservatives.
 

The local (or constituency) seats

The results (or the “data”) was the product of FPTP elections. However, since the simulator must not fabricate data, it assumes that each party would have received the same number of votes, even though it has been demonstrated that the electoral system can influence voter behaviour. Still, assuming a 67:33 ratio of local to regional seats, the number of local seats could be projected to have been as follows:

LPC CPC BQ NDP GPC PPC IND Notes
Real seats 159
47.04%
119
35.21%
32
9.47%
25
7.40%
2
0.59%
0
0.00%
1
0.30%
= 338
1 = 0.39%
Local seats 107
159 × 67%
80
119 × 67%
21
32 × 67%
17
25 × 67%
1
2 × 67%
0
0 × 67%
1
1 × 67%
= 227
338 × 67%
Regional seats ?
?
?
?
0
0
0
= 111
338 × 33%
The percentage of seats won is under the number of real seats.

It should be noted that when parties that did not qualify for regional seats have won local seats, or when parties that did qualify overperformed locally, the number of rounds for regional seats is clamped back because the simulator does not allow overhang seats.
 

The initial divider (or denominator)

The numerator is the number of votes the party received, while the initial divider (or denominator) is set as:

Lp + 1 =  Qp1 

where L is the number of local seats won.

LPC CPC BQ NDP GPC PPC IND Notes
Qualified ✓ = 4
Local seats 107 80 21 17 1 0 1 = 227
Numerator 5,537,638 5,740,074 1,301,615 3,022,328 396,988 840,993 72,828
Initial divider 108 81 22 18 —— —— ——

The divider for the party winning the first seat is incremented by 1 before proceeding to the next round, while the other parties’ dividers do not change. There are as many rounds as there are seats to allocate, with the divider for only the party winning a given round being incremented by 1.
 

Allocating the regional seats

The calculation has to be done for each qualified party, as many times as there are regional seats to allocate. Therefore, the first round would look like this:

Round
1 / 111
Party LPC CPC BQ NDP GPC PPC IND
Division 5,537,638 ÷ 108 5,740,074 ÷ 81 1,301,615 ÷ 22 3,022,328 ÷ 18 396,988 ÷ —— 840,993 ÷ —— 72,828 ÷ ——  NDP 
Result 51,274 70,865 59,164 167,907 —— —— ——

Because the quotient (or result) for the NDP is the highest, it would get the first regional seat, and its divider would then get incremented like this before the next round:

p =  NDP , Qp + 1 =  Qp , 18 + 1 = 19

The dividers for the other qualified parties would remain unchanged. The calculation would then be redone 110 times, with the party winning each round having its divider incremented by 1 before the next round, while the others’ would not change.

Round
2 / 111
Party LPC CPC BQ NDP GPC PPC IND
Division 5,537,638 ÷ 108 5,740,074 ÷ 81 1,301,615 ÷ 22 3,022,328 ÷ 19 396,988 ÷ —— 840,993 ÷ —— 72,828 ÷ ——  NDP 
Result 51,274 70,865 59,164 159,070 —— —— ——
p =  NDP Qp + 1 =  Qp  → 19 + 1 = 20
. . . . .
Round
26 / 111
Party LPC CPC BQ NDP GPC PPC IND
Division 5,537,638 ÷ 108 5,740,074 ÷ 81 1,301,615 ÷ 22 3,022,328 ÷ 43 396,988 ÷ —— 840,993 ÷ —— 72,828 ÷ ——  CPC 
Result 51,274 70,865 59,164 70,287 —— —— ——
p =  CPC Qp + 1 =  Qp  → 81 + 1 = 82
. . . . .
Round
52 / 111
Party LPC CPC BQ NDP GPC PPC IND
Division 5,537,638 ÷ 108 5,740,074 ÷ 98 1,301,615 ÷ 22 3,022,328 ÷ 52 396,988 ÷ —— 840,993 ÷ —— 72,828 ÷ ——  BQ 
Result 51,274 58,572 59,164 58,122 —— —— ——
p =  BQ Qp + 1 =  Qp  → 22 + 1 = 23
. . . . .
Round
77 / 111
Party LPC CPC BQ NDP GPC PPC IND
Division 5,537,638 ÷ 108 5,740,074 ÷ 112 1,301,615 ÷ 26 3,022,328 ÷ 59 396,988 ÷ —— 840,993 ÷ —— 72,828 ÷ ——  LPC 
Result 51,274 51,251 50,062 51,226 —— —— ——
p =  LPC Qp + 1 =  Qp  → 108 + 1 = 109
. . . . .
Round
111 / 111
Party LPC CPC BQ NDP GPC PPC IND
Division 5,537,638 ÷ 120 5,740,074 ÷ 124 1,301,615 ÷ 29 3,022,328 ÷ 66 396,988 ÷ —— 840,993 ÷ —— 72,828 ÷ ——  CPC 
Result 46,147 46,291 44,883 45,793 —— —— ——
p =  CPC  final
Gains 12 44 7 48 0 0 0 111

Summing it all up

The simulator figures all of this out as soon as you click on the “Simulate” button. Step 4 is more about the simulator showing its work. However, the summary at the beginning of that step reveals how the gap between the vote and seat percentages would be drastically reduced for qualified parties, especially those that underperformed locally, and how voters would almost never end up with the “wrong winner” forming government. In this example, it would read as follows:

Parliament 44 — 20 Sep 2021 – 27 Apr 2025
Canada LPC CPC BQ NDP GPC PPC IND Notes
Votes 5,537,638
32.51%
5,740,074
33.70%
1,301,615
7.64%
3,022,328
17.74%
396,988
2.33%
840,993
4.94%
72,828
0.43%
= 16,912,464*
100.00%
Real seats 159
47.04%
119
35.21%
32
9.47%
25
7.40%
2
0.59%
0
0.00%
0
0.00%
= 338
1 = 0.30%
Constituency 107 80 21 17 1 0 1 = 227 = 67%
Compensatory 12 44 7 48 0 0 0 = 111 = 33%
Simulated seats 119
35.21%
124
36.69%
28
8.28%
65
19.23%
1
0.30%
0
0.00%
1
0.30%
= 338
1 = 0.30%
* Only the votes considered for these calculations.
The Conservatives, not the Liberals, would have formed a minority government, although a much weaker one than the Liberals formed. And a much stronger NDP would likely have entered into its supply and confidence agreement or a formal coalition with the Liberals very soon after the election to prevent the Conservatives from forming government.

But there’s a “BUT”...

Indeed, there’s a BUT, because that’s not exactly how a mixed member proportional system would be designed.

In this example, the simulator merely looked at the seats ratio and the threshold for compensation, and applied those settings to the entire juris­diction. BUT in reality, a jurisdiction would be divided into regions. For example, Alberta might be divided into Greater Calgary, Greater Edmonton, and the rest of the province, while Manitoba might have a region for Greater Winnipeg and another for all points elsewhere. The simulator does its rounds of calculations by region. In the example presented here, it might do a set of x rounds for the first region, another set of y rounds for the next region, and so on, until it has looped through all the regions.

There could be several regional schemes at the federal level. Canada could simply be divided by its provinces and territories, which some would deem an “equal” approach. But a more equitable approach that would lead to fairer regional proportionality would be to cluster some provinces (New Bruns­wick, Nova Scotia, Prince Edward Island, and Newfoundland and Labrador as Atlantic, Manitoba and Saskatchewan as Prairies, and the terri­tories as North), with Alberta and British Columbia each forming a region but Ontario and Québec being divided into three and two regions. This approach is deemed more equitable for the regions even if it generally reduces overall proportionality. BUT this presentation made it seem as if all of Canada represented only one large region.

There ends the “BUT.” Although the simulator defaults to a regional scheme (except for Prince Edward Island and the Yukon), it still begins by identifying the parties that qualify for regional seats, and then it determines the local and regional seats one region at a time. It was simply easier to explain how the simulator does its calculation without referring right away to the fact that it loops through by regions. And you can still ask it not to apply a regional scheme if you’re curious to see what difference it makes. In fact, not applying a regional scheme — that is, looping through a single, continuous stream of calculations — would almost always achieve near-perfect proportionality. However, given that no PR system proposed in Canada (except PEI) was designed like that, running the simulator in this manner is merely an academic exercise, scarcely better than a cross multiplication, with the only advantage being the ability to set a minimal threshold.

So, with that regional twist in mind, it means that had the Green Party qualified in this election, its regional seats would likely have been in British Columbia rather than in the Prairies or Québec. But like in all MMP systems proposed for Canadian jurisdictions, the simulator stops assigning regional seats once the quota is filled, even if proportionality has not yet been reached. That is why having too many small regions blunts the effectiveness of this exercise, for although it would somewhat diminish the gap between the per­cent­ages of votes and seats, it would barely achieve much-closer proportionality.

Still! Wouldn’t that be much better than what the first-past-the-post system gives us?

So go ahead! Go play with the simulator.



© 2005, 2025 :: PoliCan.ca (Maurice Y. Michaud)
Pub.: 24 May 2025 12:10
Rev.: 27 Jul 2025 12:05