| Fit | Members | Items | Maximum R-hat | Minimum effective sample size |
|---|---|---|---|---|
| Primary retained roll calls | 13 | 300 | 1.030 | 70 |
| One copy of each within-meeting vote pattern | 13 | 165 | 1.012 | 86 |
Denver City Council ideal points
Technical appendix · Current-term roll calls, 2023–2026
This appendix documents the October 8 one-member-minority refit underlying the Denver report: 13 members and 300 contested voting items. The established sampling settings are unchanged. A source audit finds that agenda-level duplication strongly affects Hinds’s endpoint, so sampling agreement must not be confused with a validated substantive scale.
Data and event reconstruction
The input is the Denver City Council subset of Jacob Greene’s MyTown local-government corpus, restricted to the current council term beginning July 17, 2023. The source shifts between surnames and full names; an explicit alias map standardizes the 13 elected members. Vacancy markers and extraction noise are not treated as people.
The flattened source can repeat the same motion label for several distinct roll-call events in one meeting. Preserved Parquet row order is therefore used to number each member’s successive occurrences within a meeting–motion group. If all members have the same repetition count, corresponding occurrences form separate vote events. If repetition counts differ, alignment is ambiguous and the entire group is excluded. Eighteen meeting–motion groups fail this check. The retained extract contains 96,899 member-vote rows and 7,869 reconstructed events.
Yea is 1 and nay 0; absence, abstention and unobserved entries are missing. Of 301 contested recorded items, one lacks ten observed binary responses. The culling rule retains members with at least four usable votes and any item with at least one yea and one nay, leaving 300 items and 3,640 binary responses. Compared with the earlier matrix, 150 one-member-minority items are added. The occurrence reconstruction does not itself distinguish agenda records from independently cast roll calls.
The filtering focuses the model on votes that distinguish coalitions and have broad council coverage. It does not imply that unanimous, lopsided, or thinly observed votes are substantively unimportant.
Model and estimation
The model is P(yea on item j by member i) = Φ(xᵢβⱼ − αⱼ), where Φ is the standard normal CDF, xᵢ is a member ideal point, βⱼ is item discrimination, and αⱼ is item difficulty. A single constant xᵢ is estimated for each member across the pooled period.
The implementation follows Boris’s CCES workflow with the smaller-chamber threshold: pscl::rollcall(), dropRollCall(legisMin=3, lop=0), and ideal(d=1, normalize=TRUE, store.item=TRUE). Default centered normal priors have member variance 1 and item-parameter variance 25.
Three chains use 55,000 total iterations, including 5,000 burn-in iterations, and thinning of 50. One chain starts the three members identified by Axios as Denver’s progressive wing at -1 and the other ten at +1; two chains start randomly. The external classification affects starting values only. It is not a prior, constraint, item-selection rule, or definition of the scale.
normalize=TRUE supplies location and scale identification. Draw signs are then aligned to a vote-derived singular-vector reference displayed with Kevin Flynn positive. This only chooses which end is shown on the right; it does not fix Flynn’s estimated coordinate. Reported scores are posterior means with equal-tail 95% intervals. The pscl documentation describes the sampler and normalization.
Diagnostics and robustness
Chain behavior
Maximum classical R-hat is 1.030, with minimum ESS 70. The enlarged fit is weaker than the prior 150-item fit and does not meet R-hat below 1.01 for every member. These diagnostics do not validate the event definition or the apparent conservative interpretation of Hinds’s endpoint.
Initialization
One chain uses the reported progressive grouping for starting values and two use random starts. All are oriented after fitting with the same vote-derived reference. Their agreement and the low pooled R-hat values indicate that the reported ordering is not simply inherited from the informed start.
Repeated-pattern sensitivity
The repeated-pattern procedure keeps one instance of each identical response vector within a meeting, reducing the enlarged matrix from 300 to 165 items. The previous 150/102-item fits are preserved under Results/denver-min2-2026-10-08/. This is not an exact event-level correction: different missingness can leave two copies of the same actual vote, while distinct actual votes can share a response pattern.
Hinds is an important exception to stability under reweighting: his mean falls from 0.81 to 0.23, and Flynn rather than Hinds becomes the positive endpoint. The new primary endpoint therefore is an artifact of item weighting in a consequential sense, not a robust finding that Hinds is most conservative.
Hinds source audit
The 57 retained Hinds-only-nay records are concentrated at three meetings: one on August 26, 2024, two on April 14, 2025 and 54 on December 1, 2025. Official signed minutes establish four voting events: advisory-board appointment 24-1042; sidewalk contract 25-0327; the 52-resolution December block; and separately considered HDR contract 25-1651. The latter has eleven yeas, Hinds nay and Romero Campbell abstaining. April’s duplicate copies disagree on Watson’s missingness: the official record lists him yea. These are actionable construction defects, not merely hypothetical dependence among unrelated votes.
Results/Denver/hinds_lone_nays.csv lists all 57 retained records. Original minutes, text-native Markdown extractions and page-coverage logs are under Data/Denver/hinds_review/; the upstream audit note records source URLs and conclusions. All 62, 19 and 17 source pages respectively have extracted content. No original cells or fitted models were changed by this audit. The primary report is refreshed transparently to the supplied refit; a source-event correction and subsequent refit remain outstanding. Keep lone-dissenter votes, but count each actually cast vote once and retain its links to multiple resolutions.
Member estimates
| Council member | Posterior mean | 95% lower | 95% upper | R-hat | ESS |
|---|---|---|---|---|---|
| Shontel Lewis | -2.942 | -3.802 | -2.121 | 1.005 | 69.854 |
| Sarah Parady | -1.065 | -1.479 | -0.696 | 1.030 | 272.387 |
| Serena Gonzales-Gutierrez | -0.181 | -0.384 | 0.013 | 1.020 | 285.022 |
| Stacie Gilmore | 0.130 | -0.039 | 0.298 | 1.005 | 298.307 |
| Paul Kashmann | 0.157 | 0.007 | 0.318 | 1.003 | 268.750 |
| Jamie Torres | 0.292 | 0.135 | 0.452 | 1.000 | 312.377 |
| Flor Alvidrez | 0.293 | 0.132 | 0.467 | 1.001 | 340.369 |
| Amanda Sandoval | 0.341 | 0.191 | 0.504 | 1.000 | 287.228 |
| Diana Romero Campbell | 0.445 | 0.292 | 0.603 | 1.001 | 277.734 |
| Darrell Watson | 0.510 | 0.361 | 0.675 | 1.003 | 305.410 |
| Amanda Sawyer | 0.575 | 0.426 | 0.740 | 1.007 | 309.017 |
| Kevin Flynn | 0.636 | 0.485 | 0.808 | 1.012 | 321.327 |
| Chris Hinds | 0.809 | 0.635 | 0.996 | 1.023 | 354.985 |
Intervals are marginal equal-tail intervals under the fitted model. Extensive overlap among the middle members is a reason not to treat their exact order as a reliable ranking.
Remaining limitations
The most important remaining checks are direct audits of additional reconstructed vote events against official minutes, inspection of highly discriminating items, and comparison with time-varying or higher-dimensional models. The current fit pools the term, assumes conditional independence across items, and uses a small thirteen-member chamber. Its strongest inference concerns the broad separation of the progressive endpoint, not fine distinctions within the council’s middle.
Reproduction
From the project root:
Rscript Code/05_prepare_denver.r
Rscript Code/06_fit_denver.r
Rscript Code/07_denver_face_validity.r
Rscript Code/08_denver_presidential_validation.r
quarto render denver-report.qmd
quarto render denver-technical-appendix.qmdThe preparation script requires the saved national MyTown Parquet files in /tmp. The presidential validation uses the saved New York Times precinct file and Denver’s official council-district ordinance. Random-number seeds and exact session information are preserved with the results.