How partisan are WA organizational donors?

In previous posts we’ve looked at how our political system has become increasingly polarized, with our analysis of voting records showing that many self-styled moderates and independents are exhibiting much more partisan behavior when voting on the House or Senate floor.  Having served for a few years now on a PDC open data advisory group, I realized that the same type of analysis could be done for organizational donors.  Despite this being public data, not many people in Washington state know who the biggest political donors are, much less who they support.

So, are many of these “non-partisan” or “bi-partisan” organizational donors more partisan than they let on?

We can figure this out, and the methodology is pretty simple.  The PDC Open Data Portal publishes all contributions to candidates and political committees back to 2008.  For this first analysis, we looked at donations to partisan legislative and statewide candidates from businesses, unions and political action committees.  The partisanship score for each donor is the difference in percentage of donations by party, giving each a range from 100 (exclusively Republican) to -100 (exclusively Democrat).

Most of the effort here is involved with the fuzzy matching algorithm, since candidates are very inconsistent on how they report the names of these organizations to the PDC.  I use a trigram matching method, which isn’t perfect…but it does pretty well.  Currently, contributions are grouped under the same donor if 80% or more of the trigrams match, but this is adjustable.

Here are the results:

Partisan Donors (2008-18)

If you visit WhipStat.com, you’ll now find an interactive and animated version of our organizational donor partisan analysis that allows you to filter by jurisdiction type and date range.

Filters

If you’d like to do further analysis, feel free to hit the Download button for a tab-delimited table of the charted data.  Note that for now we don’t display or download the complete donor dataset, as that includes over 8,000 organizations.

A few things become apparent when reviewing the results:

  • Some of the biggest legislative donors give heavily to candidates from both parties.
  • About 6% more is given to Democrats than Republicans in legislative races, but that increases to 28% when looking at statewide races.

Up next:  We’ll take a close look at hard money vs. soft money contributions.

Is Washington State Gerrymandered?

“Gerrymandering” is manipulating political boundaries to favor a party. Wikipedia has an excellent summary and examples of the concept:

How to Steal an Election - Gerrymandering

We’ll take a purely data-driven approach to measure if Washington State’s legislative districts are gerrymandered. While there is no absolute mathematical definition for gerrymandering – and therefore no definitive test – there are good objective statistical tests to measure anomalies.

This article focuses on applying these approaches to the legislative boundaries in WA state.

  1. First, we’ll look at the actual election results and see if there’s anything suspicious on the surface.
  2. Then we’ll run a standard statistical test – the McGhee test developed at the University of Chicago.
  3. And then we’ll run some generic algorithms to produce actually gerrymandered maps and compare to actual results.

To simplify nomenclature throughout this analysis, we’ll provide summary from the GOP perspective. The results can all be directly flipped to switch to the Democrat perspective. (IE, almost always, a x% GOP result means a (100-x)% Democrat result).

To simplify nomenclature, we’ll look at results from the GOP There’s no definitive criteria for creating district boundaries. Districts must be contiguous and similar in population. However, even these criteria are tricky. For example, a district boundary is set for 10 years, so as population grows and shifts over time, districts’ populations may shift. Districts can’t be simple shapes like hexagons because they may need to account for geographic boundaries or roads.

Here is a map of legislative boundaries. Since districts are population based (and not based on square-miles), one can see the districts are more concentrated in dense population centers.

WA Leg Districts 2016

[1] Looking at actual election results

WA has 49 legislative districts, and each district has 2 house members and 1 senate member.

As of the last statewide legislative election in Nov ‘16, in the senate, the GOP / Democrat split was 24-25. In the house, the GOP/ Democrats split was 48- 50. Roughly 90% of the 49 districts have all three members from the same party, indicating that individual districts carry a definitive partisan bias. But when tallying up all the legislative races, the overall split is almost evenly divided between parties in both the house and senate caucus.

Here’s how the GOP results in the legislative caucuses compares to their 2016 statewide results between a Democrat and Republican candidate. [ Source: WA Secretary of State] :

GOP Candidate Percent Vote
2016 Secretary of State (Wyman) 54.74%
2016 GOP House 48.98%
2016 GOP Senate 48.98%
2012, Governor (McKenna) 48.50%
2016 Auditor (Miloscia) 47.69%
2016 Public Lands (McLaughlin) 46.84%
2016 Governor (Bryant) 45.61%
2016 Lt. Governor (McClendon) 45.61%
2016 Insurance Commissioner (Schrock) 41.66%
2016 Senate (Vance) 40.99%
2016 President (Trump) 38.07%

So clearly the Republicans have done a better job in the legislature than at most statewide races. Only Kim Wyman has outperformed the caucuses.

Some may suggest gerrymandering as the only way that the Republican caucuses could outperform statewide races. But a statewide race requires a single candidate to appeal to all 49 districts. Whereas legislative districts have a different candidate per district, allowing each candidate to vary to “fit the district”.

The real test of boundaries is to focus on a single partisan candidate and compare what percent of legislative districts they’d “win” to their statewide percentage.  For example, Trump got 38.07% of the statewide vote. He also won 19 / 49 legislative districts, which is 38.78% – nearly the same ratio that he had statewide. That is a strong indicator that the districts aren’t gerrymandered.

We can see the results from other partisan statewide candidates:

GOP Candidate % of Statewide vote % of Districts won
2016 Secretary of State (Wyman) 54.74% 78%
2016 Auditor (Miloscia) 47.69% 53%
2016 Public Lands (McLaughlin) 46.84% 47%
2016 Governor (Bryant) 45.61% 47%
2016 Lt. Governor (McClendon) 45.61% 45%
2016 President (Trump) 38.07% 39%
2016 Insurance Commissioner (Schrock) 41.66% 33%
2016 Senate (Vance) 40.99% 27%

This analysis is looking at a broad range of races across a 15% spread. If the districts were actually gerrymandered, we’d expect that GOP candidates consistently performed better (or from the Democrat’s perspective, worse) in ‘% of district won’ than by ‘% of statewide vote’. But they do not. There’s an almost linear correlation between these results (R2=.83). Candidates that won more statewide votes also won more individual districts. Some GOP candidates benefit from the legislative boundaries, some performed worse.

[2] Bring out the math – running the statistical tests

The mathematical test we’ll run is the McGhee test, developed by Eric McGhee from University of Chicago. “Wired” explains “In that paper, they proposed a simple measure of partisan symmetry, called the “efficiency gap,” which tries to capture just what it is that gerrymandering does. At its core, gerrymandering is about wasting your opponent’s votes: packing them where they aren’t needed and spreading them where they can’t win.”

The test defines a “wasted vote” as any vote that does not directly contribute to a victory. If you win a district, any vote past 50% is considered wasted (it wasn’t necessary to win); if you lose a district, all of the votes were wasted. Practically, this means:

  • Unless you win a district with exactly 50%+ 1 votes, there are at least some “wasted” votes.
  • large blowout victories and 49.9% “close calls” produce the most “wasted” votes.

It then defines an “efficiency gap” as the (difference in each party’s wasted vote divided by the total vote). There is no definitive threshold for the efficiency gap that defines gerrymandering, but McGhee calculated the average efficiency gap in 2012 was 6%, and the egregious gerrymandering examples have are over 10%.
We apply the McGhee test on the 2016 presidential race across the legislative districts using election data from the Secretary of State:

GOP Candidate Percent Vote Egap
2016 Secretary of State (Wyman) 54.74% -16.3%
2016 Auditor (Miloscia) 47.69% -6.3%
2016 Public Lands (McLaughlin) 46.84% -2.1%
2016 Lt. Governor (McClendon) 45.61% -2.2%
2016 Governor (Bryant) 45.61% -4.5%
2016 Insurance Commissioner (Schrock) 41.66% 2.6%
2016 Senate (Vance) 40.99% 6.8%
2016 President (Trump) 38.07% -3.7%

The average gap from this spectrum of WA races is 3.2%, well below the national average. So our statistical test suggest that the districts are not gerrymandered.

[3] What would gerrymandering look like?

A final approach we take is to work backwards: we can deliberately produce gerrymandered maps and compare them to the actual map.
Here, we use a genetic algorithm, which starts with an initial configuration and then mutates it over a series of iterations as it “evolves” towards a goal. Mutations must preserve certain rules like contiguous boundaries. In this case, the goal was to maximize the number of GOP legislative victories, where victories where calculated using a Monte Carlo simulation driven by previous election turnout results from record poor GOP years. We used election results that initially gave GOP only 21 of the 49 districts – simulating a “worst case scenario” for GOP that put them near their historical lows. After series of genetic mutations, the final result was a map with 26 of 49 GOP wins – a pickup of 5 seats. The chart here shows the evolution progressing along the top.

Generic Algorithms Gerrymandering

However, we notice that the boundaries here definitely look suspicious. They’re clearly warped and have unnatural borders designed to carve out an advantage.
What this also shows is that truly gerrymandered results could produce a significant GOP advantage – even in a year with record poor Republican voter turnout.

In conclusion

To summarize:

  1. The legislative results are within proximity of the statewide governor results. And when measured across a wide range of candidates, there is no consistent advantage from district boundaries over a pure statewide vote.
  2. The house and senate GOP caucus performances do perform exceptionally well – particularly compared to the statewide performance of most GOP candidates. But this appears to be more due to the caucuses picking candidates to fit their district rather than gerrymandering.
  3. If we deliberately create theoretical gerrymandered districts via computer simulation, the potential GOP advantage would be significantly higher than what we witness.

In the absence of any contradicting evidence, we would conclude that WA state’s legislative boundaries are fairly drawn and not gerrymandered.

LD 45 Turnout Statistics

The special election for the 45th district senate seat is Nov 7th 2017, just a few days away. Here are some statistics based on the ballot returns reported by the Secretary of State.

 The district is about 92,000 voters. Overall turnout as of Nov 4th is 21.3%. This is the highest turnout for an election district over 30,000 voters.

King County turnout  overall is 15.4%.  For comparison to other off-year legislative elections, Teri Hickel’s ’15 special election was 35%.

 

There has been significant new voter registration in the district since Andy Hill’s ’14 election victory. Here is a breakdown registration date:

% of district … registered since…
2% Since ’17 Primary
6% Within last year
21% Since Nov ’14

It’s a predominantly Democrat district.  In ‘14 and ’16 house races, Democrat’s average victory in LD 45 has been around 58%.  The district also voted over a 2:1 for Hillary Clinton over Donald Trump. Kim Wyman and Andy Hill are the only Republicans to have won this district.

The SOS does not report on the actual ballot results until election night, but we can use the Voter-Science party id database [1] to see how results are looking prior to election day.

 Here is a heat map of Democrat turnout (left) vs. GOP turnout (right) in the 45th :

LD45Tunrout-Nov4th2017

Of Voters identified as GOP, 28% have voted. Of voters identified as Democrats, 23% have voted.  Of voters identified as Independents, only 14% have voted.  So while the democrats may have raw volume of numbers, the GOP has driven higher turnout amongst their base.  

 [1] The Voter-Science party ID database has a party ID for 87% of the individuals in the 45th district and has accurately predicted all 45th races within 98.5% accuracy since 2015.

Why should you save your data back to the cloud

A major benefit of a mobile canvassing app is that your work is automatically recorded. However,  it’s common for people to export their data to another system and work off that; or print out their lists and work off a printed walk list. In those cases, be sure to update your data in TRC afterwards! When using paper lists, here’s why it’s worth the extra effort to save your results back to TRC:

 

1. Ensure your data is saved and secure

Paper can get lost or stolen.  Whereas data in TRC is safe and secure. It’s saved on the cloud and TRC’s sandbox model guarantees that your data will never get accidentally overwritten.

2. Easy sharing with other campaigns

Once your data is in TRC, it’s easy to conditionally share portions of it with other campaigns. For example, suppose you’re running for a city council race which overlaps another schoolboard race. TRC can automatically figure out just the overlapping records and just share those. That analysis is hard to do with paper.

Furthermore, suppose you’re canvassing team is asking three separate questions and you only want to share results from one of the questions. Again, once your data is in TRC, you can easily do that controlled granular sharing.

3. Make sure you don’t double-contact the same people.

Updating the data on the server ensures your campaign doesn’t accidentally contact the same person multiple times, especially when you have multiple canvassers operating independently.  Accidentally contacting the same people multiple times would be wasting resources and could also be perceived as harassment.

4. Enables searching for patterns and identifying new supporters

Knowing your specific supporters lets us run predictive analytics to identify other potential supporters.  For example, suppose your district has 50,000 voters. If your canvassing activity identities 200 supporters and another 100 non-supporters, we can then use analytics to search for patterns. Perhaps you’re doing well among certain issues, we can then use predictive analytics to find new likely supporters that are also interested in those issues. That can further refine your target.

5. Get GOTV reporting

TRC provides campaign-wide reports for Get-out-the-vote and election predictions. In 2016, these reports were frequently 99% accurate for legislative district races. The more data you provide back to TRC, the more accurate predictions and reports it can provide back you.

TRC Map View

TRC includes a map view that shows you the voters as pins on a map. This is a standard view similar to what you’d see in any canvassing app. Since it runs directly in the browser, there’s no additional installation step needed.

The map view is exactly the same underlying information as in the List View, so you’re encouraged to use whichever view makes you most productive.  You can make changes in the map view, and then immediately switch to the List View and see them.

A common pattern is to use Geofencing to carve up a large region into smaller neighborhoods, and then you can use the map view to canvass those neighborhoods.

Using the map view

The pins are color coded by party ID. Hollow pins are doors that have already been visited. You can go back and edit answers on visited doors.

trc-map-1

You can touch a pin to see the voters at that household:

trc-map-2

If nobody is home, you can mark “Result Of Contact” for the door and move on. Else, you can select an individual to see their information and record the canvassing results.

Be sure to

  1. fill out the Party ID,
  2. fill out whether they’re a supporter, and
  3. result of contact.
  4. hit the “Save” button

trc-map-3

Getting to the map view

You can get to the map view by touching the “View Map” buttons on the standard walking list.

Offline usage

The map view leverages HTML5 local storage support to provide an offline experience even though it runs in a browser.

This means that you can load the map view while you have an internet connection, and then canvass offline, and then upload the results when you’re done. However, it’s highly encouraged to canvass with a cel connection so that your results are immediately uploaded. Even if you temporarily lose connectivity, your results will be uploaded when you regain a connection.

To verify your results are all uploaded, on the main page, touch “Local Storage” in the upper right corner. That will take you to a page like this:

Hit the refresh button to pull the current status. If you have outstanding changes and running offline, you’ll  see something like this:

trc-map-offline-1

Once you’re back online, hit the “Refresh” button again once online and verify the “Number of Changes not yet uploaded” is 0.

trc-map-offline-2

 

 

How to filter lists

TRC  has rich filter abilities that let you:

  1. Interactively explore your data.
  2. Determine a subset of targeted voters.
  3. Create a subsets that you can assign and share with others 
  4. Use your filtered view with any other feature in like printing, exporting a mail list, and maps.

Accessing the Filter plugin

There are several ways to access the filter ability:

1. You can access the Filter plugin directly from here.

2. You can access filtering via the standard list view on a sheet. Click the filter icon in the top-left view:

trc-filter-icon

3. You can also access Filter from the plugin list for your sheet.
Common things to filter on are:

  • History –   this is how likely somebody is to actually vote.
  • Party Id  – this is the party affiliation.
  • Answers to questions like Result of Contact or Supporter
  • Other microtargeting information.

Using the Basic View

There are several views for filtering.  The “basic” tab lets you qickly filter on History, PartyId, and Age.

filter_basic

Using the Query Builder view

You can also switch to the “Query Builder” tab to create a more complex query.

Here’s a basic query to look for ‘social’ equals ‘hard left’, ie, social liberals. You can select the column, operator, and value to create a rule, and then click “run query”:

filter_1

We can then build up the query to also require people over 55 years old. This is means “social liberal AND over 55”.
The “add rule” button adds a new rule to the current group. Note that we have ‘and’ selected which means both rules must apply.

filter_2

If we meant “social liberal OR over 55” , then we can select ‘or’:

filter_3_or

Tip: If you got 0 results, check that you didn’t confuse an ‘and’ with an ‘or’.  For example, (Party == 1 and Party == 2) will give you 0 results. It should be (Party == 1 or Party == 2)

We can add multiple rules. This means social liberals between 45 and 55. filter_4_and

We can also click “add group” to create more complex expressions. This means “Social liberal AND (party is either 3 OR 4)”. Using groups is needed when you want to combine AND with OR expressions.

filter_6_compose

The other trick is to us the ‘history’ score (likeliness to vote) to narrow the number of targets. You can see the “Previous Results” tab at the right shows the results of queries you’ve made so far. For example, this query finds fiscal conservatives that are very likely (0.90 is 90% ) likely to vote. Note that is must be specified as a decimal between 0…1 and include the leading 0. (so “0.90”, not “.90”, not “90%”).

filter_5_history

For example, this query is for any women with Party equal to 1 and that live in the specified zipcode or city.

filter_query

 In our case, it gives us 4900 voters. We can repeat the query with 0.70 instead, and gets 17000 voters. 

Tip: If you want more data, you can upload it yourself via the data uploader or purchase additional data from a data vendor like Voter-Science.

 

Saving the filter

Once you run your query, you can set it as the targets or save it as a regular sheet:

filter_save

The “Save Query” button will prompt you for a name for this filter. When you hit the back button to go back to the List View, you’ll see it on the sheet list. At this point, the filter acts just like any regular sheet, and you can share it, print it, or use it with any other plugin.

trc-after-filter

Click on “walking list” next to that filter, and you’re now viewing just within the filter.

You can click “share this” to share just this filter with another volunteer.

You can click “view entire walking list” to get back to the full list and possible create new filters.

Viewing on a map

You can also visualize a heat map for the results.  For example, here’s a query of “Who are supporters that haven’t voted yet”. You can then map it, and chase them down:

filter_7_map

 

Technical notes

Filtering creates a new “child” sheet that applies a filter-expression to extract a subset of the rows from the original (“parent”) sheet. The filter creates a a view that shares the same sandbox as the original sheet, so all changes in the child are instantly visible in the parent. However, the child sheet still maintains its own history tracking and audit logs.