Survey Statistics: Times/Siena Polls and Times Voter Trends
Yesterday Andrew wrote about Alan Zaslavsky, who recently passed.
This is typical of his work in that it was innovative, with applied importance, and understated.
As Fan Li quoted, Alan was “the best applied statistician on earth”. I’ll write more Alan stories soon. He was my PhD advisor and hero.
Since it is election day, let’s talk about methods to analyze polls, where Alan’s legacy can’t be overstated. Fan Li mentioned work with Alan on balancing covariates, cited by Huling & Mak (2024) in their work on energy balancing weights, which are used by the Times/Siena Poll. This Survey Statistics series has discussed a few Times/Siena Poll decisions over the last year.

- Dec 2025: “is a mismeasured X better than none at all ?” discussed the Times/Siena poll decision not to adjust for recalled vote.
- Dec 2025: “more adventures in mismeasured X” did a simulation study.
- Feb 2026: “more on recalled vote” linked to Raphael Nishimura‘s more extensive simulation.
- June 2026: “it is (still) the people” saw that the NYT started weighting on “synthetic 2024 vote”, which is recalled 2024 vote that is validated with the voter file and imputed if needed.
- June 2026: “Big Changes in the Times/Siena Poll” talked about 2 more changes:
- Another new weighting variable: support score = E(2024 vote | other X variables).
- A new weighting method: energy balancing (Huling & Mak, 2024). See our “toy example for energy balancing weights”.
This week, in “The Final Polls Show a Blue Surge. Can We Trust Them?” Nate Cohn compares how the 2026 polls would look without these big changes, and sees they would be on average more than 3 points higher for Democrats.
Last week Andrew wrote about MRP at the NYT. So cool ! Their methodology article says:
The estimates do not report a margin of sampling error because they are not based on a sample of the population. The estimates are derived from multiple models, which are each subject to different kinds of error.
Yes, there are many kinds of error to consider, in “Margin of Error” we discussed how to get an MRP margin of error assuming no nonresponse bias after the MRP adjustments, no measurement error, and no model misspecification. In “Total Margin of Error” we saw that in election polls from 1998 to 2014, Shirani-Mehr et al. found that total survey error is about twice the reported margins of error. Even if you have margins of error to report, visualizing them is challenging (see Gelman and Price 1999 “All maps of parameter estimates are misleading”).
I was curious about the relationship between their MRP methods and their weighting methods. (See “MRPW”, “struggles with equivalent weights”, continued struggles, and “equivalent models, equivalent weights (locally)”, and “structured MRP to smooth survey weights”.) The only mention I found of their weights is:
The polls were joined to the given year’s voter file and reweighted to match the voter file by L2’s modeled race, party, age and interactions thereof, with the original survey weight as the base weight. The adjusted survey weight was used in all subsequent race models.
So they calibrate the base weights to match the voter file, see Lumley 2010 Chapter 7.
It’s been a few months since I’ve blogged about the logit shift, so it is time. (See: “2 flavors of calibration”, 2nd helpings (multinomial outcomes), 3rd helpings (multivariate outcomes), 4th helpings (more on multivariate outcomes), “logit shift and raking”.) The NYT uses a version of this shift:
The resulting individual-level probabilities were adjusted in multiple steps to match the actual election result by precinct. First, the probability that a voter would support a minor party candidate was adjusted to match the minor party proportion of the vote. Second, the probability that a voter would support a major party candidate was adjusted to match a candidate’s major party vote share in the precinct. Finally, the probability that a voter would support the Democratic or Republican candidate was calculated by multiplying the adjusted Democratic and Republican share of the major party vote by the adjusted major party vote share of the precinct.
Presumably they’re doing something like:
- E(shift_a(P(major party | X))) = P(major party) solve for a.
- Then either:
- E(shift_b(P(Dem | major party, X))) = P(Dem | major party) solve for b. Or
- E(shift_a(P(major party | X)) * shift_b(P(Dem | major party, X))) = P(Dem) solve for b.
2A isn’t quite right: it implies E(shift_a(P(major party | X))) * E(shift_b(P(Dem | major party, X))) = P(Dem). But we want 2B to hold, and the two are equivalent only if the individual-level probabilities for major party and for Dem given major party are uncorrelated.
It’s hard to write prose to describe something technical. The NYT level of methods transparency is great !