Presidential election prediction 2: still too early, but less misleading

Two trains headed for a head-on collision, with a man standing in front
The two candidates take the stage in front of moderator Chris Wallace

Twelve days ago, I launched my first prediction of the results of the 2020 U.S. Presidential election, far too early, before even a single debate had happened. Last night, we had our first debate (pictured to the right). I have downloaded a transcript of the debate (sixty-five single-spaced pages, so help me God). I’ll have a lot more to say about it over the next few days – but for tonight, it’s time for another premature prediction.

Usual disclaimer for all my election predictions: I know who I am going to vote for and I don’t see any reason to keep that secret – but I’m not a pundit, I’m a scientist, and this isn’t a blog about my opinions, it’s a blog about scientific thinking. So I’m trying my best to stay objective and predict who will win, not who I think should win.

But before I get to the premature predicting, I’ve been thinking a lot about how to visualize these predictions for you. The thing that matters in these predictions is what candidate, if any, reaches the magic threshold of 270 electoral votes to be elected President. Showing the states on a map helps give you a sense of what candidate is likely to win, but ultimately the specific states don’t matter – only the total count matters. And here’s an illustration of that.

Use the slider below to compare two states from my previous prediction map, each of which I cut out and de-labeled. I was careful to show the states on the same scale at exactly the same size.

Think fast – which state is worth more electoral votes, red or blue?

MontanaRhode Island

The states, of course, are Montana and Rhode Island, worth three and four electoral votes respectively. Showing their shapes makes it appear that Montana is far more important – but remember, specific states don’t matter, only electoral votes matter. Even if you know that Montana is worth three and Rhode Island is worth four, it’s hard to look at the map and not feel like Montana must be more important. Look, it’s so much bigger!

A map to tell a clearer story would show the sizes of each state based not on their land area, but on the number of electoral votes they offer to the candidate who receives the most votes from those states. Like this – again, the images are exactly the same size and you can swipe to compare them.

Three connected Hexagons for MontanaFour connected hexagons for Rhode Island

The best map to tell this story, then, would have every state sized according to its number of electoral votes, from the eight with three electoral votes each to California’s fifty-five. And ideally it would do this while preserving the outline and position of each state so that the map is still recognizable as a map of the United States. Many other people have created such maps (examples from Engaging Data and Daily Kos and Medium and FiveThirtyEight), but I wanted one that I could freely use and easily modify. So, armed with my data visualization skills and considerable stubbornness, I made my own.

And behold, my current-as-of-today prediction for the 2020 U.S. Presidential election, presented on my shiny new electoral college map. Click on the picture to go to a more traditional view at 270towin.com, which you can then use to build your own prediction.

Electoral vote map of my predictions of the 2020 U.S. presidential election results, as of right now. Predicted final score:
Biden 320
Trump 218

I could go on for pages and pages about how I created the map and the various decisions that went into it, but I’ll save that for another time and just explain the prediction. As usual, states marked in blue are the ones I am predicting will vote for Biden and states marked in red are predicted for Trump – although never forget that those colors are completely arbitrary. Darker shades of either color indicate I am more confident about the prediction for that state. Oh, and the map also includes the malarkey in Maine and Nebraska.

I’ve made a few changes from my last set of predictions, nearly all in Biden’s favor.

  1. I can no longer ignore the latest polls in Arizona that show Biden holding steady with a 2 to 3 percentage point lead. It’s too narrow a lead to be very confident, but I think it’s clear that I have to declare Arizona a tilt for Biden rather than a tilt for Trump. If that prediction is right, adding Arizona’s 11 electoral votes to the ones he has already would give Biden a commanding lead.
  2. The same with the polling for the 3 electoral votes in New Hampshire and the one in Nebraska’s second district, only more so.
  3. I almost can’t believe I’m saying this, but I’ve moved Virginia from lean Biden up to likely Biden, because he is holding steady with a 5 to 12 percentage point lead in statewide polling. We may be seeing the end of Virginia as a swing state, just as we saw Missouri go from swing to solidly Republican between 2004 and 2016.
  4. The race has tightened considerably for the 15 electoral votes in North Carolina, enough that it’s basically a 50/50 tossup. I still think Trump will do well there, but the race is close enough that I’ve moved North Carolina from Leans Trump to Tilts Trump.
  5. Trump is toast, covered with green chile, in New Mexico. I’ve moved New Mexico from Likely Biden to Safe Biden.
  6. The move in Trump’s direction is in Indiana, which I moved all the way from Leans Trump to Safe Trump. I think I was distracted by Obama winning the state in 2008 and forgot to think about the actual polling data. Given how much the political landscape has changed since then, that might as well be when dinosaurs roamed the Earth.

So here are the predictions again, shown on my new electoral college map – which I am damn proud of creating. Click on it to go to a more traditional map from 270towin.com. Click on that 270towin map to try it yourself!

Electoral vote map of my predictions of the 2020 U.S. presidential election results, as of right now. Predicted final score:
Biden 320
Trump 218

What do YOU think the final results will be? Let me know in the comments!

I need a better way (very brief daily COVID-19 data update CLXXXII)

A hamster running on a wheel very very fast
My Mac’s processor trying to keep up with the calculations required by my COVID-19 spreadsheet

Unfortunately, COVID-19 has affected so many people in so many places that my spreadsheet has gotten too big to work with. Going from the raw data provided by the Corona Data Scraper citizen science project to my graphs now literally takes about 4 hours of constant attention to Excel. I’ll have to rethink my approach.

Most likely I’ll do the preprocessing in Python, a simple but powerful programming language used by scientists all over the Universe. I’ll try to provide step-by-step instructions on how to how to run Python, and to document my programs extensively, so you can try them yourself. Even though Python can make graphs, I plan to continue making the graphs in Excel, because it’s a simple tool that so many of you already know how to use.

It might be a few days until my next COVID-19 update. In the meantime, I’ll keep posting other things on my usual Monday-Wednesday-Friday schedule, including something coming later today.

I took some time off. COVID-19 did not. (Daily COVID-19 data update CLXXXI)

A screenshot from the absolutely terrible film "Mac and Me" (1988) featuring a kid in a wheelchair and an alien something something adventures saving the world?
Mac and Me

Graphs day 181, pandemic day 188, day 258 since the first cases were diagnosed.

I took some time off to work on some other projects, including a very cool study of federal banking data with my JHU colleague and friend Mac McComas (you’ve heard from him here before). What’s the biggest factor in who gets loans in Baltimore City and who does not? Spoiler alert: it’s race.

But the virus never takes a day off, and since I made my last graph, another nearly 7 million people have been diagnosed with COVID-19, and more than 120,000 have died. We are rapidly closing on one million deaths. Not bad for a virus that we are pretty sure had not infected even a single human one year ago.

Total cases of COVID-19 diagnosed worldwide: 28,524,156

Total deaths: 902,224

I’m once again using data from the amazing online volunteer effort that is the Corona Data Scraper project. I explained how the project works in more detail in a previous post, but in short a worldwide team of volunteers has written a complex set of Javascript programs to automatically retrieve and process data from thousands of individual sources, primarily national, state, and local health departments. In other words, please don’t tell me it’s a conspiracy. It literally can’t be. At no point was all the data in the hands of any person or entity until it shows up on their website and I paste it into my template. And don’t tell me I’m the conspiracy – I have always been entirely transparent about what I do here, and I always will be, even though it costs me significant time and effort and even a little bit of money. As always, you can download the template at the bottom of this post and see for yourself.

It took me literally most of the day to get the data cleaned and into my template, so I don’t have any new graphs to show you today. But here is an updated version of one I posted recently, showing COVID-19 case rates in various metro areas in Florida. Usual graph styles apply.

COVID-19 cases in metro areas in Florida

There is definitely cause for cautious optimism from this graph, but with two caveats. First, the case rate is still ahead of where it was during the first peak of the Florida epidemic in late March. Second, schools are a savage vector for virus transmission, and schools in many parts of Florida have been open for a little more than two weeks. So if there is going to be a third wave of infection that results, we should start seeing it riiiiiiiiiight about now. Let’s hope we don’t.

I obviously haven’t been living up to my initial plan to post an update every day of the pandemic, but why not start now? Another update tomorrow.

Want to give these graphs a try? Please do! Here, for the first time, is version 8 of my template. Beware, it’s big, it will take several minutes per calculation. Be sure you have Excel set to manual calculations.

Pandemic updates tomorrow. And probably not literally every day until the pandemic ends? But the virus is tenacious, and so am I.

Have you heard about the herd? (Daily COVID-19 data update CLIV)

Five moose, because Sweden
Sweden demonstrates its controversial herd immunity strategy

Graphs day 154, pandemic day 161, day 231 since the first cases were diagnosed. Today, let’s go back to the data from the JHU Coronavirus Resource Center and look at national-level graphs (since my version 7 spreadsheet has a template already set up for that).

Total cases of COVID-19 diagnosed worldwide: 21,879,368

Total deaths: 773,781

Happy Independence Day to two countries today: Indonesia (the world’s fourth-most-populous country) and Gabon (a country of two million people in central Africa with one of the world’s coolest national anthems). We’ll include lines for both countries in today’s post.

Usual graphs and labels for all five categories today. All five graphs are in the usual styles. The main graph is on the regular scale, from zero to 200 new cases diagnosed per day per million people – with the exception of the “getting worse” graph, which runs from zero to 300. Where there are smaller inset graphs, they are on the “Qatar scale,” which runs from zero to 700 cases per million people. Each country gets a unique color in each graph (although the colors can repeat across graphs). Line labels show the name of the region, and also the mortality rate (cumulative deaths per million people) in the region – cumulative because the dead stay dead. The thickness of the lines and the size of the labels depend on the cumulative case fatality rate – the number of people who died divided by the number diagnosed.

Regions where COVID-19 was quickly contained

Regions where COVID-19 was quickly contained

After 101 days with no local transmission of COVID-19, New Zealand experienced its first local case on day 102. There’s a very slight uptick in cases there and in South Korea, but keep it in perspective: the total number of cases in both places is still very low.

Regions where COVID-19 is currently under control(-ish)

Regions where COVID-19 is currently under control

France is still ticking depressingly upward. If cases in France reach 52 per million people per day – half of their peak in mid-April – I will sadly move them into the Second Wave category.

Regions moving in the right direction(-ish)

Regions where cases are decreasing(-ish)

Gabon is on this graph (purple line). Reported cases have gone up and down somewhat, but never above 75 cases per million people per day. Qatar had a bump within the past two weeks, but it appears to have passed for the moment. And unfortunately Sweden seems to be on an uptick again, but it’s still too early to tell if it’s a real increase or just random variation. Antlers crossed that Sweden’s herd immunity strategy is working, but it’s really not looking good at the moment.

Regions experiencing a second wave of COVID-19 cases

Regions experiencing a second wave of COVID-19

The second wave is maaaybe over in Australia, but keeps getting worse in Spain.

Regions where the first wave of COVID-19 continues to get worse

Regions where things are getting worse

I showed some different regions today. I’m showing Georgia on the main graph, but I forgot to swap them in for Florida on the Qatar scale inset, so you get a bit of both today. This is where Indonesia goes also. Cases are clearly increasing in Indonesia, but they are increasing very slowly and are still at a quite low level.

Coming up tomorrow: a break from the COVID-19 graphs and a return of the series about people and things who are Not What They Seem: enjoy a new episode of Except They Weren’t.

Want to give these graphs a try? Please do! Here is version 7.3 of my spreadsheet, which is just like version 7.2 but is now updated with data up to yesterday.

Pandemic updates tomorrow, and every day until the pandemic ends or I do.