Houston City Council ideal points

Technical appendix · Pooled roll calls, 2021–2025

Author

Boris Shor

Updated

October 8, 2026

This appendix documents the R estimation underlying the Houston report. The primary model places 25 officials, including Mayors Turner and Whitmire, on one dimension using 119 contested actions from 2021–2025. The main fit’s R-hat values are all below 1.01. Collapsing repeated vote patterns or fitting each term separately leaves the ordering essentially unchanged.

Data and construction

The input is Jacob/2026-09-14-houston/processed/rollcalls_expanded.rds, built by Code/14_prepare_houston.r. The builder uses Jacob Greene’s September 14, 2026 extraction of official council minutes as the primary source. It adds five contested actions absent from that export, each verified page by page against the official minutes. It never merges records from the obsolete local parser. The builder checks action and member uniqueness, 17 roster rows per action, agreement between printed tallies and member votes, and inclusion of both mayors. The audit trail is in Jacob/2026-09-14-houston/review.md and supplement/review.md.

Each action is a separate item. Yea is coded 1 and nay 0. Absences, departures, omissions from an explicit roll call, and out-of-office periods are missing. Of 8,368 actions, 119 have at least two recorded votes on each side. The pscl culling rule, dropRollCall(legisMin=3, lop=1), removes nothing further. Every retained action has at least ten observed votes; the member with the fewest retained votes has 28. The matrix contains 1,869 observed votes. Most missing cells reflect service in only one term.

Source dates identify meeting packets, which can cover two sessions, not necessarily the exact day of each vote. Jacob’s frozen holdout reports high precision but incomplete recall of contested events, so some divided votes may be absent.

Model and estimation

The model is P(yea on item j by official i) = Φ(xᵢβⱼ − αⱼ), where Φ is the standard normal CDF, xᵢ is an ideal point, βⱼ is item discrimination, and αⱼ is item difficulty. Each official has one constant xᵢ across the pooled period.

The implementation follows Boris’s existing CCES workflow and the other city pilots: pscl::rollcall(), dropRollCall(legisMin=3, lop=1), and ideal(d=1, normalize=TRUE, store.item=TRUE). It uses the package’s default normal priors: member variance 1 and item-parameter variance 25.

Three chains each run 55,000 total iterations, including 5,000 burn-in, thinned by 50, leaving 1,000 draws per chain after the stored burn-in boundary is dropped. Houston has no dated caucus roster suitable for initialization, so no external label is used anywhere in estimation. Chain 1 starts from the standardized leading singular vector of the centered vote matrix, and chains 2 and 3 start randomly. Seeds are 20260931–20260933.

normalize=TRUE supplies location and scale identification. Each draw’s sign is then aligned to the vote-derived singular vector, oriented so Amy Peck is positive. This chooses which end is displayed on the right and does not fix her coordinate. Reported scores are posterior means with equal-tail 95% intervals. The pscl documentation describes the sampler and normalization.

Diagnostics and robustness

Chain behavior

Fit Officials Items Maximum R-hat Minimum effective sample size
Primary: all retained actions 25 119 1.007 223
One copy of each within-meeting vote pattern 25 108 1.003 281
2020⁠–⁠2024 term actions only 18 84 1.029 275
2024⁠–⁠2028 term actions only 17 35 1.006 383

These are classical univariate R-hat and coda effective sample sizes, not rank-normalized split R-hat or bulk/tail ESS. The primary and pattern-collapsed fits meet an R-hat-below-1.01 benchmark. The first-term-only fit reaches 1.029 for Letitia Plummer, which is acceptable for a sensitivity check but not for primary inference. Convergence does not test source accuracy, one-dimensionality, or substantive interpretation.

Initialization

The vote-derived start and the two random starts give closely matching posterior means after alignment. The largest difference between any two chains’ means for one official is 0.101, for Fred Flickinger, whose posterior has a long upper tail. The reported ordering is therefore not inherited from the informed start.

Repeated-pattern sensitivity

Several actions within a meeting have identical yea, nay, and missing patterns. They may be distinct formal actions, but counting each copy gives that coalition extra weight. The sensitivity fit keeps one instance of each within-meeting pattern, reducing the items from 119 to 108.

Term-specific fits

Pooling assumes each official’s position is the same in both terms and that the ten members who served in both link the two councils onto one scale. To check this, the model was refitted separately on 2021–2023 actions (18 officials, 84 actions) and 2024–2025 actions (17 officials, 35 actions). Each separate fit has its own arbitrary scale, so correlations are the appropriate comparison.

Comparison Officials Pearson Spearman
One copy of each within-meeting pattern 25 0.998 0.997
2020⁠-⁠2024 term actions only 18 0.993 0.983
2024⁠-⁠2028 term actions only 17 0.989 0.980
Term 1 vs term 2 among members serving in both 10 0.941 0.915

The first three rows compare each alternative fit with the pooled estimates. The last row compares the two term-specific fits for the ten members who served in both. Their positions are highly correlated across terms, which supports pooling, though ten members cannot rule out modest individual movement.

Standardized ideal points from the two term-specific fits for the ten council members who served in both terms.

Member estimates

Official Role Posterior mean 95% lower 95% upper R-hat ESS Votes
Letitia Plummer Council -1.373 -1.937 -0.909 1.001 275.353 104
Edward Pollard Council -1.314 -1.840 -0.868 1.002 287.577 114
Tarsha Jackson Council -1.025 -1.504 -0.607 1.002 259.536 107
Tiffany D. Thomas Council -0.913 -1.360 -0.504 1.000 225.671 108
Abbie Kamin Council -0.762 -1.195 -0.361 1.002 231.246 104
Carolyn Evans-Shabazz Council -0.680 -1.098 -0.279 1.002 222.834 115
Sylvester Turner Mayor -0.637 -1.086 -0.218 1.001 256.628 79
Karla Cisneros Council -0.625 -1.076 -0.214 1.004 240.548 78
Martha Castex-Tatum Council -0.566 -0.958 -0.164 1.003 257.956 111
David W. Robinson Council -0.456 -0.895 -0.019 1.003 289.373 81
Mario Castillo Council -0.443 -0.915 0.038 1.000 450.745 32
Dave Martin Council -0.427 -0.887 0.029 1.002 379.393 72
Joaquin Martinez Council -0.366 -0.855 0.151 1.000 415.202 33
Sallie Alcorn Council -0.286 -0.687 0.102 1.004 262.623 117
Robert Gallegos Council -0.264 -0.697 0.166 1.004 299.028 77
John Whitmire Mayor 0.113 -0.420 0.671 1.002 674.757 35
Willie Davis Council 0.157 -0.400 0.753 1.000 668.068 31
Julian Ramirez Council 0.405 -0.139 0.984 1.001 650.840 32
Twila Carter Council 0.440 -0.214 1.200 1.001 820.271 28
Michael Kubosh Council 0.870 0.432 1.371 1.001 411.273 74
Amy Peck Council 0.870 0.460 1.337 1.001 345.746 116
Mary Nan Huffman Council 1.395 0.838 2.092 1.001 510.802 75
Mike Knox Council 1.803 1.166 2.631 1.007 522.257 79
Greg Travis Council 1.937 1.105 3.226 1.000 750.787 33
Fred Flickinger Council 2.147 0.981 3.820 1.003 412.956 34

Intervals are marginal equal-tail intervals under the fitted model. Officials who served only one term have fewer votes and wider intervals. Endpoint members also have long outer tails, because few actions distinguish among the most extreme positions. Extensive overlap in the middle means exact middle rankings are not reliable.

Validation construction

Party affiliation is coded in Code/16_houston_face_validity.r with a source and evidence tier for every official, saved in Results/Houston/membership_evidence.csv. “Party record” denotes a partisan candidacy or party office; the four officials for whom only a 2023 Harris County Republican Party endorsement is cited are marked “party endorsement,” not party-record membership. Mary Nan Huffman’s record tier rests on her official 2020 Republican primary result. Michael Kubosh is Republican-affiliated at the reporting-only tier: contemporaneous Texas Monthly reporting explains his 2006 Democratic candidacy as tactical, and the Houston Chronicle reports mostly Republican primary ballots and GOP endorsements. He publicly rejects labels, and no Republican candidacy or party office is documented, so he is not marked “party record.” The two endorsement PDFs and source-review notes are preserved in Data/Houston/party_evidence/. A September 2026 review added reporting-tier Democratic labels for Karla Cisneros and David W. Robinson based on an explicit 2018 Houston Chronicle account; none of these labels enters the model. Only claims checked against a primary document, the official roll calls, or an opened source were used in the report. Affiliation does not enter the likelihood, the starts, or sign alignment.

Code/17_houston_presidential_validation.r intersects the NYT 2024 Texas precinct polygons for Harris, Fort Bend, and Montgomery counties with the eleven council districts. Both layers are projected to EPSG:2278, and invalid geometries are repaired first. Votes are allocated by each precinct’s area share, and precinct area outside the city is left unallocated. Districts are matched to the members serving on November 5, 2024. The district file lists the current member (District C now shows Joe Panzarella), so the Election Day roster is hard-coded. The file has no vintage metadata; it is assumed to be the 2022 redistricting plan used in the 2023 and 2024 elections. Its combined area matches the city’s roughly 672 square miles.

Remaining limitations

  • Selected votes: contested roll calls are rare, so the scale describes a small subset of council business, and extraction recall for contested events is incomplete.
  • Fixed positions: the pooled model assumes each official’s position is constant from 2021 through 2025. The term-specific fits check this only for the ten members who served in both terms.
  • Mayors: the mayors’ scores reflect the actions on which they recorded votes.
  • Presidential comparison: it has eleven observations and relies on area-based allocation.
  • Model checks: higher-dimensional models and item-level fit have not been examined.

Reproduction

From the project root:

Rscript Code/14_prepare_houston.r
Rscript Code/15_fit_houston.r
Rscript Code/16_houston_face_validity.r
Rscript Code/17_houston_presidential_validation.r
quarto render houston-report.qmd
quarto render houston-technical-appendix.qmd

Set IDEAL_ITER to shorten test runs. Random-number seeds and session information are saved with the results in Results/Houston/.