A gigantic Trump lead on Election Night may still mean a Biden PA win.

Inspired by a great, terrifying analysis from Stefan Zajic, I thought I’d try to replicate it. In a world where the election is tied, but mail-ins are slow to count, what would the results look like on Election Night? I’ll use existing data about mail-ins, and some reasonable guesses.

The goal of this is obviously not to try to predict the results from incomplete data. It’s to warn you that a Biden win is compatible with some jaw-dropping Trump numbers on Election Night.

Let’s assume an election that is ultimately tied. For ease, assume the final results will be similar to 2016: 3 million votes for Trump, 3 million for Biden. And all of the counties vote proportionally to how they did in 2016.

Now, assume that the returned mail-in ballots vote by party. Currently 66% of the ballots come from Democrats, 23% from Republicans, and 11% from others. So far 2.4M ballots have been returned, and 0.7M are still outstanding. Given the slopes of the time curves, and the delays in the web data, let’s assume half of the outstanding ballots are eventually returned, and they come in at the same party proportions. That puts us at basically 2.7M returned ballots, 1.8M from Democrats, 0.6M from Republicans, and 0.3M from others. Assuming the Dems vote for Biden, the Reps vote for Trump, and the others are split 50-50, that yields 2.0M for Biden and 0.7M for Trump.

That means among the in-person votes, we’d expect 3.0 – 2.0 = 1.0M votes for Biden, 3.0 – 0.7 = 2.3M votes for Trump.

If no mail-in votes were counted on Election Day then Trump would appear to be winning 70%-30% on Election Night even though the election is tied.

How many mail-in votes will be counted by 10pm on Election Night? I’m relying on great reporting from the Capital Star and WHYY, supplemented by Twitter must-follow Ben Forstate.

I’ll assume counties start counting mail-ins whenever they’ve said, and stop at 10pm. I make some very rough estimates using the reporting on how fast counties can go given their equipment, and scaling by the equipment each county reports having. For example, Philadelphia has 22 letter openers, and reports being able to count 12,000 mail-ins per hour. They’ll start at 7am on Election Day, yielding 180,000 by 10pm. The Penn Capital Star has equipment for 39 counties, I’ll assume zero ballots are counted in the other counties. (This isn’t a huge deal, since the the paper has the big counties mostly covered.)

View code
library(dplyr)
library(magrittr)

rates <- tribble(
  ~county, ~hours, ~rate,
  "PHILADELPHIA", 15, 12e3,
  "BUCKS", 15, 3e3,
  "Northampton", 15, 1.5e3,
  "PIKE", 15, 1.1e3,
  "WAYNE", 15, 1.1e3,
  "WYOMING", 15, 0.5e3,
  "LUZERNE", 15, 0.5e3,
  "BERKS", 15, 1.5e3,
  "Chester", 15, 5e3,
  "LANCASTER", 15, 0.5e3,
  "YORK", 15, 1.5e3,
  "DAUPHIN", 8, 1.2e3,
  "NORTHUMBERLAND", 15, 0.5e3,
  "COLUMBIA", 15, 0.2e3,
  "SULLIVAN", 15, 0.5e3,
  "BRADFORD", 15, 0.5e3,
  "ADAMS", 15, 1.5e3,
  "PERRY", 15, 0.5e3,
  "SNYDER", 14, 0.5e3,
  "MIFFLIN", 15, 0.5e3,
  "CENTRE", 15, 0.5e3,
  "CLINTON", 15, 0.5e3,
  "POTTER", 13, 0.5e3,
  "HUNTINGDON", 15, 0.1e3,
  "MCKEAN", 15, 0.5e3,
  "CAMERON", 13, 0.1e3,
  "CLEARFILED", 15, 0.5e3,
  "ELK", 15, 0.5e3,
  "BLAIR", 13, 0.5e3,
  "BEDFORD", 15, 2.4e3,
  "ALLEGHENY", 15, 3e3,
  "SOMERSET", 15, 1.2e3,
  "INDIANA", 13, 0.5e3,
  "FAYETTE", 15, 0.5e3,
  "BUTLER", 15, 1.2e3,
  "ERIE", 15, 1.2e3,
  "CRAWFORD", 5, 1.2e3,
  "LAWRENCE", 15, 1.2e3,
  "BUTLER", 15, 1.2e3,
) %>%
  mutate(eday_count = hours * rate) 

mailin <- readRDS("../election_night_2020/tmp/mailin_age.RDS") %>%
  filter(ballot_mailed) %>%
  group_by(county, party) %>%
  summarise(n=sum(n * (0.5 + 0.5*ballot_returned))) %>%
  group_by(county) %>%
  summarise(
    biden = sum(n * case_when(party=="D"~1, party=="O"~0.5, TRUE ~ 0)),
    trump = sum(n * case_when(party=="R"~1, party=="O"~0.5, TRUE ~ 0))
  ) %>%
  mutate(p_biden = biden / (biden+trump))

mailin %<>% 
  left_join(
    rates %>%
      mutate(county=toupper(county))
  ) %>%
  mutate(eday_count = ifelse(is.na(eday_count), 0, eday_count))

mailin %<>%
  mutate(
    biden_counted = pmin(biden, p_biden * eday_count),
    trump_counted = pmin(trump, (1-p_biden)*eday_count)
  )

# sum(mailin$biden_counted + mailin$trump_counted)
# sum(mailin$biden_counted)
# sum(mailin$trump_counted)

In total, we should expect about 600,000 mail-in votes counted on Election Day. They are disproportionately from Democrats, with 420K for Biden, and 180K for Trump.

Adding those to the Live Votes above, we get election night results of 1.4M for Biden, 2.5M for Trump, or a Trump lead of 64%-36%, a lead of 28 points.

Remember, this is a world where the true election is tied. If the gap is smaller than that, then Biden will eventually win.

Once again, under these assumptions, if Trump is up only 27 percentage points at 10pm, Biden has won PA.