Simulating Canadian elections: where the chances come from
Abstract. The Canada seat ranges, majority chances, official-party-status chances and riding chances come from 2,000 simulated elections with error at three levels: a national error per party the size of its past final-poll miss, scaled to its size now; a regional error fitted on past departures from national swing, smaller where regional polls exist; and riding noise fitted so past replays would have missed as many ridings as they did. National errors are shared by every riding and regional errors by every riding in a region, so ridings fall together.
Summary
The seat ranges, the chances of a majority and of official party status, and every riding's chances on the Canada pages come from 2,000 simulated elections. Each run adds error at three levels. Nationally, every party's share moves by a random error the size of its typical final-poll miss since 2000, scaled to its size now. Regionally, each party's share in each of the seven regions moves by a further error fitted on how far regions have strayed from national swing, smaller where regional polls exist. In each riding, each party moves again by an error fitted so that past replays would have missed as many ridings as they did. The full seat engine is then run, and every output is a count across the runs.
The three levels give the errors a structure. A national error is shared by every riding in the country, a regional error by every riding in its region, and only the riding noise is local, so ridings in the same region tend to fall together, as they do at real elections. Today, with the Liberals seventeen points ahead in the poll average, the simulation gives a Liberal majority in every one of the 2,000 runs (shown as "over 99%"), the NDP a 52% chance of the twelve seats needed for official party status and the Bloc 89%. The polling-day simulation, which adds the drift expected over the three years to the fixed date, is much less certain.
From a best estimate to a chance
Our projection is a single set of national shares (How we read Canadian polls: the average, the correction and its test) and a single House worked out from it (From national polls to 343 ridings: regions, Quebec and the swing model). A reader will want to know how sure we are: how likely the Liberal majority is to survive a normal polling miss, whether the NDP could win back official party status, and which ridings could go either way. The simulation answers by pushing a model of how wrong the projection might be through the seat engine many times. It is CanadaForecast.Simulate in the code, and every run uses the same engine as the projection: regions, uniform swing from 2025 and the plurality rule in all 343 ridings.
The random number generator has a fixed seed (2029 for today's simulation, 2030 for polling day), so the same polls always give the same chances. A change in a published chance reflects a change in the polls or the data, never a different draw.
One run, step by step
- National error. Each of the six modelled parties and "others" gets its own random error, drawn from a normal distribution centred on zero.
- Regions. The new national shares are spread over the seven regions in proportion to today's regional pattern.
- Regional error. Each party's share in each region gets a further random error, and each region is rescaled to 100.
- Ridings. Every riding's 2025 result is moved by its region's change, by uniform swing.
- Riding noise. Each party's share in each riding gets a last random error, and the party with the largest share wins.
- Count. Seats by party and province, the largest party, majorities, pairs of parties reaching 172, and parties with 12 seats or more are recorded.
National error
The draw
Let \(\text{RMS}_p\) be the root mean square of party \(p\)'s final-poll errors at the nine elections from 2000 (How far Canadian polls have missed, 1988–2025), \(m_p\) its average share of the vote at those elections, and \(S_p\) its projected share today. The standard deviation of its national error is
The square-root scaling reflects the fact that polling error grows with a party's size, but less than in proportion: a party polling twice its usual share is not missed by twice as much. The clip keeps the scaling within sensible bounds for a party far from its usual size. "Others", which have no record, get \(\sigma = 0.3 + 0.12\,S\).
In run \(r\) the simulated national share is
drawn independently for each party. The shares are not forced back to 100 nationally; each region is rescaled to 100 after the next step, which has the same effect where it matters.
Today's values:
| Party | Share today | Average share 2000–2025 | RMS final-poll miss | \(\sigma_p\) |
|---|---|---|---|---|
| Liberal | 47.4 | 33.6 | 1.64 | 1.95 |
| Conservative | 30.3 | 35.8 | 2.04 | 1.88 |
| NDP | 11.9 | 16.7 | 1.69 | 1.42 |
| Bloc | 6.1 | 8.4 | 0.54 | 0.46 |
| Green | 2.0 | 3.7 | 1.13 | 0.83 |
| PPC | 1.1 | 2.4 | 1.13 | 0.75 |
| Others | 1.2 | – | – | 0.44 |
Table: Standard deviation of the simulated national error, points, 15 October 2026.
The Liberals, at 41% above their usual size, have their spread raised from 1.64 to 1.95 points; every other party is below its usual size and has its spread reduced. The Bloc's national spread is small, but its whole vote is in Quebec, so half a point nationally is about two points there.
Centred on zero
The error is centred on zero: a run is as likely to raise a party as to lower it. The correction has already moved the centre to where past misses suggest the result will be (How we read Canadian polls: the average, the correction and its test), so the simulation adds only the remaining uncertainty around it. Its size, though, is the full past RMS, which includes the steady part that the correction takes half of. The simulation is therefore, if anything, a little wide for the parties with the steadiest leans.
Independent draws
The parties' national errors are drawn independently. In reality they are linked: shares add up to 100, and at Canadian elections the Conservative and NDP errors have usually gone in opposite directions. Independent draws keep each party's own uncertainty but miss that pairing. The past-miss lenses, which replay each election's whole pattern at once, are the complement (If we're wrong: today's polls with each past miss replayed).
Regional error
Spreading the national error
The simulated national shares are mapped onto the regions through today's ratios of regional to national share, \(\rho_{r,p}\) (From national polls to 343 ridings: regions, Quebec and the swing model):
rescaled to 100 in each region \(g\). A national error is spread over the regions in proportion to each party's strength there. A run in which the Conservatives are a point higher nationally has them about 1.7 points higher in Alberta and about half a point higher in Quebec. The national error is common to every region: it is perfectly correlated across the country, which is the property that matters most for seats, since a miss on the Liberal–Conservative balance moves suburban ridings in Ontario, British Columbia and Atlantic Canada together.
The regional draw
Each party's share in each region then moves by its own error:
and the region is rescaled to 100. The coefficient \(c_{\text{reg}} = 0.99\) is fitted on the seven counted swing replays, from how far each region's actual share strayed from what proportional national swing would have given it (Testing the seat engine: the plurality check, 2025 and the swing replays). The factor \(1 - w_g/2\) reduces it where regional polls exist: \(w_g\) is the weight the region's own polls get in today's estimate, \(n/(n+2)\) for \(n\) pollsters. So a region read from three pollsters has 70% of the full regional noise, one read from two has 75%, Atlantic Canada with one has 83%, and the territories with none have it all.
For a party on 30% in a region, the regional standard deviation is about 5.4 points with no regional polls, 4.1 with two pollsters and 3.8 with three. That is larger than the national error for any party, and it is meant to be: a party's regional share has more room to differ from what the national polls imply than its national share has to differ from the national polls.
The regional draws are independent from region to region and party to party. Two ridings in the same region share the regional error; two ridings in different regions share only the national one.
Riding noise
Each riding's shares come from moving its 2025 result by its region's simulated change, by uniform swing. Then each party's share gets a last, independent error,
with \(c_{\text{rid}} = 1.01\), and the party with the largest noisy share wins. The coefficient is the one at which the swing replays, run with the true regional change, would have been expected to miss as many ridings as they actually did: 268 of 2,281 (Testing the seat engine: the plurality check, 2025 and the swing replays). A party on 40% in a riding has a riding-level standard deviation of about 6.4 points; one on 10% about 3.2. This noise stands in for everything the swing model leaves out: candidates, incumbency, local campaigns, and ridings that simply move differently from their region.
A party at zero in a riding (the Bloc outside Quebec, a party that ran no candidate there in 2025) gets no noise and cannot win.
What comes out
After 2,000 runs, every output is a count.
- 80% range
- Each party's seats across the runs are sorted, and the range runs from the 201st to the 1,800th value: the middle 80% of runs.
- Majority
- The share of runs in which the largest party has 172 seats or more.
- Outcome
- Each run is classed as a Liberal majority, Liberal minority (largest without 172), Conservative majority, Conservative minority, or another party largest or a tie.
- Official party status
- The share of runs in which a party wins 12 seats or more, the threshold for recognised party status in the House of Commons, which brings research funding and speaking time.
- Pairs
- The share of runs in which Liberal + NDP, Liberal + Bloc or Conservative + Bloc together reach 172.
- Riding chances
- For each riding, the share of runs each party wins it.
- Province ranges
- Each party's 80% range of seats in each province and territory.
With 2,000 runs a reported chance has a Monte Carlo standard error of at most \(\sqrt{0.25/2000} \approx 1.1\) points. Differences of a point or two between chances mean nothing.
Today's figures
| Party | Share | Seats | 80% range | Mean seats | 12 or more seats |
|---|---|---|---|---|---|
| Liberal | 47.4 | 241 | 211–256 | 234.8 | over 99% |
| Conservative | 30.3 | 67 | 58–97 | 75.9 | over 99% |
| Bloc | 6.1 | 21 | 11–27 | 19.5 | 89% |
| NDP | 11.9 | 12 | 8–15 | 11.6 | 52% |
| Green | 2.0 | 2 | 0–2 | 1.2 | 0% |
| PPC | 1.1 | 0 | 0–0 | 0.0 | 0% |
Table: Simulation, 15 October 2026. Seats are the central projection; the range and mean come from the 2,000 runs.
The ranges are asymmetric. The Liberal mean, 234.8, is six seats below the central projection, and the Conservative mean, 75.9, nine seats above. More of the close ridings are projected Liberal than Conservative, and noise can only take a projected seat away from its projected winner, so on average the Liberals lose more close ridings than they pick up. The same effect gives the Conservatives a long upper tail (58 to 97).
Every run gives the Liberals a majority. The pairs follow: Liberal + NDP and Liberal + Bloc reach 172 in every run, Conservative + Bloc in none.
As a measure of how far the majority is from the edge: running the seat engine directly, the Liberals keep a majority until about seven points of their vote move to the Conservatives (40.4% against 37.3%, which gives them 169 seats), and the Conservatives win more seats than the Liberals only after a move of about nine and a half points (37.9% against 39.8%). The largest national spread in the simulation is under two points per party. A seven-point miss on the gap is outside the record since 2000, where the largest gap error was 5.8 points (2004).
Official party status
The threshold of twelve seats matters for two parties. The NDP won 7 seats in 2025 and lost recognised party status; today it is projected to win 12, exactly on the line, and the simulation puts it at twelve or more in 52% of runs. Its twelve projected seats are six in British Columbia, two each in Manitoba and Alberta, and one each in Quebec and Nunavut. The Bloc is projected to win 21 and reaches 12 in 89% of runs; its range, 11 to 27, is wide because its whole vote is in one province, and Quebec's four-way contests turn on small shifts.
Ridings
On today's projection 31 ridings have a projected winner with less than a 60% chance, and 71 with less than 75%. Summed over all 343 ridings, the chance that the projected winner loses comes to 42 ridings: that is how many the simulation expects the projection to get wrong, before any polling error turns into a different national result. The closest, Repentigny, is a coin toss between the Liberals and the Bloc. The ridings page shows every chance, and the map shades them.
Before polling day
The fixed date is 15 October 2029, 1,096 days away. The polling-day forecast first pulls each party part of the way back towards its 2025 result, then runs the same simulation with a second national error for the drift expected over the time left (Polling day: how far Canadian polls move before an election). Each party's national standard deviation becomes
where \(\delta(d) = 3.85 + 0.75 \ln(d/30)\) is the typical drift per party at \(d\) days, for a party on 15%. At 1,096 days \(\delta = 6.6\) points, and the national spreads become 11.8 points for the Liberals, 9.5 for the Conservatives, 6.0 for the NDP and 4.2 for the Bloc. The polling-day simulation uses 1,000 runs.
| Outcome | Today | Polling day |
|---|---|---|
| Liberal majority | over 99% | 67% |
| Liberal minority | 0% | 8% |
| Conservative majority | 0% | 18% |
| Conservative minority | 0% | 6% |
| Another party largest, or a tie | 0% | under 1% |
Table: Who governs, today and on the fixed polling day, 15 October 2026.
On polling day the 80% ranges are 111 to 275 seats for the Liberals and 44 to 191 for the Conservatives; the NDP reaches official party status in 26% of runs and the Bloc in 65%.
What the simulation does not capture
Correlation between parties. The national errors are independent. At Canadian elections the Conservative and NDP errors have usually run in opposite directions, and a simulation that drew them together would give wider ranges for the gap between the two main parties.
A regional miss in the national polls. The regional error in equation (4) is fitted on how far regions strayed from national swing when the national vote was known. A polling miss concentrated in one region (all of the Conservative understatement in Ontario, say) is represented only through that noise.
Changing regional ratios. Every run spreads the national error with today's regional pattern. If the Liberals' gains since 2025 are concentrated in certain regions, the ratios carry that pattern into every run.
Events. Leaders, campaigns, an early election and new parties are outside the model.
Calibration
A probability forecast is well calibrated if events given a 20% chance happen about 20% of the time. Nine elections cannot test that for national outcomes. Two parts of the simulation are calibrated against the past by construction: the national error has the size of past final-poll misses, and the riding noise is set so that the replays' expected misses equal their actual ones. The regional noise has the size of past regional departures from national swing. What is not calibrated is the joint behaviour, how parties and regions err together, and that is where the simulation is weakest.
We think the riding chances and the province ranges are the best-founded outputs, because they are closest to what was fitted. The majority chance today is driven by the size of the Liberal lead, which is far outside the range of past misses, and is secure for that reason rather than because of the model's details. In a close race the details would matter far more. What we don't know yet: limitations of the Canada forecast lists the open questions.
References
Canada Elections Act, S.C. 2000, c. 9, s.313. Parliament of Canada Act, R.S.C. 1985, c. P-1 (recognised parties).
Figures in this paper are as of 15 October 2026; the pages update with each poll.
How to cite
Polling Forecast (2026). Simulating Canadian elections: where the chances come from. Retrieved 17 October 2026 from https://www.pollingforecast.com/research/canada-simulation. Live figures change as new polls arrive; the date above is when the text was last revised.