How do you account for the failure of these disturbed Republicans to turn out in massive numbers for any of the special elections so far? Thus far, we have seen a consistent pattern of low turnout in Republican areas and high turnout in Democratic areas.
I hadn’t heard that the GOP turnout was lower than usual–just that the Dem turnout was good. (If you have a citation handy, feel free to share it.)
Eh, as usual on this forum, my cite is “something I’m pretty sure I read on 538 a while back”. I could look so much smarter if that site was easily searchable.
But regardless, the actual results of the special elections thus far seem to indicate that Dems are in a good position.
Well from The Weekly Standard…
Updating it with data from the primary elections this week in Illinois:
There is at this point no evidence to support a belief that “Republican turnout will be massive”. If you have some, feel free to share it.
Now of course none of these elections have been the midterm elections and much can change between now and then. We’ll see.
Thanks for that, DSeid.
My pleasure!
So 538’s generic poll tracker is inexplicably down to D+5.5, which if true would portend likely not only no wave but possibly not winning a majority.
What should we make of that?
Nothing unless it stays like this through election day. It fluctuates day to day, snapshots don’t tell us anything, especially this early.
My prediction:
228D 51D 54%D
By itself very little:
- Looking at 538’s generic ballot tracker they include an error bar to cover 90% of polls. Except for a period from Dec17-Jan18 those bars have overlapped.
- Their graph lumps together results that include everyone, registered voters, and likely votes. Registered voter results dominate. Since we’re talking midterm elections with turnout being a major factor that’s a potential issue.
- If you are looking at the difference between two candidates/positions/generic candidates in the same poll question it takes about double the margin of error for the difference to be statistically significant. (A look at the more detailed statistical underpinnings.) Clicking through to the most recent Fox and Marist Polls (skipping the Ipsos because it was only graded A- to their A grades by 538) show 3.0 and 3.1% MOE respectively. Both show D+5. Neither is a statistically significant difference between the parties.
- Comparing poll to poll is a different formula. If the margin of error is the same in both polls, the result is needing 1.41 times the margin of error for a statistically significant change at the 95% confidence interval. The drop in the Marist polls from 7 in Feb to the more recent March poll is from D+7 to D+5. the move needed for a statistically significant change is just 4.4%. That two-point shift could just be polling noise, not a real change.
Aggregating data does help reduce the effects of the statistical error. Different methods of computing trends can help to sort out statistical noise from sustained changes. The generic ballot polls historical are pretty descriptive of the actual results. There’s some art that adds to the science (things like assumptions to predict likely voters or weighting polls based on historical performance like 538 does.) With deeper dives, it can be possible to tweak a little bit of predictive power out of results that aren’t significant.
At the surface level, though, going from a recent D+8 to D+5.5 today is effectively meaningless without that deeper dive.
If anyone is interested and has a smidge of Python skills, here’s some code to download all the generic house ballot polls recorded at Huffpost Pollster and ingest them into a pandas dataframe. This particular script outputs a rolling average of Dem minus Rep, but once you have the data you can do whatever you want with it.
import pandas as pd
import datetime
url = 'http://elections.huffingtonpost.com/pollster/api/v2/questions/18-US-House/poll-responses-clean.tsv'
df_raw = pd.read_csv(filepath_or_buffer = url,
sep = ' ',
parse_dates = ['start_date', 'end_date'])
# Filter out undesirable subpopulations. In this case they contain dashes '-'
df = df_raw[df_raw['sample_subpopulation'].apply(lambda x: '-' not in x)]
# Drop columns we don't need
df = df.loc[:,['Democrat', 'Republican', 'start_date', 'end_date']]
# Add net job approval column
df['Net'] = df['Democrat'] - df['Republican']
# Add average date column
df['avg_date'] = df['start_date'] + (df['end_date'] - df['start_date']) / 2
# Restrict to only columns of interest
df = df.loc[:,['avg_date', 'Net']]
# Helper function. Compute average of 'Net' column for rows within delta days (+-) of thedate
def rollingavg(thedate, thedf):
days = 7
delta = datetime.timedelta(days=days)
temp = thedf[(thedf['avg_date'] >= thedate - delta) & (thedf['avg_date'] <= thedate + delta)]
return temp['Net'].mean()
# Create final dataframe
min_date = df_raw['start_date'].min()
max_date = df_raw['end_date'].max()
df_final = pd.DataFrame(pd.date_range(min_date, max_date), columns = ['Date'])
df_final['Advantage'] = df_final['Date'].apply(lambda x: rollingavg(x, df))
df_final = df_final.set_index('Date')
# Show plot.
df_final['Advantage'].plot()
print(df_final['Advantage'].describe())
Of course, the code tag bug is still inexplicably hanging around despite the one line fix presented to the admins way back when the new theme was new. Sure would be nice if they fixed that.
Guess I might as well go with my heart. Worst-case scenario, I get the HIGH score; best-case, I and the country win.
House: 435 Dem, 0 Repub
Senate: 58 Dem, 42 Repub
National: 100 Dem, 0 Repub
1/21/18
USCDiver House 230D, Senate 51D, Vote 53%D
1/22/18
Bone House 214D, Senate 50D, Vote 51%D
Pleonast House 257D, Senate 49D, Vote 55%D
DSeid House 228D, Senate 49D, Vote 56%D
Railer13 House 225D, Senate 48D, Vote 53%D
1/23/18
Aspenglow House 277D, Senate 52D, Vote 57%D
adaher House 222D, Senate 45D, Vote 53%D
BobLibDem House 260D, Senate 51D, Vote 56%D
Johnny Ace House 220D, Senate 46D, Vote 55%D
1/24/18
Wesley Clark House 235D, Senate 50D, Vote 56%D
Ravenman House 226D, Senate 49D, Vote 52%D
1/25/18
DinoR House 238D Senate 51D, Vote 52%
1/26/18
UltraVires House 208D, Senate 46D, Vote 50%D
1/27/18
D’Anconia House 210D, Senate 48D, Vote 51%D
1/28/18
septimus House 223D Senate 50D, Vote 53%D
1/30/18
Yersenia Pestis House 215D Senate 50D Vote 54%D
2/2/18
Melcalc House 218D Senate 51D Vote 52%D
2/16/18
Silver lining 209D Senate 47D Vote 49%D
3/2/18
Hari Seldon 230D 50D Vote 53D
3/4/18
wonky 219D 49D 52D
pjacks 200D 45D 48D
3/5/18
Sherrerd 201D 47D 53%D
3/15/18
iiandyiiii 241D 51D 55%D
3/22/18
ThingFish 248D 52D 55%D
3/25/18
JKellyMap 228D 51D 54%D
3/27/18
kaylasdad99 435D 58D 100%D
Oh, sure. But why so pessimistic (relatively) about the Senate?
Barring more republicans quitting/dying, there’s only 9 Republican seats up for grabs.
That was my take on it. Only so many seats in play barring revolution and the guillotine and such.
Oh, of course. I guess the rate at which we’re getting announcements of retirements was distracting me from the fact that it’s mostly announcements about House seats. No matter how bad the news becomes for the GOP, it IS unlikely that all their Senators will suddenly decide they need to spend more time with their families.
(But that’s not completely in the realm of the impossible…)
Because they currently hold 51 seats, only nine of which have terms expiring next January.
What do have against mass resignations?
ETA: Darn, Sherrerd got there first.
I have nothing against them, per se, but come on, I’m not DELUSIONAL.
It’s true!
He’s only at ‘whack-a-doo’…he hasn’t gone ‘full bugfuck’. You never go full bugfuck.