fix: use Procrustes-aligned scores for all 10 SVD components (consistent with compass)
This commit is contained in:
+4
-10
@@ -2670,17 +2670,11 @@ def build_svd_components_tab(db_path: str) -> None:
|
|||||||
if score_list
|
if score_list
|
||||||
}
|
}
|
||||||
|
|
||||||
# Extract 1D scores for this component.
|
# Extract 1D scores for this component using Procrustes-aligned PCA scores.
|
||||||
# Components 1 and 2 are literally the x and y axes of the compass (Procrustes-aligned
|
# All 10 components use _get_aligned_party_scores (compute_nd_axes with annual-only
|
||||||
# PCA via compute_2d_axes). Use _get_aligned_party_coords so the numbers are identical
|
# windows). This is mathematically identical to the compass x/y positions for
|
||||||
# to what the compass shows. Components 3-10 fall back to compute_nd_axes scores.
|
# components 1 and 2, and consistently uses the same aligned data for 3-10.
|
||||||
party_1d_coords: dict = {}
|
party_1d_coords: dict = {}
|
||||||
if comp_sel in (1, 2):
|
|
||||||
coord_idx = 0 if comp_sel == 1 else 1
|
|
||||||
aligned_2d = _get_aligned_party_coords(svd_window)
|
|
||||||
for party, xy in aligned_2d.items():
|
|
||||||
party_1d_coords[party] = (float(xy[coord_idx]),)
|
|
||||||
else:
|
|
||||||
aligned_all_scores = _get_aligned_party_scores(svd_window)
|
aligned_all_scores = _get_aligned_party_scores(svd_window)
|
||||||
for party, all_scores in aligned_all_scores.items():
|
for party, all_scores in aligned_all_scores.items():
|
||||||
idx = comp_sel - 1 # 0-indexed
|
idx = comp_sel - 1 # 0-indexed
|
||||||
|
|||||||
Reference in New Issue
Block a user