Los Angeles ideal points: technical appendix

Updated

October 8, 2026

Return to the substantive report.

Frozen inputs and event construction

The municipality-181 extract is preserved in Data/LosAngeles/votes_raw.csv, streamed from Jacob/2026-10-01-national/candidate/member_votes_all.zip. Its source is the national-repair branch data/national-muni-fix at commit cf2188a621b7e96f2f331d4b72f367cb54598ea1. The extract spans February 16, 2021–September 11, 2026 and contains 474,559 rows across 537 meeting identifiers. It includes 22 advisory-committee rows, which do not match the council roster and are excluded.

An event is meeting_id plus rollcall_key, not meeting plus motion text. There are 44,958 such raw combinations including missing keys; the cleaned matrix has 44,908 keyed actions before ideological culling. Reused generic motion descriptions would collapse separate decisions if used as the identifier. Action keys are treated as source-extraction identifiers, not as independently verified permanent roll-call IDs.

measure value
raw_rows 474559
excluded_name_or_key_rows 8116
conflicting_cells 47
duplicate_rows_collapsed 28
raw_actions 44908
full_people 24
fitted_people 24
retained_actions 624
observed_binary_votes 7329
first_date 2021⁠-⁠02⁠-⁠16
last_date 2026⁠-⁠09⁠-⁠11

Name matching strips spacing, punctuation, accents, soft hyphens and invisible zero-width characters. The within-city roster resolves clear surname variants. A longer Soto-Martínez match supersedes the suffix Martínez; strings naming multiple people, unexplained fragments and missing action keys are excluded. The raw-to-canonical mapping and exclusions remain inspectable. Existing legacy local IDs are carried through, not newly allocated; the duplicated upstream Hugo Soto-Martínez IDs are consolidated to one analysis person, with one existing ID carried in the score table. This is an analysis-side identity normalization, not an upstream registry repair.

Conflicting person-action responses are quarantined, exact duplicate cells collapsed, and inconsistent action metadata rejected. A blank or absent response remains missing. The qualifying-vote rule requires at least one yea, one nay and ten binary responses, followed by a minimum of seven qualifying votes per person; these conditions are checked repeatedly until the sample is stable. Lone-dissenter votes are retained because they can be informative in a 15-member council. All 24 identifiable councilmembers in the cleaned matrix survive the member threshold. McOsker does not occur anywhere in the raw extract, so fitting cannot recover him.

Bounded source check

Two retained actions in the official June 29, 2021 document were checked against the raw export. Key 635367::12 reproduces all 15 members and their responses (10 yea, five nay), and key 635367::22 reproduces all 15 (13 yea, two nay). This confirms those action keys and lists, not corpus-wide accuracy. The official PDF is preserved locally. Text extraction covers the main action pages; later image-only attachments were not used for this check.

Estimation in R

The model is the same one-dimensional probit ideal-point model used for the other city pilots:

Pr⁡(yij=1)=Φ(βjxi−αj).\Pr(y_{ij}=1)=\Phi(\beta_j x_i-\alpha_j).

Here xix_i is member ii’s voting position, βj\beta_j a vote’s discrimination and αj\alpha_j its difficulty. pscl::ideal() samples the member and item parameters using its default normal priors. Missing cells contribute no vote likelihood. The routine’s normalization fixes the scale’s location and magnitude; the sign is displayed with John Lee positive. That convention alone carries no substantive validation claim.

Exactly two independent random-seed chains use Democratic start values −1, Republican +1, and 0 for the member with both historical party claims. These are initial values, not restrictions, fixed coordinates or party observations in the likelihood. DSA endorsements never enter the fit. Both chains run 205,000 iterations, discard the first 5,000 and retain every 100th draw. Retained draws are aligned to the first singular vector of the centered vote matrix. The first stored draw is omitted. Pooled means and 95% equal-tail posterior intervals appear in the report; all council-window plots reuse those pooled estimates.

Diagnostics

chains iterations burnin thin max_rhat min_ess chain_mean_correlation
2 205,000 5,000 100 1.011 74.121 1

The largest member-level R-hat is 1.011 and the smallest effective sample size is 74. Agreement of chain means is 1.000. These are within-solution diagnostics, not proof that no alternative mode exists; no label-free-start or dispersed-start comparison was run for this initial LA report. The first, shorter run also exposed name-normalization losses and is not the reported fit.

Overlap and repeated patterns

Year Next year Members observed in both
2021 2022 14
2022 2023 9
2023 2024 14
2024 2025 14
2025 2026 14
retained unique_within_meeting
624 310

The overlap table counts members with qualifying votes in both years. It is not a count of shared legislators’ individual bridge votes. Separate official actions remain separate observations even when their recorded voting patterns repeat within a meeting; that dependence can make nominal intervals optimistic. The table above records the repeated-pattern issue without fitting an additional sensitivity model.

Council windows and external evidence

Windows start at the observed data boundary, December 12, 2022 and December 9, 2024. They follow election turnovers, not arbitrary durations; LA’s staggered four-year seats produce a new council composition every two years. Window membership requires at least one observed binary response in a retained action during that window. Interim officeholders can therefore appear with their successors. Pooled position is held constant: a composition change is not an estimated within-person trend.

Party inputs are in Data/LosAngeles/party_affiliation.csv, copied from the LA research contribution in PR #21. The copied roster’s historical service endpoints are not trusted to delimit the observed council windows. John Lee’s 2019 Republican report is retained with its dating caveat; Park’s two historical affiliations do not establish an exact switch boundary; Jurado’s party endorsement supports alignment but not membership. The relevant evidence types and citations stay in the affiliation table.

For display and within-Democrat comparisons, Park is Democratic: the September 2022 source documents that her switch had already occurred, before her first retained council vote on January 10, 2023. Her earlier Republican claim remains in the ledger. This is a presentation/validation correction, not a refit; the original chains still used 0 as Park’s starting value. McOsker’s new reported Democratic evidence is also in PR #21, but he remains unfitted. The fitted members’ evidence types are summarized below; a reference or registration claim in reporting is not an election-authority record retrieved by us.

Evidence type Fitted members
party_organization 6
party_record 10
reported 6
self_identified 2

DSA endorsements are separately recorded in Results/LosAngeles/endorsements.csv. Complete descriptions of the sitting endorsed group in November 2023 and November 2024 support council-specific comparisons. Earlier missing endorsement records are not coded as evidence of non-endorsement. The pooled plot’s triangles identify the four documented endorsed officeholders, not a historical negative classification for everyone else. The comparisons omit the incomplete pre-2022 endorsement window.

Organization Council group Comparison Endorsed Other members Share endorsed left of other
DSA-LA Council after 2022 election (documented November 2023) All fitted members 3 11 1.0
DSA-LA Council after 2022 election (documented November 2023) Within Democratic-affiliated members 3 10 1.0
DSA-LA Council after 2024 election (documented November 2024) All fitted members 4 10 1.0
DSA-LA Council after 2024 election (documented November 2024) Within Democratic-affiliated members 4 9 1.0
Abundant Housing LA 2024 incoming members in covered races All fitted members 4 2 0.5
Abundant Housing LA 2024 incoming members in covered races Within Democratic-affiliated members 4 1 0.0

The ordered-pair share compares every endorsed member’s pooled posterior mean voting position with every other member of the specified council group. Within-Democrat rows restrict both groups to the Democratic display label, including Park and excluding Lee. This is descriptive, with no causal interpretation or large-sample significance claim. The complete point-estimate ordering does not imply disjoint uncertainty intervals: Raman and Harris-Dawson’s intervals slightly overlap.

AHLA evidence is separate from DSA in endorsements.csv and the member-plot shapes. Six fitted people have documented AHLA endorsements across 2022 and 2024. The 2024 comparison restricts the universe to incoming members in covered districts 2, 4, 8, 10, 12 and 14: four listed endorsed members versus Lee and Jurado, not listed in the reviewed annual source. District 6 and holdovers are excluded rather than coded as unendorsed. Annual coverage combines primary and general choices (including competing CD10 candidates); the comparison is explicitly descriptive, not a simultaneous slate or an exhaustive non-endorsement claim. The within-Democrat comparator is Jurado alone. Earlier window markers do not borrow 2024 endorsements. Supporting notes are under Data/LosAngeles/endorsement_evidence/.

Full estimates and implementation

name mean lower upper n_votes party rhat ess
Eunisses Hernandez -3.201 -3.817 -2.619 405 Democratic 1.008 74.121
Hugo Soto-Martinez -1.596 -1.937 -1.292 220 Democratic 1.003 510.763
Ysabel J. Jurado -0.961 -1.158 -0.792 172 Democratic 1.003 763.243
Mike Bonin -0.823 -1.237 -0.560 175 Democratic 1.007 523.123
Nithya Raman -0.288 -0.354 -0.222 541 Democratic 1.010 570.680
Marqueece Harris-Dawson -0.204 -0.267 -0.137 595 Democratic 1.010 473.639
Katy Young-Yaroslavsky -0.143 -0.227 -0.052 218 Democratic 1.003 771.866
Heather Hutt -0.089 -0.159 -0.016 479 Democratic 1.004 515.351
Kevin De Leon -0.077 -0.150 0.000 340 Democratic 1.011 512.295
Paul Koretz -0.049 -0.129 0.037 194 Democratic 1.009 585.095
Mark Ridley-Thomas 0.057 -0.223 0.474 22 Democratic 1.001 2945.065
Curren D Price Jr. 0.191 0.097 0.292 489 Democratic 1.001 481.267
Herb J. Wesson Jr. 0.212 -0.018 0.458 26 Democratic 1.001 2140.929
Bob Blumenfield 0.287 0.186 0.398 598 Democratic 1.003 422.403
Mitch O'Farrell 0.301 0.173 0.442 205 Democratic 1.001 707.324
Paul Krekorian 0.310 0.198 0.432 381 Democratic 1.001 478.451
Nury Martinez 0.358 0.208 0.528 145 Democratic 1.002 968.925
Traci Park 0.403 0.267 0.553 388 Democratic 1.000 477.344
Gilbert Cedillo 0.441 0.258 0.639 127 Democratic 1.001 818.345
Imelda Padilla 0.460 0.290 0.644 254 Democratic 1.001 612.826
Adrin Nazarian 0.567 0.381 0.761 176 Democratic 1.000 479.976
John Lee 0.672 0.527 0.839 533 Republican 1.005 311.042
Monica Rodriguez 0.696 0.531 0.872 456 Democratic 1.003 435.864
Joseph Buscaino 2.476 1.898 3.205 190 Democratic 1.007 168.580

Code/48_prepare_la.py preserves the municipality subset. Code/49_fit_la.r constructs the matrix and fits the two chains; Code/50_la_report_outputs.r creates shared-axis plots and organizational checks without refitting. Canonical outputs are under Results/LosAngeles/. Render la-report.qmd and la-technical-appendix.qmd from the Local project directory. No cross-city or state-common-space mapping, district-election validation, posterior predictive assessment or comprehensive source audit is claimed in this initial LA analysis.