# [EM] Preferential Party-List Proportional Representation (PPLPR)

Vidar Wahlberg canidae at exent.net
Fri Oct 31 14:52:06 PDT 2014

```Some of you may remember that I once brought up the topic of a
party-list voting system with preferential votes. Unfortunately I've not
found much information about such systems, so on a couple occasions I've
tried creating such a system myself. Last time I wrote about it on this
list my attempts at creating a such system did not lead to anything
useful, but a couple weeks ago I thought of another approach to the
problem. This lead to a system I've called "Preferential Party-List
Proportional Representation" (or PPLPR for short). Now I'd like you to
take a look at the system, and point out flaws and weaknesses.

I have implemented the system in JavaScript so you can easily test it
out. There may be bugs in the implementation, there are rounding errors
as well as floating points issues (minor impact), and there are limits
on how many parties it can handle (execution time increase drastically
relative to amount of parties, you'll get an warning at 10 or more
parties in the election). You can find it here:
http://exent.net/~canidae/valg/pplpr/
Note that the vote parser is fairly simplistic, each line must start
with amount of votes, followed by space, and then the preference order
separated with ">". No equal ranking allowed (it isn't implemented in
the voting system either, although I believe it should be possible).

I find it easier to explain by example, so I'll start with simple
examples and progress to some more complex ones. In the examples I'll
have a total of 100 votes for simplicity.
I've created a spreadsheet with these examples which calculates the
steps, it may aid understanding this textual explanation:

Example 1, three parties, L and R voters with C as 2nd preference:
40 L>C
20 C
40 R>C

Step 1:
Count up support for each party using only the first preference. This
result will serve as a base for the next step:
L: 40%
C: 20%
R: 40%

Step 2a:
Iterate through all unique combination of 1st preference on votes
(horizontal header of matrix), and move voter support to the 2nd
preference on the votes. This will create a matrix:
|   L   |   C   |   R    - "Excluded" 1st preference
----+-------+-------+-------
L |   -   | 40+ 0 | 40+ 0  - L is not 2nd pref. on any C or R votes
C | 40+20 |   -   | 40+20  - C is 2nd pref. on both L and R votes
R | 40+ 0 | 40+ 0 |   -    - R is not 2nd pref. on any C or R votes
Sum |  100  |   80  |  100

Do note that the value before the plus sign is the result from Step 1,
while the value after is from the 2nd preference on the votes.

Step 2b:
In this step we want to calculate how the votes previously given to C
and R would be distributed if L was removed from the election and votes
given to L instead was given to the 2nd preference. We'll also do the
same as if C and R were removed. Here's a table refering to Step 2a
that helps explaining the calculation (x0 refers to the result for the
parties in Step 1):
|   L   |   C   |   R
----+-------+-------+-------
L0 |   L1  |   L2  |   L3
C0 |   C1  |   C2  |   C3
R0 |   R1  |   R2  |   R3
Sum |   S1  |   S2  |   S3

Using the table above as reference, the calculation looks like this:
|       L       |       C       |       R
---+---------------+---------------+---------------
L |       -       | L2*(L0+R0)/S2 | L3*(L0+R0)/S3
C | C1*(L0+C0)/S1 |       -       | C3*(L0+C0)/S3
R | R1*(C0+R0)/S1 | R2*(C0+R0)/S2 |       -

Which yields the following result:
|   L   |   C   |   R
---+-------+-------+-------
L |   -   |  40%  |  24%
C |  36%  |   -   |  36%
R |  24%  |  40%  |   -

Step 2c:
Calculate the average for each row, this will be the result used in the
next step (in this case there are no more steps and it will instead be
the final result):
L: (40+24)/2 = 32%
C: (36+36)/2 = 36%
R: (24+40)/2 = 32%

Example 2, four parties, one very large, three small:
This is an exaggerated example, mostly to demonstrate that large
parties can't "vote away" opposition.
90 A>B
0 B
10 C>D
0 D

Step 1:
A: 90%
B:  0%
C: 10%
D:  0%

Step 2a:
|  A  |  B  |  C  |  D
----+-----+-----+-----+-----
A |  -  |  90 |  90 |  90
B |  90 |  -  |   0 |   0
C |  10 |  10 |  -  |  10
D |   0 |   0 |  10 |  -
Sum | 100 | 100 | 100 | 100

Step 2b:
|  A  |  B  |  C  |  D
----+-----+-----+-----+-----
A |  -  |  90 |  81 |  90
B |   9 |  -  |   0 |   0
C |   1 |  10 |  -  |  10
D |   0 |   0 |   9 |  -

Step 2c:
A: 87%
B:  3%
C:  7%
D:  3%

A voters could not move more than 3pp away from C (and C voters could
not move more than 3pp from A). If C voters had not ranked D as 2nd
preference then the result would be A: 90%, B: 3%, C: 7%, D: 0%. Do
however note that if D was excluded from the election, A voters would
be able to move more support from C to B (I'll come back to this
"feature" later).

Example 3, four parties, three preferences on every vote:
25 A>B>D
15 A>D>B
10 B>D>A
10 B>A>C
7 C>A>B
6 C>B>A
2 C>D>A
5 C>D>B
20 D>C>A

Step 1:
A: 40%
B: 20%
C: 20%
D: 20%

Step 2a:
|  A  |  B  |  C  |  D
----+-----+-----+-----+-----
A |  -  |  50 |  47 |  40
B |  45 |  -  |  26 |  20
C |  20 |  20 |  -  |  40
D |  35 |  30 |  27 |  -
Sum | 100 | 100 | 100 | 100

Step 2b:
|  A  |  B  |  C  |  D
----+-----+-----+-----+-----
A |  -  |  40 | 37.6|  32
B |  27 |  -  | 20.8|  16
C |  12 |  16 |  -  |  32
D |  21 |  24 | 21.6|  -

Step 2c:
A: 36.53%
B: 21.27%
C: 20.00%
D: 22.20%

Step 3a:
Since we got three preferences on these votes, we'll need a new round
similar to step 2, but this time moving votes from all unique
combinations of the two first preferences:
| A>B | A>C | A>D | B>A | B>C | B>D | C>A | C>B | C>D | D>A | D>B | D>C
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
A |  -  |  -  |  -  |  -  |36.53|46.53|  -  |42.53|38.53|  -  |36.53|56.53
B |  -  |21.27|36.27|  -  |  -  |  -  |28.27|  -  |26.27|21.27|  -  |21.27
C |20.00|  -  |20.00|30.00|  -  |20.00|  -  |  -  |  -  |20.00|20.00|  -
D |47.20|22.20|  -  |22.20|22.20|  -  |22.20|22.20|  -  |  -  |  -  |  -
Sum |67.20|43.47|56.27|52.20|58.73|66.53|50.47|64.73|64.80|41.27|56.52|77.80

Using a similar reference as in Example 1 Step 2b, this is how we found
the values in the matrix above:
A1-A4, A7, A10, B1, B4-B6, B8, B11, C2, C5, C7-C9, C12, D3, D6 and
D9-D12 are excluded as the party is in the unique combination of the
A5, A11, B2, B10, B12, C1, C3, C6, C10, C11, D2, D4, D5, D7 and D8 are
the exact same values as the party had after Step 2 (in a real, large
election, you'll likely have most of the possible combination of votes,
and few of these cells will have the same value as in Step 2c).
A6: Result in Step 2c plus 10 votes from the "B>D>A" votes.
A8: Result in Step 2c plus 7 "C>B>A" votes.
... Same is done for the remaining cells.

Step 3b:
| A>B | A>C | A>D | B>A | B>C | B>D | C>A | C>B | C>D | D>A | D>B | D>C
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
A |  -  |  -  |  -  |  -  |36.53|39.54|  -  |38.59|34.37|  -  |36.53|42.00
B |  -  |21.27|26.60|  -  |  -  |  -  |24.35|  -  |23.43|21.27|  -  |15.80
C |12.56|  -  |14.67|24.25|  -  |16.99|  -  |  -  |  -  |20.00|20.00|  -
D |29.64|22.20|  -  |17.95|22.20|  -  |19.12|20.14|  -  |  -  |  -  |  -

Step 3c:
A: 37.93%
B: 22.12%
C: 18.08%
D: 21.88%

A more familiar example, Tennessee capitol election (as used here:
http://en.wikipedia.org/wiki/Instant-runoff_voting):
Note that this is not a party-list election, just a demonstration on
what result PPLPR would end up with using the same votes.
42 M>N>C>K
26 N>C>K>M
15 C>K>N>M
17 K>C>N>M

Result:
Party | Round 1 | Round 2 | Round 3
------+---------+---------+---------
C     |  15.00% |  21.87% |  23.31%
K     |  17.00% |  16.55% |  17.03%
M     |  42.00% |  33.88% |  29.63%
N     |  26.00% |  27.71% |  30.03%

Where IRV would elect Knoxville, PPLPR would elect Nashville (which
happens to be the Condorcet winner, but this is a coincidence).

Some notable features of PPLPR:
- Adding later preferences won't affect higher ranked preferences. If in
an election with four parties your first preference is A, then adding
B as a second preference will move votes from C and D to B (while A
remains unaffected). If you add C as a third preference then votes
will be moved from D to C (while A and B remains unaffected). If
however A and B have equal support (say 30%) after counting the first
preference, then adding B to the vote as 2nd preference will cause B
to end up with more support than A.
- Adding more parties to the election weakens the strength of later
preferences. If you add a 4th party with 1 vote in Example 1, then C
will end up with 30.52%, while L and R ends up with 34.38%, and the
4th party with 0.73%.
- The further down on the preference list, the less impact the voter's
preference will have.
- Algorithm complexity is high and execution time drastically increase
with more parties and maximum allowed preferences (my JavaScript
prototype does not limit amount of preferences on vote).

The most significant problem is likely the 2nd "feature". "Extremist"
parties with little support from voters who prefer other parties would
benefit from introducing more parties to the election to prevent
influence from being drained from them to other parties. Large parties
could also split up into two factions and instruct voters to set the two
factions as the first and second preference.
A beneficial aspect of this feature is that it encourages an increase of
parties in elections with few parties, whereas the encouragement
diminish the more parties that enter the election. This along with