= votes %>%
compare.parliament group_by(PartyAb) %>%
filter(CountNumber == 0) %>%
summarise(partyVoteN = sum(prefCount)) %>%
mutate(partyVotePC = (partyVoteN / sum(partyVoteN)) %>%
multiply_by(100) %>%
round(digits = 2)) %>%
# Join to MMP
full_join(mmp %>%
select(PartyAb,
mmpElecSeatsN = seatsElecN,
mmpListSeatsN = seatsListN,
mmpTotSeatsN = seatsTotalN,
mmpTotSeatsPC = seatsTotalPC)) %>%
# Join to STV
full_join(stv %>%
group_by(PartyAb) %>%
summarise(stvSeatsN = n())) %>%
# Join to FPTP
full_join(fptp %>%
group_by(PartyAb) %>%
summarise(fptpSeatsN = n())) %>%
# Tidy up the missing
mutate(across(c(stvSeatsN, fptpSeatsN), ~ ifelse(is.na(.), 0, .)),
stvSeatsPC = (stvSeatsN / sum(stvSeatsN)) %>%
multiply_by(100) %>%
round(digits = 2),
fptpSeatsPC = (fptpSeatsN / sum(fptpSeatsN)) %>%
multiply_by(100) %>%
round(digits = 2)) %>%
# Difference from party vote
mutate(across(ends_with("SeatsPC"), ~ . - partyVotePC, .names = "{.col}_diff"))
Last time we determined the makeup of parliament under the three different systems. This time, we’ll reframe these results so we can perform a side-to-side analysis and draw some reasonable inferences. If you’ve skipped to the end1, a reminder that the series is divided into three parts:
1 This is the good bit, though.
- Part One
Will define the question, provide some overview of the different electoral systems, and clean the data. - Part Two
Conduct the analysis, and generate some preliminary results. - Part Three
Refine the analysis, and offer some interpetation.
Due to the presence of list seats in an MMP system, looking at electorates alone elides the comparative advantage of the MMP system. For this reason, I’ve broken this section into two subsections: the first determines the total composition of parliament under each of FPTP, MMP, and STV, whilst the second compares the winners of electorates under FPTP and STV.
Composition by Party
First, we’ll pull all our results for each electorate system into a single table. We’ll also calculate the percentage difference in party vote and received seats as a marker of how well each system reflects the preferences of the electorate.
Comparison of Parliament Under Three Voting Systems | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Australian Federal Election 2022 | ||||||||||||
Party | Total Vote (%) | Mixed Member Proportional | Single Transferrable Vote | First Past the Post | ||||||||
Electorate Seats (n) | List Seats (n) | Total Seats (n) | Seats (%) | Deviance (%) | Seats (n) | Seats (%) | Deviance (%) | Seats (n) | Seats (%) | Deviance (%) | ||
ALP | 32.58 | 71 | 10 | 81 | 36.65 | 4.07 | 77 | 50.99 | 18.41 | 71 | 47.02 | 14.44 |
LP | 23.89 | 40 | 19 | 59 | 26.70 | 2.81 | 27 | 17.88 | -6.01 | 40 | 26.49 | 2.60 |
GRN | 12.25 | 2 | 29 | 31 | 14.03 | 1.78 | 4 | 2.65 | -9.60 | 2 | 1.32 | -10.93 |
LNP | 8.00 | 23 | 0 | 23 | 10.41 | 2.41 | 21 | 13.91 | 5.91 | 23 | 15.23 | 7.23 |
IND | 5.30 | 3 | 0 | 3 | 1.36 | -3.94 | 10 | 6.62 | 1.32 | 3 | 1.99 | -3.31 |
ON | 4.96 | 0 | 12 | 12 | 5.43 | 0.47 | 0 | 0.00 | -4.96 | 0 | 0.00 | -4.96 |
UAPP | 4.12 | 0 | 0 | 0 | 0.00 | -4.12 | 0 | 0.00 | -4.12 | 0 | 0.00 | -4.12 |
NP | 3.60 | 10 | 0 | 10 | 4.52 | 0.92 | 10 | 6.62 | 3.02 | 10 | 6.62 | 3.02 |
LDP | 1.73 | 0 | 0 | 0 | 0.00 | -1.73 | 0 | 0.00 | -1.73 | 0 | 0.00 | -1.73 |
AJP | 0.60 | 0 | 0 | 0 | 0.00 | -0.60 | 0 | 0.00 | -0.60 | 0 | 0.00 | -0.60 |
CYA | 0.39 | 0 | 0 | 0 | 0.00 | -0.39 | 0 | 0.00 | -0.39 | 0 | 0.00 | -0.39 |
KAP | 0.38 | 1 | 0 | 1 | 0.45 | 0.07 | 1 | 0.66 | 0.28 | 1 | 0.66 | 0.28 |
XEN | 0.25 | 1 | 0 | 1 | 0.45 | 0.20 | 1 | 0.66 | 0.41 | 1 | 0.66 | 0.41 |
WAP | 0.23 | 0 | 0 | 0 | 0.00 | -0.23 | 0 | 0.00 | -0.23 | 0 | 0.00 | -0.23 |
GAP | 0.21 | 0 | 0 | 0 | 0.00 | -0.21 | 0 | 0.00 | -0.21 | 0 | 0.00 | -0.21 |
NB: Parties receiving fewer than 30,000 votes are not displayed. | ||||||||||||
Deviance is the percentage difference between the proportion of seats held compared to the 1st preference vote. | ||||||||||||
Total vote percentage includes independents, whilst the 5% threshold for qualification for list seats was based on party vote, which excluded independents.
This is why One Nation received list seats, despite receiving <5% of the total vote. |
I was initially a bit surprised by these results, as my assumption when I started this project was that STV would be the superior system as it removes the need for tactical voting. This reflects my own biases - the MMP system is explicitly designed to produce a parliament that reflects the voting preferences of the electorate.
What is impressive about the MMP system is just how well it achieves this, which suggests my subjective anxiety for tactical voting is probably overstated. With the exception of independents, who receive significantly fewer seats under the MMP system2, prominent minor parties gain a significant number of seats that better reflects voter preference. Another unexpected finding was how both FPTP and STV demonstrated similar levels of deviance.
2 This also reflects the approach I took by explicitly disqualifying independents from competing for list seats. This compromise was made because independents don’t exist under the MMP system, but significantly the independent cohort relative to parties.
One of the key limitations here is that as STV removes the benefit of tactical voting, this does not necessarily reflect what Australian voter behaviour would look like under an MMP system.
Composition by Electorates
Now we will compare the outcomes of electorates under STV and FPTP, highlighting electorates where the outcome was different. As MMP uses FPTP to determine the winner of electorates, there is no additional value for including MMP in this comparison.
= full_join(
compare.seat %>%
stv mutate(name = paste(GivenNm, Surname)) %>%
select(StateAb, DivisionNm,
stvID = CandidateID, stvName = name, stvParty = PartyAb, stvCount = prefCount, stvMargin = margin),
%>%
fptp mutate(name = paste(GivenNm, Surname)) %>%
select(StateAb, DivisionNm,
fptpID = CandidateID, fptpName = name, fptpParty = PartyAb, fptpCount = prefCount, fptpMargin = margin),
by = c("StateAb", "DivisionNm")) %>%
mutate(identical = ifelse(stvID == fptpID, TRUE, FALSE)) %>%
select(-c(stvID, fptpID))
Comparison of Electorates with Differing Outcomes Under STV and FPTP | |||||||||
---|---|---|---|---|---|---|---|---|---|
Australian Federal Election 2022 | |||||||||
State | Single Transferable Vote | First Past the Post | |||||||
Elected Member | Party | Votes (n) | Margin (n) | Elected Member | Party | Votes (n) | Margin (n) | ||
Bennelong | NSW | Jerome LAXALE | ALP | 50,801.00 | 1,954.00 | Simon KENNEDY | LP | 41,206.00 | 3,610.00 |
Boothby | SA | Louise MILLER-FROST | ALP | 60,579.00 | 7,451.00 | Rachel SWIFT | LP | 43,196.00 | 6,450.00 |
Brisbane | QLD | Stephen BATES | GRN | 58,460.00 | 8,122.00 | Trevor EVANS | LNP | 41,032.00 | 11,380.00 |
Curtin | WA | Kate CHANEY | IND | 53,847.00 | 2,657.00 | Celia HAMMOND | LP | 43,408.00 | 12,466.00 |
Fowler | NSW | Dai LE | IND | 44,348.00 | 2,793.00 | Kristina KENEALLY | ALP | 30,973.00 | 5,627.00 |
Gilmore | NSW | Fiona PHILLIPS | ALP | 56,039.00 | 373.00 | Andrew CONSTANCE | LP | 46,941.00 | 6,766.00 |
Goldstein | VIC | Zoe DANIEL | IND | 51,861.00 | 5,635.00 | Tim WILSON | LP | 39,607.00 | 5,792.00 |
Higgins | VIC | Michelle ANANDA-RAJAH | ALP | 49,726.00 | 3,941.00 | Katie ALLEN | LP | 38,859.00 | 11,672.00 |
Kooyong | VIC | Monique RYAN | IND | 54,276.00 | 6,035.00 | Josh FRYDENBERG | LP | 43,736.00 | 2,433.00 |
Lyons | TAS | Brian MITCHELL | ALP | 37,341.00 | 1,344.00 | Susie BOWER | LP | 27,296.00 | 6,001.00 |
Mackellar | NSW | Sophie SCAMPS | IND | 51,973.00 | 4,955.00 | Jason FALINSKI | LP | 40,993.00 | 3,269.00 |
North Sydney | NSW | Kylea Jane TINK | IND | 51,392.00 | 5,666.00 | Trent ZIMMERMAN | LP | 36,956.00 | 12,479.00 |
Robertson | NSW | Gordon REID | ALP | 50,277.00 | 4,344.00 | Lucy WICKS | LP | 38,448.00 | 2,217.00 |
Ryan | QLD | Elizabeth WATSON-BROWN | GRN | 52,286.00 | 5,256.00 | Julian SIMMONDS | LNP | 38,239.00 | 8,236.00 |
Tangney | WA | Sam LIM | ALP | 56,331.00 | 5,114.00 | Ben MORTON | LP | 43,008.00 | 2,068.00 |
Wentworth | NSW | Allegra SPENDER | IND | 48,186.00 | 7,449.00 | Dave SHARMA | LP | 35,995.00 | 4,185.00 |
There are a couple of interesting observations here. Firstly, the teal wave would not have occurred in a FPTP system3. This may reflect the fact that centrist independents are uniquely positioned to draw preferences from both major parties and the Greens. Secondly, the L/NP benefits significantly more than Labor under FPTP. This may reflect the greater number of minor parties on the left wing, which dilutes the Labor vote.
3 Teal candidates include Kylea Tink, Sophie Scamps, Allegra Spender, Monique Ryan and Zoe Daniel. The only teal who would have held her seat under FPTP was Zali Steggall.
Again, one of the key limitations here is that as STV removes the benefit of tactical voting, first preferences may not reflect voter behaviour under FPTP.
Electoral Maps
The below maps are very similar, reflecting that ~90% of the parliament remains unchanged in each system4. The fact that the changed electorates were in dense urban areas further adds to the unimpressiveness.
4 This is still significant though!
Conclusions
After this, I think that MMP is a better system for mapping voter preferences to parliament composition. Whilst I think STV tends to track voter preferences at an electorate level, it’s failing is that it only tips relatively unsafe seats and so only makes a difference on the margins. Conversely, MMP works at the level parliament rather than electorate level, and so better expresses views that are held by a small percentage of the population across a wide geographical area.