rlauxe

Belgium D’Hondt Elections

last changed 09/28/2026

Belgium Elections

Belgiun has eleven Constituencies which each run an independent election. Each election has a single contest, in which the voter chooses one party. There is a common set of parties across the country, and the set of parties running in each constituency is a subset. Each constituency is allocated some number of seats using d’Hondt proportional allocation, and the election decides how many seats are awarded to each party.

Within each constituency, each party is reported to have gotten nvotes(party). A party must get a minimum number of votes (5%) for it to be awarded any seats, called the threshold. For each party, nvotes(party) is divided by a divisor that are consecutive integers, denoted party/1, party/2, party/3 … These are called scores or candidates. The seats are awarded to the highest scores, and once a candidate has been awarded a seat, the next divisor is used for that party.

We will use the Belgium 2024 election as our example thoughout. Here are the winning seats for Anvers, plus the next 6 non-winning scores:

DhondtContest 'Anvers' winning seats

 seat          party/divisor,  nvotes,  score, 
 ( 1)                N-VA/1 ,  368877, 368877, 
 ( 2)       VLAAMS BELANG/1 ,  249826, 249826,   
 ( 3)                N-VA/2 ,  368877, 184438,
 ( 4)             Vooruit/1 ,  127973, 127973, 
 ( 5)                CD&V/1 ,  125894, 125894,
 ( 6)                PVDA/1 ,  125257, 125257, 
 ( 7)       VLAAMS BELANG/2 ,  249826, 124913,
 ( 8)                N-VA/3 ,  368877, 122959,
 ( 9)                N-VA/4 ,  368877,  92219,
 (10)               GROEN/1 ,   90370,  90370, 
 (11)       VLAAMS BELANG/3 ,  249826,  83275, 
 (12)                N-VA/5 ,  368877,  73775,
 (13)            open vld/1 ,   70890,  70890, 
 (14)             Vooruit/2 ,  127973,  63986, 
 (15)                CD&V/2 ,  125894,  62947,  
 (16)                PVDA/2 ,  125257,  62628, 
 (17)       VLAAMS BELANG/4 ,  249826,  62456, 
 (18)                N-VA/6 ,  368877,  61479, 
 (19)                N-VA/7 ,  368877,  52696, 
 (20)       VLAAMS BELANG/5 ,  249826,  49965,  
 (21)                N-VA/8 ,  368877,  46109,  
 (22)               GROEN/2 ,   90370,  45185, 
 (23)             Vooruit/3 ,  127973,  42657,  
 (24)                CD&V/3 ,  125894,  41964,
                     PVDA/3 ,  125257,  41752,  
            VLAAMS BELANG/6 ,  249826,  41637,    
                     N-VA/9 ,  368877,  40986, 
                    N-VA/10 ,  368877,  36887, 
            VLAAMS BELANG/7 ,  249826,  35689,  
                 open vld/2 ,   70890,  35445,  

Another way to summarize the results:

                  party    Round:   1 |           2 |           3 |           4 |           5 |           6 |           7 |           8 |           9 |
2         BELG.UNIE-BUB*:        1686 |         843 |         562 |         421 |         337 |         281 |         240 |         210 |         187 |
4                  CD&V :  125894 (5) |  62947 (15) |  41964 (24) |       31473 |       25178 |       20982 |       17984 |       15736 |       13988 |
7            DierAnimal*:       10341 |        5170 |        3447 |        2585 |        2068 |        1723 |        1477 |        1292 |        1149 |
10                GROEN :  90370 (10) |  45185 (22) |       30123 |       22592 |       18074 |       15061 |       12910 |       11296 |       10041 |
15                 N-VA :  368877 (1) |  184438 (3) |  122959 (8) |   92219 (9) |  73775 (12) |  61479 (18) |  52696 (19) |  46109 (21) |       40986 |
19                 PVDA :  125257 (6) |  62628 (16) |       41752 |       31314 |       25051 |       20876 |       17893 |       15657 |       13917 |
21        Partij BLANCO*:        7221 |        3610 |        2407 |        1805 |        1444 |        1203 |        1031 |         902 |         802 |
24        VLAAMS BELANG :  249826 (2) |  124913 (7) |  83275 (11) |  62456 (17) |  49965 (20) |       41637 |       35689 |       31228 |       27758 |
25          Volt Europa*:        4213 |        2106 |        1404 |        1053 |         842 |         702 |         601 |         526 |         468 |
26               Voor U*:        8639 |        4319 |        2879 |        2159 |        1727 |        1439 |        1234 |        1079 |         959 |
28              Vooruit :  127973 (4) |  63986 (14) |  42657 (23) |       31993 |       25594 |       21328 |       18281 |       15996 |       14219 |
30             open vld :  70890 (13) |       35445 |       23630 |       17722 |       14178 |       11815 |       10127 |        8861 |        7876 |

* failed threshold

D’Hondt Assertions

To fit the d’Hondt into the SHANGRLA framework, we create a set of assertions which proves the reported results within a given risk limit. We have three kinds of assertions:

DH assertion tests that a winning candidate’s score is higher than a losing candidate’s score. It suffices to create a DH assertion between each party’s lowest winning score and every other party’s highest losing score.

Below Threshold assertion is generated for every party with less than the threshold number of votes.

Above Threshold assertion is generated for every party with more than the threshold number of votes.

Each assertion has a margin and an upper bound that depend on the winning and losing totalVotes and the divisor of the winning and losing candidate. For DH assertions this is:

    val lw = loserDivisor/winnerDivisor
    val margin = (winnerTotalVotes * lw - loserTotalVotes)/Nc
    val upper = (lw + 1)/2

Because DH assorters’ upper bounds vary widely, we look for the assorter with the smallest noerror term instead of margin:

    val noerror = 1.0 / (2.0 - margin / upper) // clca assort value when no error

This is because for CLCA audits, the test statistic T depends on margin / upper, not just margin.

    If we approximate µ_i = .5 and use a constant bet of λc, then the payoff when there is no error
       val payoff ~= (1 + λc (noerror − .5) 
       
    After n noerror samples:
        val T_n = (1 + λc (noerror − .5))^n
        
    From which we approximate n as    
     val estSampleSize =~  ln(1/alpha) / ln(payoff)

The dependence on the winning and losing candidate divisors means that an assertion’s estSampleSize isnt a simple function of the difference in scores.

Blocking

It suffices to create a DH assertion between each party’s lowest winning score and every other party’s highest losing score.

We can expand noerror as

    val lw = loserDivisor/winnerDivisor
    val noerror = (lw + 1)/2 / ((lw + 1) - (winnerTotalVotes * lw - loserTotalVotes)/Nc)
    1 / mo

Consider the DH assertion Dh(winParty/dw, loseParty/dl)

fun g(partyVote: Int): Double {
    return if (partyVote == winner) 1.0 / winnerDivisor
        else if (partyVote == loser) -1.0 / loserDivisor
        else 0.0
}

// h transforms from [-1.0 / loserDivisor, 1.0 / winnerDivisor] to [0, upper]
fun h(partyVote: Int): Double {
    return c * g(partyVote) + 0.5
}

val upperg = 1.0 / winnerDivisor // upper bound of g = 1/d(WA) = 1/lastSeatWon (highest loser) val lowerg = -1.0 / loserDivisor // lower bound of g = -1/d(WB) = -1/firstSeatLost (lowest winner)

Candidate A “blocks” Candidate B if A loses => B loses. For example, for candidates in the same party, P/d1 blocks P/d2 if d1 < d2.

TODO

Failed Assertions

If a constituency limits the number of ballots to less than is needed to prove all assertions, then some of the assertions will fail to reach the risk limit.

DH Assertion failures

Failed assertions divide the seats into 3 groups.

Yellow seats: Seats that have a failing assertion.

Green seats: Seats above the yellow are definite winners. Each is either blocked by a seat of the same party below it, or if it is the lowest winning candidate, has a non-failing assertion for every other candidate, which confirms its winning status.

Red seats: Seats below the yellow are definite losers. Each is either blocked by a seat of the same party above it, or if it is the highest losing candidate, has a non-failing assertion for every other candidate, which confirms its losing status.

Switching to FlandresEast as the example constituency, which has a single failing assertion. This needs 3567 samples to prove it, but we only have 800, and the risk limit is 0.51, instead of the target 0.05 :

Failures
                     name, winningSeat, noerror,  estMvrs, samplesUsed,   risk
         Vooruit/3-CD&V/3,          20,  0.5004,     3567,         800, 0.5112,

winning seats
 seat         winner-round     nvotes,   score, scoreDiff, maxRisk, maxAssertion
 ( 1)       VLAAMS BELANG/1 ,  234888, 234888,           , 0.000, 
 ( 2)                N-VA/1 ,  231470, 231470,       3418, 0.000, 
 ( 3)             Vooruit/1 ,  127758, 127758,     103712, 0.000, 
 ( 4)                CD&V/1 ,  125871, 125871,       1887, 0.000, 
 ( 5)            open vld/1 ,  119200, 119200,       6671, 0.000, 
 ( 6)       VLAAMS BELANG/2 ,  234888, 117444,       1756, 0.000, 
 ( 7)                N-VA/2 ,  231470, 115735,       1709, 0.000, 
 ( 8)               GROEN/1 ,  103722, 103722,      12013, 0.000, 
 ( 9)       VLAAMS BELANG/3 ,  234888,  78296,      25426, 0.000, 
 (10)                N-VA/3 ,  231470,  77156,       1140, 0.000, 
 (11)                PVDA/1 ,   75942,  75942,       1214, 0.000, 
 (12)             Vooruit/2 ,  127758,  63879,      12063, 0.000, 
 (13)                CD&V/2 ,  125871,  62935,        944, 0.000, 
 (14)            open vld/2 ,  119200,  59600,       3335, 0.000, 
 (15)       VLAAMS BELANG/4 ,  234888,  58722,        878, 0.000, 
 (16)                N-VA/4 ,  231470,  57867,        855, 0.000, 
 (17)               GROEN/2 ,  103722,  51861,       6006, 0.000, 
 (18)       VLAAMS BELANG/5 ,  234888,  46977,       4884, 0.001, 
 (19)                N-VA/5 ,  231470,  46294,        683, 0.003, 
 **(20)           Vooruit/3 ,  127758,  42586,       3708, 0.511, Vooruit/3-CD&V/3 **
 **                  CD&V/3 ,  125871,  41957,        629, 0.511, Vooruit/3-CD&V/3 **
                 open vld/3 ,  119200,  39733,       2224, 0.047, 
            VLAAMS BELANG/6 ,  234888,  39148,        585, 0.007, 
                     N-VA/6 ,  231470,  38578,        570, 0.003, 
                     PVDA/2 ,   75942,  37971,        607, 0.019, 
                    GROEN/3 ,  103722,  34574,       3397, 0.000,

The two scores demarked by ** are “in play”; the one above are green, and the ones below are red, which we can visualize as:

FlandreWest winning seats: 24=5, 15=5, 28=3, 4=2, 30=2, 10=2, 19=1

  Vlaams N-VA Vooruit CD&V openVld Groen PVDA
1 G G G G G G G
2 G G G G G G  
3 G G Y        
4 G G          
5 G G          
               
               
1              
2             R
3       Y R R R
4     R R R R R
5     R R R R R
6 R R R R R R R
7 R R R R R R R

Relaxed DH Assertions and Party Seat Ranges

When some assertions fail, we can calculate for each party the possible range of seats that might be awarded.

For the seats that are in play, form the “reported yellow set” as the set of winning candidates in the yellow seats. This set has n unique candidates when there are n yellow seats.

The number of seats that a party might lose is bounded by the number of candidates it has in the reported yellow set.

For each failed assertion, add the losing candidate to the “hopeful candidate” set. This set has k unique candidates when there are k failed assertions.

The number of seats that a party might gain is bounded by the number of candidates it has in the hopeful candidate set.

These are conservative estimates, further work may be able to tighten these bounds. For example, it may be possible to prove that a winning candidate in the yellow seats must still win a seat at a lower rank.

Below Threshold failures

If a party gets fewer votes than the threshold, its candidates are removed from the competition for seats. A BT (Below Threshold) assertion is added to verify this within the risk limit.

If the BT assertion does not have enough samples to verify, we generate an “alternate contest” in which the party’s candidates compete for seats anyway. This create an alternative seat assignment. This widens the possible seat assignments, called the “Party Seat Ranges”.

When there are multiple BT assertion failures, generate the 2^n combinations, generate an alternate contest for each combination, and feed each alternative seat assignment into the Party Seat Range algorithm.

Above Threshold failures

TODO. same as BT?

DH Assertion failures and Threshold Assertion failures

When there are both DH and Threshold failures, simply merge the seat ranges.

//////////////////

Let Candidate(p, d) be the dth candidate of Party p An assertion DH_A,B(w, l) tests Candidate(A, w) as winner against Candidate(B, l) as loser.

Initialize 
uncertainWinnerSet = Set<Candidate>
uncertainLoserSet = Set<Candidate>
  
Create orgAssertions = assertions for the apparent outcome, as in Proposition 1.

Find unacceptable assertions and create orgFailures = findFailures(orgAssertions)
If there are no failures, then you are done.

failures = orgFailures
assertionsIn = orgAssertions
assertionsOut = emptyList<Assertion>
done = false

// Generate relaxed assertions, put them in assertionsOut
while (!done) {
    newAssertions = step4(assertionsIn, assertionsOut, failures)
    if (newAssertions.isEmpty) 
        done = true
    else
        failures = findFailures(newAssertions)
        if (failures.isEmpty) 
            done = true
        else
            assertionsIn = newAssertions}
}

// Create Party Ranges

// Initialize PartyRange(min, reported, max) for each party in the contest
partyRanges = Map<Int, PartyRange>

// The number of seats that a party might lose is bounded by the number of unique candidates it has in the uncertainWinnerSet.
uncertainWinnerSet.forEach { candidate ->
    val partyRange: PartyRange = partyMap[candidate.partyId]!!
    partyRange.minSeats--
}

// The number of seats that a party might gain is bounded by the number of unique candidates it has in the uncertainLoserSet.
uncertainLoserSet.forEach { candidate ->
    val partyRange: PartyRange = partyMap[candidate.partyId]!!
    partyRange.maxSeats++
}

// RETURN relaxed assertions and corresponding bounds return assertionsOut, partyRanges

fun step4(assertionsIn: List<Assertion>, assertionsOut: List<Assertion>, failures: List<Assertion>) {
    
    assertionsNew = emptyList<Assertion>

    foreach assertion in assertionsIn:
        if (!failures.contain(assertion))
            assertionsOut.add(assertion)
        else
            winner = assertion.winnerCandidate
            loser = assertion.loserCandidate
            // If w > 1, add DH_A,B (w − 1, l) to the assertion set
            if (winner.divisor > 1) assertionsNew.add( DH_A,B (w − 1, l))
            // If l < |B| add DHA,B (w, l + 1)
            if (loser.divisor < loser.party.macCandidates) assertionsNew.add( DH_A,B (w, l + 1))
            uncertainWinnerSet.add(winner)
            uncertainLoserSet.add(loser)

    return assertionsNew    }
  1. For all unacceptable DH assertions failedAssertion = DHA,B (w, l)

    a) Remove DHA,B (w, l) from the assertion set, b) If w > 1, add DH_A,B (w − 1, l) to the assertion set, c) If l < |B| (i.e. if B has any other losers), add DHA,B (w, l + 1) to the assertion set, d) add failedAssertion.winner to uncertainWinnerSet, and failedAssertion.loser to uncertainLoserSet

    If new assertions are generated, run step4

//////////////////////

 ( 1)                  MR/1 ,  179296, 179296,           , 0.000, 
 ( 2)                  PS/1 ,  137443, 137443,      41853, 0.000, 
 ( 3)         LES ENGAGÉS/1 ,  103711, 103711,      33732, 0.000, 
 ( 4)                 PTB/1 ,   91188,  91188,      12523, 0.000, 
 ( 5)                  MR/2 ,  179296,  89648,       1540, 0.000, 
 ( 6)                  PS/2 ,  137443,  68721,      20927, 0.000, 
 ( 7)                  MR/3 ,  179296,  59765,       8956, 0.000, 
 ( 8)         LES ENGAGÉS/2 ,  103711,  51855,       7910, 0.000, 
 ( 9)               ECOLO/1 ,   49936,  49936,       1919, 0.000, 
 (10)                  PS/3 ,  137443,  45814,       4122, 0.000, 
 (11)                 PTB/2 ,   91188,  45594,        220, 0.000, 
 (12)                  MR/4 ,  179296,  44824,        770, 0.000, 
 (13)                  MR/5 ,  179296,  35859,       8965, 0.050, 
 (14)         LES ENGAGÉS/3 ,  103711,  34570,       1289, 0.724, LES ENGAGÉS/3-PS/4
                       PS/4 ,  137443,  34360,        210, 0.724, LES ENGAGÉS/3-PS/4
                      PTB/3 ,   91188,  30396,       3964, 0.004, 
                       MR/6 ,  179296,  29882,        514, 0.000, 
                       PS/5 ,  137443,  27488,       2394, 0.000, 
              LES ENGAGÉS/4 ,  103711,  25927,       1561, 0.000, 
                       MR/7 ,  179296,  25613,        314, 0.000, 

0 MR #14 5 seats 1 PS #16 3–4 seats 2 LES ENGAGÉS #12 2–3 seats 3 PTB #19 2 seats 4 N-VA #15 0 seats 5 DéFI #8 0 seats 6 ECOLO #9 1 seat 7 COLLECTIF CITOYEN #6 0 seats 8 BELG.UNIE-BUB #2 0 seats 9 BLANCO #21 0 seats 10 CHEZ NOUS #5 0 seats 11 RMC #22 0 seats

party 14 quotient 5 = MR/5

may rank as low as 15th

own 5 = MR/5 row 13 #16 ≤ 4 = PS/4 row 15 #12 ≤ 3 = LES ENGAGÉS/3 o row 14 #19 ≤ 2 = PTB/2 row 11 #8 ≤ 0 = DéFI/0 ?? #9 ≤ 1 = BLANCO ?? #5 ≤ 0 = CHEZ NOUS ??


|seat|       MR |       PS | LES ENGA |      PTB |    ECOLO |     N-VA |     DéFI | COLLECTI | BELG.UNI |   BLANCO | CHEZ NOU |      RMC |
|----|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|----------|
|  1 |        G |        G |        G |        G |        G |          |          |          |          |          |          |          |
|  2 |        G |        G |        G |        G |          |          |          |          |          |          |          |          |
|  3 |        G |        G |     Y[1] |          |          |          |          |          |          |          |          |          |
|  4 |        G |          |          |          |          |          |          |          |          |          |          |          |
|  5 |        G |          |          |          |          |          |          |          |          |          |          |          |
|  6 |          |          |          |          |          |          |          |          |          |          |          |          |
|  1 |          |          |          |          |          |        R |        R |        R |        R |        R |        R |        R |
|  2 |          |          |          |          |        R |        R |        R |        R |        R |        R |        R |        R |
|  3 |          |          |          |        R |        R |        R |        R |        R |        R |        R |        R |        R |
|  4 |          |     Y[1] |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |
|  5 |          |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |
|  6 |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |
|  7 |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |        R |

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | field | value | description | | ———- | ——————– | ————————————————— | | id | 6 | contest identifier | | name | Liège | contest name | | npop | 685695 | Npop size (for diluted margin) | | voteMargin | 210 | (winner-loser) votes (smallest assertion) | | margin | 0.001222603830177249 | voteMargin / population size (smallest assertion) | | payoff | 1.000505 | payoff factor for each mvr that agrees with the cvr | | estMvrs | 5914 | estimated number of mvrs needed | | haveMvrs | 640 | number of mvrs that were sampled for this contest | | mvrsExtra | 0 | (haveMvrs-estMvrs) | | mvrLimit | 640 | limit on number of mvrs to audit; set by auditor | | estRisk | 0.723989429460763 | estimated risk | | fail | 1 | number of contested assertions | | NCand | 12 | number of candidates | | nseats | 14 | nseats to win |

DhondtContest ‘Liège’ (6) DHONDT voteForN=1 votes={14=179296, 16=137443, 12=103711, 19=91188, 9=49936, 5=21877, 8=13816, 15=10840, 21=10656, 6=8289, 22=3361, 2=1502} undervotes=53780, winners=[14, 16, 12, 19, 9] Nc=685695 Nphantoms=0 Nu=53780 sumVotes=631915 nseats=14 winnerSeats={14=5, 16=3, 12=3, 19=2, 15=0, 8=0, 9=1, 6=0, 2=0, 21=0, 5=0, 22=0} belowMin=[15, 8, 6, 2, 21, 5, 22] threshold=0.05 minVotes=31596 Npop=685695 hasStyle=true minAssertion= fw=34570.3 fl=34360.8 fw-fl=210 dilutedMargin=0.001223 noerror=0.5003

party Round: 1 2 3 4 5 6
2 BELG.UNIE-BUB*: 1502 751 500 375 300 250
21 BLANCO*: 10656 5328 3552 2664 2131 1776
5 CHEZ NOUS*: 21877 10938 7292 5469 4375 3646
6 COLLECTIF CITOYEN*: 8289 4144 2763 2072 1657 1381
8 DéFI*: 13816 6908 4605 3454 2763 2302
9 ECOLO : 49936 (9) 24968 16645 12484 9987 8322
12 LES ENGAGÉS : 103711 (3) 51855 (8) 34570 (14) 25927 20742 17285
14 MR : 179296 (1) 89648 (5) 59765 (7) 44824 (12) 35859 (13) 29882
15 N-VA*: 10840 5420 3613 2710 2168 1806
16 PS : 137443 (2) 68721 (6) 45814 (10) 34360 27488 22907
19 PTB : 91188 (4) 45594 (11) 30396 22797 18237 15198
22 RMC*: 3361 1680 1120 840 672 560

Relaxed Assertions (experimental)—————————————— Original Seat Ordering seat winner-round nvotes, score, scoreDiff, maxRisk, maxAssertion ( 1) MR/1 , 179296, 179296, , 0.000, ( 2) PS/1 , 137443, 137443, 41853, 0.000, ( 3) LES ENGAGÉS/1 , 103711, 103711, 33732, 0.000, ( 4) PTB/1 , 91188, 91188, 12523, 0.000, ( 5) MR/2 , 179296, 89648, 1540, 0.000, ( 6) PS/2 , 137443, 68721, 20927, 0.000, ( 7) MR/3 , 179296, 59765, 8956, 0.000, ( 8) LES ENGAGÉS/2 , 103711, 51855, 7910, 0.000, ( 9) ECOLO/1 , 49936, 49936, 1919, 0.000, (10) PS/3 , 137443, 45814, 4122, 0.000, (11) PTB/2 , 91188, 45594, 220, 0.000, (12) MR/4 , 179296, 44824, 770, 0.000, (13) MR/5 , 179296, 35859, 8965, 0.050, (14) LES ENGAGÉS/3 , 103711, 34570, 1289, 0.724, LES ENGAGÉS/3-PS/4 PS/4 , 137443, 34360, 210, 0.724, LES ENGAGÉS/3-PS/4 PTB/3 , 91188, 30396, 3964, 0.004, MR/6 , 179296, 29882, 514, 0.000, PS/5 , 137443, 27488, 2394, 0.000, LES ENGAGÉS/4 , 103711, 25927, 1561, 0.000, MR/7 , 179296, 25613, 314, 0.000,

Failures name, winningSeat, noerror, estMvrs, samplesUsed, risk LES ENGAGÉS/3-PS/4, 14, 0.5003, 5914, 640, 0.7240, 5914,

Table 5 yellowWinners: [(LES ENGAGÉS/3, 1)] yellowLosers: [(PS/4, 1)] Liège: {14=5, 16=3, 12=3, 19=2, 9=1, 15=0, 8=0, 6=0, 2=0, 21=0, 5=0, 22=0}

seat MR PS LES ENGA PTB ECOLO N-VA DéFI COLLECTI BELG.UNI BLANCO CHEZ NOU RMC
1 G G G G G              
2 G G G G                
3 G G Y[1]                  
4 G                      
5 G                      
6                        
1           R R R R R R R
2         R R R R R R R R
3       R R R R R R R R R
4   Y[1] R R R R R R R R R R
5   R R R R R R R R R R R
6 R R R R R R R R R R R R
7 R R R R R R R R R R R R

Party Seat Ranges (Liège) ContestId=6 | party | min | reported | max | |—————————|—–|———-|—–| | MR (14) | 5 | 5 | 5 | | PS (16) | 3 | 3 | 4 | | LES ENGAGÉS (12) | 2 | 3 | 3 | | PTB (19) | 2 | 2 | 2 | | ECOLO ( 9) | 1 | 1 | 1 | | N-VA (15) | 0 | 0 | 0 | | DéFI ( 8) | 0 | 0 | 0 | | COLLECTIF CITOYEN ( 6) | 0 | 0 | 0 | | BELG.UNIE-BUB ( 2) | 0 | 0 | 0 | | BLANCO (21) | 0 | 0 | 0 | | CHEZ NOUS ( 5) | 0 | 0 | 0 | | RMC (22) | 0 | 0 | 0 |

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

‘Anvers’ (1) DHONDT voteForN=1 votes={15=368877, 24=249826, 28=127973, 4=125894, 19=125257, 10=90370, 30=70890, 7=10341, 26=8639, 21=7221, 25=4213, 2=1686} undervotes=44400, winners=[24, 30, 19, 28, 15, 10, 4] Nc=1235587 Nphantoms=0 Nu=44400 sumVotes=1191187 nseats=24 winnerSeats={24=5, 30=1, 25=0, 19=2, 28=3, 15=8, 10=2, 4=3, 26=0, 7=0, 21=0, 2=0} belowMin=[25, 26, 7, 21, 2] threshold=0.05 minVotes=59560 Relaxed Assertion Report (experimental)————————————- Original Seat Ordering seat winner-round nvotes, score, scoreDiff, maxRisk, maxAssertion ( 1) N-VA/1 , 368877, 368877, , 0.000, ( 2) VLAAMS BELANG/1 , 249826, 249826, 119051, 0.000, ( 3) N-VA/2 , 368877, 184438, 65388, 0.000, ( 4) Vooruit/1 , 127973, 127973, 56465, 0.000, ( 5) CD&V/1 , 125894, 125894, 2079, 0.000, ( 6) PVDA/1 , 125257, 125257, 637, 0.000, ( 7) VLAAMS BELANG/2 , 249826, 124913, 344, 0.000, ( 8) N-VA/3 , 368877, 122959, 1954, 0.000, ( 9) N-VA/4 , 368877, 92219, 30740, 0.000, (10) GROEN/1 , 90370, 90370, 1849, 0.000, (11) VLAAMS BELANG/3 , 249826, 83275, 7095, 0.000, (12) N-VA/5 , 368877, 73775, 9500, 0.000, (13) open vld/1 , 70890, 70890, 2885, 0.000, (14) Vooruit/2 , 127973, 63986, 6904, 0.000, (15) CD&V/2 , 125894, 62947, 1039, 0.000, (16) PVDA/2 , 125257, 62628, 319, 0.000, (17) VLAAMS BELANG/4 , 249826, 62456, 172, 0.000, (18) N-VA/6 , 368877, 61479, 977, 0.000, (19) N-VA/7 , 368877, 52696, 8783, 0.000, (20) VLAAMS BELANG/5 , 249826, 49965, 2731, 0.000, (21) N-VA/8 , 368877, 46109, 3856, 0.000, (22) GROEN/2 , 90370, 45185, 924, 0.002, (23) Vooruit/3 , 127973, 42657, 2528, 0.136, Vooruit/3-PVDA/3 (24) CD&V/3 , 125894, 41964, 693, 0.626, CD&V/3-PVDA/3 PVDA/3 , 125257, 41752, 212, 0.626, CD&V/3-PVDA/3 VLAAMS BELANG/6 , 249826, 41637, 115, 0.383, CD&V/3-VLAAMS BELANG/6 N-VA/9 , 368877, 40986, 651, 0.039, N-VA/10 , 368877, 36887, 4099, 0.000, VLAAMS BELANG/7 , 249826, 35689, 1198, 0.000, open vld/2 , 70890, 35445, 244, 0.000,

Failures name, winningSeat, noerror, estMvrs, samplesUsed, risk CD&V/3-VLAAMS BELANG/6, 24, 0.5003, 5866, 1884, 0.3826, 5866, Vooruit/3-PVDA/3, 23, 0.5006, 2828, 1884, 0.1359, 2828, CD&V/3-PVDA/3, 24, 0.5001, 12016, 1884, 0.6264, 12016,

Table 5 yellowWinners: [(CD&V/3, 1), (Vooruit/3, 2), (CD&V/3, 3)] yellowLosers: [(VLAAMS BELANG/6, 1), (PVDA/3, 2), (PVDA/3, 3)] Anvers: {15=8, 24=5, 28=3, 4=3, 19=2, 10=2, 30=1, 25=0, 26=0, 7=0, 21=0, 2=0}

seat N-VA VLAAMS B Vooruit CD&V PVDA GROEN open vld Volt Eur Voor U DierAnim Partij B BELG.UNI
1 G G G G G G G          
2 G G G G G G            
3 G G Y[2] Y[1, 3]                
4 G G                    
5 G G                    
6 G                      
7 G                      
8 G                      
9                        
1               R R R R R
2             R R R R R R
3         Y[2, 3] R R R R R R R
4     R R R R R R R R R R
5     R R R R R R R R R R
6   Y[1] R R R R R R R R R R
7   R R R R R R R R R R R
8   R R R R R R R R R R R
9 R R R R R R R R R R R R
10 R R R R R R R R R R R R

Party Seat Ranges (Anvers) ContestId=1 | party | min | reported | max | |—————————|—–|———-|—–| | N-VA (15) | 8 | 8 | 8 | | VLAAMS BELANG (24) | 5 | 5 | 6 | | PVDA (19) | 2 | 2 | 3 | | Vooruit (28) | 2 | 3 | 3 | | CD&V ( 4) | 2 | 3 | 3 | | GROEN (10) | 2 | 2 | 2 | | open vld (30) | 1 | 1 | 1 | | Volt Europa (25) | 0 | 0 | 0 | | Voor U (26) | 0 | 0 | 0 | | DierAnimal ( 7) | 0 | 0 | 0 | | Partij BLANCO (21) | 0 | 0 | 0 | | BELG.UNIE-BUB ( 2) | 0 | 0 | 0 |