fix: pass annual-only windows to compute_nd_axes in SVD components tab

_get_aligned_party_scores and _get_aligned_trajectory_scores both called
compute_nd_axes() with no window_ids, which defaulted to _load_window_ids()
returning ALL windows including quarterly. This caused the SVD component 1
bar chart to disagree with the compass (which correctly used annual-only
windows via get_uniform_dim_windows). D66 appeared between GL-PvdA and PvdD
in component 1 because quarterly windows contaminated the PCA basis.
main
Sven Geboers 2 weeks ago
parent 62d8e15e03
commit f8a52ea9b7
  1. 11
      explorer.py

@ -633,8 +633,10 @@ def _get_aligned_trajectory_scores(
""" """
from analysis.political_axis import compute_nd_axes from analysis.political_axis import compute_nd_axes
# Get aligned scores for all windows via PCA # Get aligned scores for the requested windows via PCA (annual-only, no quarterly)
scores_by_window, _ = compute_nd_axes(db_path, n_components=n_components) scores_by_window, _ = compute_nd_axes(
db_path, window_ids=windows, n_components=n_components
)
if not scores_by_window: if not scores_by_window:
return {} return {}
@ -2634,7 +2636,10 @@ def build_svd_components_tab(db_path: str) -> None:
"""Get party scores for all N components from aligned PCA positions.""" """Get party scores for all N components from aligned PCA positions."""
from analysis.political_axis import compute_nd_axes from analysis.political_axis import compute_nd_axes
scores_by_window, _ = compute_nd_axes(db_path, n_components=10) annual_windows = get_uniform_dim_windows(db_path)
scores_by_window, _ = compute_nd_axes(
db_path, window_ids=annual_windows, n_components=10
)
window_scores = scores_by_window.get(window, {}) window_scores = scores_by_window.get(window, {})
if not window_scores: if not window_scores:
return {} return {}

Loading…
Cancel
Save