Post election update: Will the German parliament have a gigantic size?

[This article was first published on Economics and R - R posts, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

This is just a short update to my previous post. Bundestag elections are over and according to the preliminary official results the new Bundestag will have 735 members. That’s 32 more than the previous 703 members, but at least far from 841 members predicted in my previous post that was based on last week’s forecast data.

The main reason is that the Bavarian CSU performed substantially better in terms of 2nd votes than predicted by the Forsa forecast from last week. While the forecast predicted a CSU 2nd vote share of 29.3% in Bavaria among the parties entering the parliament, the CSU actually achieved 36.8%.

Election results

I copied the preliminary results from and added them to my Github repository.

Let’s see whether we get the same seat distribution as in the official results:

dat = read.csv("results_2021.csv",encoding="UTF-8") %>%

res = compute.seats(dat)

## Total size:  734  seats

## # A tibble: 7 x 5
##   party  vote_share seat_shares seats ueberhang
##   <chr>       <dbl>       <dbl> <dbl>     <dbl>
## 1 SPD        0.282       0.281    206         0
## 2 CDU        0.207       0.206    151         0
## 3 Gruene     0.162       0.161    118         0
## 4 FDP        0.126       0.125     92         0
## 5 AfD        0.113       0.113     83         0
## 6 CSU        0.0567      0.0613    45         3
## 7 Linke      0.0536      0.0531    39         0

That are the same results as the preliminary official one’s, with one exception. As the party of the danish minority party, the SSW did not have to pass the 5% hurdle and also got one seat this election. Adding this seat leads to the total of 735 seats. Also note that all vote shares are only relative to the votes of the parties that enter the Bundestag.

How 146 voters in Munich generated 17 extra seats in the Bundestag

Except for the district Munich-South, which went to the Green party, the CSU won all direct districts in Bavaria. But e.g. the district Munich-West was won by the CSU won with only 146 votes ahead of the 2nd ranked candidate from the Green party. What would be the size of the parliament if the Green would have also won Munich-West?

dat.mod = dat %>%
  mutate_rows(party=="CSU" & land=="Bayern", direct = direct-1) %>%
  mutate_rows(party=="Gruene" & land=="Bayern", direct = direct+1)
res = compute.seats(dat.mod)

## [1] 718

We would have 17 seats less: only 718 seats. Note that in each of the 4 Munich districts the candidates of the SPD and the Green party have together substantially more direct votes than the CSU. If the voters of these two parties would have better coordinated so that the CSU gets no direct seat in Munich, the size of the Bundestag could have been reduced to even 683 members. Normally, one would have thought the Bavarian voters would take such a chance to reduce the amount of money spent in Berlin…

What if Linke would have gotten only 2 direct seats?

There were even direct seats more expensive in terms of Bundestag size than a direct seat for the CSU: one of the three direct seats captured by the Linke. If the Linke would not have won three direct seats, they would have lost all their 2nd vote seats, because they did not breach the 5% hurdle. The number of seats is not reduced automatically by the fact that a party does not enter the parliament. Yet, if the Linke would not get its second votes, the CSU share among the relevant 2nd votes would increase and a smaller increase of the Bundestag’s size would be necessary to balance CSU’s direct seats with its 2nd vote share.

So what would be the size of parliament if the Linke only would have gotten only 2 direct seats and one of its Berlin seats went to the Green party?

dat.mod = dat %>%
  filter(party != "Linke") %>%
  mutate_rows(party=="Gruene" & land=="Berlin", direct = direct+1)
res = compute.seats(dat.mod)

## [1] 698

We then would have a parliament of only 698 members. So the third direct seat won by the Linke generated 37 additional seats in the Bundestag.

To leave a comment for the author, please follow the link and comment on their blog: Economics and R - R posts. offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)