Skip to content

CLMP - 2025 simulation

Introduction

This simulation was built on publicly available data for the 2025 Canadian Federal Election (preliminary results as of the morning of 2025-Apr-29) that is assumed to be accurate. Since this is a solo project there is a high likelihood of minor mistakes. I do not feel any are serious enough to cause any fundamental problems with the simulation that would invalidate the basic fundamentals of how the system works when applied to a real scenario.

The 2025 Federal election was one that broadly delivered the minority government that Canadians seemed to want. It does not feature very major distortions between the vote share of the parties and the number of seats they won.

However it still had the bizarre situation of

  • Having large swaths of the country represented by only one party even though that is not representative of the voters in the regions.
  • The NDP and Bloc getting pretty much the same vote share but wildly different resulting seats.

Making the simulation work

Data Sources

  • Overall results breakdown is preliminary and from Elections Canada as of 2025-Apr-29 which are preliminary. I will not be updating to the final results as the preliminary results are very close to final and the demonstration purpose is fulfilled.1

Points to note

  • The seat calculations are done at both the provincial and federal levels to show how the two different options would work.
  • A party is eligible for regional seats if they get 5% of the vote at the federal level OR only in provinces where they get 5% of the vote.
  • I assumed no vote splitting, that is to say that a vote for a party candidate would also be a vote for the party. This is the most reasonable option from a simulation perspective and also serves to demonstrate how a 'one vote PR' system would work where a single ballot vote for a candidate would also be considered to be a vote for the party. While this removes one of the more attractive features of MMP, it does prevent gaming the system through the use of 'decoy lists', though CLMP has other safeguards against this.2

Additional seats by province

Province # of riding seats regional seats (30% rounded up) total
Newfoundland 7 3 10
Nova Scotia 11 5 16
Prince Edward Island 4 2 6
New Brunswick 10 5 15
Quebec 78 34 112
Ontario 122 53 175
Manitoba 14 6 20
Saskatchewan 14 6 20
Alberta 37 16 53
British Columbia 43 19 62
Yukon 1 1 2
NorthWest Territories 1 1 2
Nunavut 1 1 2
Total 343 152 495

Calculations

Federal Level calculation

Table of FPTP district/riding level results by party

Party Vote percentage Seats Seats percentage Meet Threshold of 5%?
Lib 43.5 168 48.98 TRUE
Con 41.4 144 41.98 TRUE
NDP 6.3 7 2.04 TRUE
BQ 6.4 23 6.71 TRUE
Green 1.2 1 0.29 FALSE

The results in 2025 were fairly proportional outside of the inefficiency of the NDP vote. I have also added a column to note if the party has passed the 5% threshold or not as that matters to the subsequent calculations.

Base Calculations

  • PEVP is calculated as 32.6+33.7+17.8+7.6+2.3 = 97.6
  • PES is calculated as 343+152-1 = 494

Table of FPTP results plus proportional calculations

Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 43.5 168 48.98 TRUE 220.1741803 52.17418033 52 52 220 44.44444444
Con 41.4 144 41.98 TRUE 209.545082 65.54508197 66 66 210 42.42424242
NDP 6.3 7 2.04 TRUE 31.88729508 24.88729508 25 25 32 6.464646465
BQ 6.4 23 6.71 TRUE 32.39344262 9.393442623 9 9 32 6.464646465
Green 1.2 1 0.29 FALSE 1 0 0 0 1 0.202020202

Gallagher Index comparison

The Gallagher Index is a simple measure of how proportional an election outcome is, with a lower index meaning more proportional.

The 2025 election results have a Gallagher Index of 5.25, under CLMP it would be 2.09.

Provincial Level calculation

Newfoundland and Labrador

  • PEVP is calculated as 99.4
  • PES is calculated as 10
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 54.3 5 71.43 TRUE 5.46277666 0.46277666 0 0 5 50
Con 39.6 2 28.57 TRUE 3.983903421 1.983903421 2 2 4 40
NDP 5.5 0 0 TRUE 0.55331992 0.55331992 1 1 1 10
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 0 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 14.9 to 4.43

Nova Scotia

  • PEVP is calculated as 97.6
  • PES is calculated as 16
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 57 10 90.91 TRUE 9.344262295 -0.655737705 0 0 10 62.5
Con 35.4 1 9.09 TRUE 5.803278689 4.803278689 5 4 5 31.25
NDP 5.2 0 0 TRUE 0.852459016 0.852459016 1 1 1 6.25
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 0.9 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 30.6 to 5.25

Prince Edward Island

  • PEVP is calculated as 96.9
  • PES is calculated as 6
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 57.3 4 100 TRUE 3.547987616 -0.452012384 0 0 4 66.66666667
Con 37.1 0 0 TRUE 2.297213622 2.297213622 2 2 2 33.33333333
NDP 2.5 0 0 TRUE 0.154798762 0.154798762 0 0 0 0
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 2.2 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 40.1 to 7.83

New Brunswick

  • PEVP is calculated as 97.2
  • PES is calculated as 15
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 53.3 6 60 TRUE 8.225308642 2.225308642 2 2 8 53.33333333
Con 41 4 40 TRUE 6.327160494 2.327160494 2 3 7 46.66666667
NDP 2.9 0 0 TRUE 0.447530864 0.447530864 0 0 0 0
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 1.7 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 5.7 to 5.06

Quebec

  • PEVP is calculated as 98.1
  • PES is calculated as 112
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 42.5 43 55.13 TRUE 48.52191641 5.521916412 6 5 48 42.85714286
Con 23.4 11 14.1 TRUE 26.71559633 15.71559633 16 16 27 24.10714286
NDP 4.4 1 1.28 TRUE 5.023445464 4.023445464 4 4 5 4.464285714
BQ 27.8 23 29.49 TRUE 31.73904179 8.739041794 9 9 32 28.57142857
Green 1.7 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 11.5 to 1.97

Ontario

  • PEVP is calculated as 97.7
  • PES is calculated as 175
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 48.8 69 56.56 TRUE 87.41044012 18.41044012 18 18 87 49.71428571
Con 44 53 43.44 TRUE 78.81269191 25.81269191 26 26 79 45.14285714
NDP 4.9 0 0 TRUE 8.776867963 8.776867963 9 9 9 5.142857143
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 1.2 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 6.76 to 2.11

Manitoba

  • PEVP is calculated as 98.2
  • PES is calculated as 20
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 40.6 6 42.86 TRUE 8.268839104 2.268839104 2 2 8 40
Con 46.6 7 50 TRUE 9.490835031 2.490835031 2 3 10 50
NDP 11 1 7.14 TRUE 2.240325866 1.240325866 1 1 2 10
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 0.7 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 4.2 to 2.89

Saskatchewan

  • PEVP is calculated as 98.7
  • PES is calculated as 20
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 26.5 1 7.14 TRUE 5.369807497 4.369807497 4 4 5 25
Con 64.7 13 92.86 TRUE 13.11043566 0.110435664 0 0 13 65
NDP 7.5 0 0 TRUE 1.519756839 1.519756839 2 2 2 10
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 0.6 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 24.8 to 2.31

Alberta

  • PEVP is calculated as 97.6
  • PES is calculated as 53
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 27.8 2 5.41 TRUE 15.09631148 13.09631148 13 13 15 28.30188679
Con 63.6 34 91.89 TRUE 34.53688525 0.536885246 1 1 35 66.03773585
NDP 6.2 1 2.7 TRUE 3.366803279 2.366803279 2 2 3 5.660377358
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 0.4 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 25.7 to 2.49

British Columbia

  • PEVP is calculated as 95.7
  • PES is calculated as 61
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 41.6 20 46.51 TRUE 26.51619645 6.516196447 7 7 27 43.5483871
Con 41.1 19 44.19 TRUE 26.19749216 7.197492163 7 7 26 41.93548387
NDP 13 3 6.98 TRUE 8.28631139 5.28631139 5 5 8 12.90322581
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 3 1 2.33 FALSE 1 0 0 0 1 1.612903226
  • Gallagher Index goes from 6.66 to 3.52

Yukon

  • PEVP is calculated as 97.9
  • PES is calculated as 2
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 52.8 1 100 TRUE 1.078651685 0.078651685 0 0 1 50
Con 38.7 0 0 TRUE 0.790602656 0.790602656 1 1 1 50
NDP 6.4 0 0 TRUE 0.130745659 0.130745659 0 0 0 0
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 0 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 43.4 to 9.51

Northwest Territories

  • PEVP is calculated as 99
  • PES is calculated as 2
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 53.8 1 100 TRUE 1.086868687 0.086868687 0 0 1 50
Con 33.1 0 0 TRUE 0.668686869 0.668686869 1 1 1 50
NDP 12.1 0 0 TRUE 0.244444444 0.244444444 0 0 0 0
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 1 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 41.1 to 14.97

Nunavut

  • PEVP is calculated as 99.0
  • PES is calculated as 2
Party Vote percentage Seats Seats percentage Meet Threshold of 5%? Should have total seats Difference between Should have seats and locally elected seats Regional Seats (Rounded) Modification if needed Final Seats Final Percent
Lib 36.6 0 0 TRUE 0.732732733 0.732732733 1 1 1 50
Con 26 0 0 TRUE 0.520520521 0.520520521 1 0 0 0
NDP 37.3 1 100 TRUE 0.746746747 -0.253253253 0 0 1 50
BQ 0 0 0 TRUE 0 0 0 0 0 0
Green 0 0 0 FALSE 0 0 0 0 0 0
  • Gallagher Index goes from 54.5 to 22.55

Assessing Federal vs Provincial Level Calculation

The following is the overall picture of how many seats each party gets from a federal perspective when all the provincial CLMP results are totalled up.

Party NF NS PEI NB QB ON MB SK AB BC YK NWT NU Total Seat % Vote %
Lib 5 10 4 8 48 87 8 5 15 27 1 1 1 221 44.55645161 43.5
Con 4 5 2 7 27 79 10 13 35 26 1 1 0 210 42.33870968 41.4
NDP 1 1 0 0 5 9 2 2 3 8 0 0 1 32 6.451612903 6.3
BQ 0 0 0 0 32 0 0 0 0 0 0 0 0 32 6.451612903 6.4
Green 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0.201612903 1.2

Comparing it to the federal level calculation we can see that it is identical. As such, this simulation at least, points towards the province level calculations being a better choice as in this example they did not give up any proportionality at all while increasing the tie of the proportional candidates elected to the province they were competing in. As an example a NDP candidate will get chosen in Newfoundland here which might not have been the case if calculation is only done on the federal level.

Final thoughts

While the 2025 election was overall very proportional, looking at the party level and regional level breakdowns shows significant distortions remain which is a bug of all Winner Take All systems like FPTP and Winner Take All Ranked Ballot (otherwise known as IRV or Justin Trudeau's favourite system).

For example:

This plus the volatility of the resulting parliament, where the incentive for the Liberal and Conservative party to force an election the moment they sense weakness in the other and an opportunity to gain a false majority, are incredibly unhealthy aspects of Canadian democracy. Proportionality doesn't fix everything, but it does fix these.

This site was built on the land of the Anishinabewaki, Haudenosaunee, Attiwonderonk, and Mississaugas of the Credit First Nation. #LandBack.