9.2 KiB
| title | date | category | module | problem_type | component | severity | applies_when | tags |
|---|---|---|---|---|---|---|---|---|
| Measuring Overton window shifts with parliamentary voting data | 2026-05-24 | best-practices/ | analysis/right_wing | best_practice | development_workflow | medium | [Analyzing longitudinal shifts in political acceptability of motions Testing whether centrist parties moved toward policy extremes Distinguishing coalition-driven voting from genuine ideological repositioning] | [overton-window parliamentary-voting centrist-classification svd-drift acceptance-without-conversion dutch-parliament political-analysis extremity-scoring] |
Measuring Overton Window Shifts with Parliamentary Voting Data
Context
Dutch Tweede Kamer voting data over 2016–2026 provides a natural experiment for testing whether the political Overton window — the range of politically acceptable policy proposals — has shifted rightward. The central question: did centrist parties become more accepting of right-wing policy, and what objective indicators support or refute a genuine shift?
Initial analysis efforts ran into three structural problems before converging on a reliable methodology. (session history)
Guidance
1. Define Centrist Parties by Quantitative Position
Do not assume party self-labels or media classifications. Define centrist parties by their SVD position on the primary left-right axis:
- Compute SVD scores per party per window
- A party qualifies as centrist only if its coordinate falls within ±0.5σ of the parliamentary median over the full period
- In the Dutch context, this yields D66, CDA, CU, NSC as centrist
- VVD and BBB are center-right, not centrist — including them inflated baseline centrist support by ~0.13 and diluted the Overton shift signal from d=0.85 to d=0.68 (session history)
2. Align SVD Axes with Procrustes + Validate Sign via Anchor Parties
Raw per-window SVD axes are independently computed and not comparable across years. The stability gate (Spearman correlation of party rankings) failed for 9/10 consecutive window pairs.
Correct approach:
- Use chained Procrustes alignment to the first chronological window
- Zero-pad vectors to max dimension across all windows
- Run global PCA on the stacked aligned matrix
- Apply flip correction per axis using canonical right/left party centroids
- Critically: after flip correction, axis sign may differ from raw SVD_THEMES labels. Always validate orientation against 2+ known-party anchors (e.g., PVV vs Volt on axis-2) before interpreting direction
For the Dutch parliament after flip correction:
- Axis 1 (economic): positive = pro-market, negative = welfare
- Axis 2 (cultural): negative = nationalist (PVV at -0.56, FVD at -0.36), positive = kosmopolitisch (Volt at +0.27, GL-PvdA at +0.21) — this is the opposite of raw
SVD_THEMES[2]labeling
3. Replace Pass Rate with Centrist Support Fraction
The Dutch Tweede Kamer passes 96%+ of all motions. Pass rate is structurally useless — no signal survives the ceiling effect.
Use instead: centrist_support = centrist_voor_votes / centrist_total_votes
In the party-disciplined Dutch context, computing this as fraction-of-parties vs fraction-of-MPs produces near-identical results (r = 0.998, mean difference < 0.001), but MP-level is preferred for international comparability.
4. The Overton Test: Rising Support + Widening Ideological Distance
The defining signature of an Overton window widening is acceptance without conversion:
- Centrist voting support for right-wing motions rises (Cohen's d = +0.85 for opposition-only motions)
- But SVD axes show centrists moved LEFT on both dimensions (economic: -0.223, cultural: +0.081 toward kosmopolitisch)
- And the cultural distance between centrist and right-wing parties widened from 0.282 to 0.428 (+0.146)
- The combined pattern rules out ideological conversion and confirms window widening: the range of acceptable policy expanded without centrist parties themselves moving right
5. Opposition-Only Filter as Coalition Control
Motions submitted by government parties after they enter coalition could reflect coalition discipline, not ideological shift. Filter to motions where the lead submitter party is NOT in the ruling coalition:
- Parse submitter party from motion title prefixes
- Hardcode coalition composition per year
- If opposition-only centrist support also rises (as it did: d=+0.85, stronger than overall d=+0.65), the shift is not coalition-driven
Fragility note: submitter parsing covers ~87–91% of motions. Missing 10%+ are bills, amendments, and motions with non-standard titles.
6. Extremity-Stratified Centrist Support as Tolerance Test
Bucket right-wing motions by LLM-scored extremity (1–2, 2–3, 3–4, 4–5). Compute centrist support per bucket for pre-2024 vs post-2024:
- If high-extremity motions gained disproportionate support: centrists became more tolerant of extreme content
- If all buckets rose uniformly: the shift is about quantity, not tolerance
- If only mild motions rose: right-wing parties filed milder motions, shift is illusory
The persistence of a gradient (centrists still differentiate by extremity post-shift) confirms centrist support is not random — they vote strategically, not blindly.
7. Audit LLM Scores with 2D Rescoring
LLM-based extremity scores conflate two distinct dimensions:
- Stylistic extremity: inflammatory language, emotional charge
- Material impact: substantive rights restriction, institutional change
Manual audit of 5 motions per extremity bucket (20 total) found 75% agreement with systematic LLM biases: overrating anti-institutional language and migration-adjacent content. A flat content extremity trend (d=-0.09) may partially reflect these biases rather than genuine stability.
Mitigation: deferred two-dimensional rescoring on a stratified sample to measure correlation. If r < 0.6, the dimensions are independent and dual scoring is required.
Why This Matters
Without this methodology, Overton window analysis produces false negatives or ambiguous results:
- Loose centrist definitions mask the signal (session history)
- Pass rate creates a false negative (no detectable change at 96%+ ceiling)
- Raw SVD mislabels axis direction, producing the wrong interpretation (centrists moving "right" when they actually moved left)
- Missing opposition control conflates coalition discipline with ideological shift
The "acceptance without conversion" finding has implications beyond Dutch politics: it demonstrates that policy acceptance can expand without ideological convergence, a pattern observable in any party-disciplined legislature with longitudinal voting data.
When to Apply
- When analyzing longitudinal shifts in policy acceptability from voting records
- When centrist parties show increased voting alignment with fringe parties
- When distinguishing between coalition effects and genuine ideological repositioning
- When working with per-window SVD/PCA embeddings that need cross-temporal comparison
- When using LLM-scored extremity metrics as independent variables — audit first
Examples
Before (what didn't work):
- Raw per-window SVD positions compared without alignment → 9/10 stability failures, uninterpretable
- Pass rate tracked as primary Overton metric → flatline at 96%+, no signal
- Loose centrist definition (VVD, D66, CDA, NSC, BBB, CU) → inflated baseline, diluted d=0.68
- Static SVD_THEMES pole labels assumed without verifying against anchor parties → wrong axis direction
After (what works):
- Procrustes-aligned PCA with anchor-party sign validation → interpretable cross-window drift
- Centrist support fraction as primary metric → clear pre/post shift (d=+0.65 strict, d=+0.85 opposition-only)
- Strict centrist definition (D66, CDA, CU, NSC) → unmasked the full effect size
- Runtime flip correction produces correct axis convention → centrists moved LEFT on both axes, diverging from right
Extensions
The core methodology above is extended by:
overton-extended-analysis-methodology-2026-05-26.md— voting margin, party differentiation, coalition date coding, mechanism validation, left-wing response, predictive modeling, SVD divergence trajectories, quarterly temporal decomposition, and 2D extremity divergence
Related
domain-decomposition-overton-analysis.md— domain decomposition reveals hidden variance in aggregate shiftsdocs/solutions/best-practices/svd-labels-voting-patterns-not-semantics.md— foundational: SVD captures voting patterns, not semantic contentdocs/solutions/ui-bugs/svd-axis-pole-labels-incorrect-after-flip.md— sign convention discovery via runtime flipdocs/solutions/insights/quantifying-political-extremity.md— voting extremity vs policy extremity are independentdocs/solutions/insights/svd-stability-vs-overtone-shift.md— SVD stability and Overton shift are independent phenomenadocs/solutions/logic-errors/svd-component-labels-mismatch.md— initial semantic-vs-voting labeling confusionanalysis/right_wing/overton_breakpoint_analysis.py— reference implementationanalysis/right_wing/overton_svd_drift.py— Procrustes-aligned drift computationanalysis/right_wing/classify_motions.py— centrist_support computation logic