# Center Drift Report (Procrustes-Aligned)

> **Part of the Overton Window Analysis.** See the [synthesis report](overton_window_synthesis.md) for the integrated narrative, or the [interactive article](overton_window.qmd) for the full story with charts.

## Alignment Method

Party positions are Procrustes-aligned across all windows, then PCA-rotated to a common 2D reference frame. This ensures that axis orientation is consistent across time — no stability validation is needed because all positions live in the same coordinate system.

This is the same alignment used by the Explorer UI compass and trajectories: 1) zero-padding vectors to max dimension across all windows, 2) chained Procrustes orthogonal rotation (each window to the previous aligned one), 3) global PCA on the stacked aligned matrix, 4) flip-correction per component using canonical left/right parties.

**Note:** Non-annual windows excluded from drift analysis: current_parliament

## Axis Interpretation

After flip correction, the Procrustes-aligned PCA axes have the following sign convention (verified by querying party positions):

- **Axis 1 (economic):** Positive = pro-market/right, negative = welfare/left. Right-wing parties score higher; left-wing parties score lower.
- **Axis 2 (cultural/nationalist):** Positive = kosmopolitisch/left-wing, **negative = nationalist/right-wing**. This is the *opposite* of what the raw `SVD_THEMES[2]` label says, because PCA axes are flip-corrected to align with canonical left/right parties.

> **Signed parties:** PVV (y = −0.56), FVD (y = −0.36), JA21 (y = −0.36) all negative = nationalist/right-wing. GL-PvdA (y = +0.21), Volt (y = +0.27) positive = kosmopolitisch/left-wing.

## Centrist Center of Gravity

| Window | Centrist Ax1 | Centrist Ax2 | Right Ax1 | Right Ax2 | Centrist Parties | Right Parties |
|---|---|---|---|---|---|---|
| 2016 | 0.3395 | 0.0103 | 0.1321 | -0.2716 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, JA21, PVV, SGP |
| 2017 | 0.2623 | 0.0278 | 0.0981 | -0.3418 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, JA21, PVV, SGP |
| 2018 | 0.2844 | 0.1560 | 0.0724 | -0.3819 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, JA21, PVV, SGP |
| 2019 | 0.0535 | 0.0446 | -0.0361 | -0.2754 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, JA21, PVV, SGP |
| 2020 | 0.2615 | 0.1170 | -0.0858 | -0.3468 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, JA21, PVV, SGP |
| 2021 | 0.1182 | 0.0838 | 0.0378 | -0.3388 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, JA21, PVV, SGP |
| 2022 | 0.1567 | 0.1876 | 0.0117 | -0.3509 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, JA21, PVV, SGP |
| 2023 | 0.0951 | -0.0041 | -0.0040 | -0.3228 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, PVV, SGP |
| 2024 | 0.2122 | 0.1209 | 0.1295 | -0.3524 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, PVV, SGP |
| 2025 | 0.0214 | -0.0010 | 0.0323 | -0.3755 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, PVV, SGP |
| 2026 | 0.1169 | 0.0914 | 0.0542 | -0.3368 | BBB, CDA, ChristenUnie, D66, NSC, VVD | FVD, PVV, SGP |
| current_parliament | 0.0366 | 0.0181 | 0.0703 | -0.2993 | BBB, CDA, ChristenUnie, D66, NSC, VVD | PVV, SGP |

## Drift Metrics (Annual Windows Only)

- **Net centrist displacement (first → last):** 0.236936
  - Δ axis-1: −0.222632 → **LEFT** economically (more welfare-oriented)
  - Δ axis-2: +0.081077 → **LEFT** culturally (more kosmopolitisch)
- **Net direction:** 159.99° (arctan2(Δy, Δx))
  - Negative Δx = leftward on axis 1 (welfare)
  - Positive Δy = leftward on axis 2 (kosmopolitisch)

- **Right-wing net displacement (reference):**
  - Net displacement: 0.101517
  - Δ axis-1: −0.077852 → **LEFT** economically (slightly more welfare)
  - Δ axis-2: −0.065152 → **RIGHT** culturally (more nationalist)

- **Centrist–right distance (Euclidean):**
  - First window: 0.3500
  - Last window: 0.4327
  - Δ distance: +0.0827
- **Centrist–right cultural distance (axis 2):**
  - First window: 0.282 → Centrist +0.010, Right −0.272
  - Last window: 0.428 → Centrist +0.091, Right −0.337
  - Δ cultural distance: +0.146 (culture gap widened)

### Year-over-Year Drift

| Window Pair | Distance | Δ Axis-1 | Δ Axis-2 |
|---|---|---|---|
| 2016-2017 | 0.079190 | -0.077243 | +0.017454 |
| 2017-2018 | 0.130100 | +0.022145 | +0.128201 |
| 2018-2019 | 0.256345 | -0.230871 | -0.111406 |
| 2019-2020 | 0.220175 | +0.207912 | +0.072456 |
| 2020-2021 | 0.147073 | -0.143268 | -0.033236 |
| 2021-2022 | 0.110660 | +0.038466 | +0.103759 |
| 2022-2023 | 0.201353 | -0.061559 | -0.191712 |
| 2023-2024 | 0.171334 | +0.117084 | +0.125086 |
| 2024-2025 | 0.226449 | -0.190820 | -0.121930 |
| 2025-2026 | 0.132903 | +0.095522 | +0.092406 |

**Total path length:** 1.675582

## Chart

![Drift Chart](svd_drift_chart.png)

## Key Finding: Spatial Divergence

Centrists moved **LEFT on both axes** while right-wing moved **further RIGHT culturally**. The centrist–right cultural distance widened (0.282 → 0.428, +0.146). This is **spatial divergence**, not convergence — consistent with "acceptance without conversion": the political window widens without parties changing their underlying ideological positions. Centrists became more welfare-oriented and kosmopolitisch; right-wing became more nationalist.

## Interpretability Statement

Party positions use Procrustes-aligned PCA axes that provide a common reference frame across all windows. Unlike raw per-window SVD axes — which may re-orient between windows and cause 9/10 consecutive window pairs to fail axis stability (Spearman ρ < 0.7) — this alignment ensures that positional changes reflect genuine shifts in voting behavior rather than axis re-orientation artifacts. The centrist center-of-gravity movement on the 2D compass can be interpreted as a measure of ideological drift.

---

*Note: PCA axes reflect voting patterns, not semantic content. A shift means voting behavior changed, not that parties changed their rhetoric. See: docs/solutions/best-practices/svd-labels-voting-patterns-not-semantics.md*

