mirror of
https://github.com/wassname/moral-maps.git
synced 2026-09-09 11:27:22 +08:00
MFV human map: add Netherlands (Hopp et al. 2024 Dutch MFV, N=586)
Clifford MFV wrongness vignettes, 1-5 scale (same as existing LatAm/Japan rows). Care collapsed from their split physical(4.09)+emotional(3.53) to a single 3.81; other foundations from their Table 1 with paper 95% CIs. Grows the human country cloud 5 -> 6. Note: the Dutch and LatAm authors both flag MFV measurement non-invariance (DIF) across countries, so between-country means are a rough reference, not a calibrated ranking. Map is ipsative (within-country z), which is affine- invariant to the scale, so it reads relative foundation emphasis. Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
This commit is contained in:
@@ -210,15 +210,18 @@ def plot_ordinal(run_dir: Path, out: Path, name: str, vec_label: str, C: float,
|
||||
plt.close(figm)
|
||||
|
||||
# Alternative NAMED-AXIS value map (interpretable poles, no compass/minimap): project the
|
||||
# societies + the AI base/steered points onto the instrument's two named value axes.
|
||||
# societies + the AI base/steered points onto the instrument's two named value axes, and draw the
|
||||
# steer as a CONNECTED base->+c/-c path (same visual language as the ipsative map's trajectory).
|
||||
from tinymfv.value_axes import VALUE_AXES, value_coords, axis_score
|
||||
if name in VALUE_AXES:
|
||||
Pval, poles = value_coords(Mfrac, dims, name)
|
||||
(_, _, xa), (_, _, ya) = VALUE_AXES[name]
|
||||
ai = {lab: (axis_score(_frac(v, instr.scale_max), dims, xa),
|
||||
axis_score(_frac(v, instr.scale_max), dims, ya))
|
||||
for lab, v in zip(labels, (base, pos, neg))}
|
||||
figv = T.maps.plot_value_map(instr.display, countries, Pval, poles, models=ai, emphasize=emph,
|
||||
def _vscore(v):
|
||||
fv = _frac(v, instr.scale_max)
|
||||
return axis_score(fv, dims, xa), axis_score(fv, dims, ya)
|
||||
steer = {k: (*_vscore(v), lab) for k, v, lab in
|
||||
[("base", base, labels[0]), ("pos", pos, labels[1]), ("neg", neg, labels[2])]}
|
||||
figv = T.maps.plot_value_map(instr.display, countries, Pval, poles, steer=steer, emphasize=emph,
|
||||
title=f"{instr.display}: value map, LLM steered for {vec_label}")
|
||||
paths.append(T.maps.save_both(figv, out / name, "map_value"))
|
||||
plt.close(figv)
|
||||
@@ -242,7 +245,8 @@ def _zscore(v: np.ndarray) -> np.ndarray:
|
||||
|
||||
def read_human_mfv() -> tuple[list[str], dict[str, dict[str, float]]]:
|
||||
"""(countries, {country: {foundation: mean_1to5}}) from the bundled MFV human norms.
|
||||
JimenezLeal2025 (LatAm) + Yamada2025 (MFV-J): 5 countries x 6 foundations (no Social Norms)."""
|
||||
JimenezLeal2025 (LatAm) + Yamada2025 (MFV-J) + Hopp2024 (Dutch): 6 countries x 6 foundations
|
||||
(no Social Norms)."""
|
||||
path = T.maps.DATA / "human" / "mfv_country_factors.csv"
|
||||
by_country: dict[str, dict[str, float]] = {}
|
||||
with open(path, newline="") as fh:
|
||||
|
||||
@@ -29,3 +29,9 @@ Japan,fairness,3.818,0.531,564,0.0224,3.774,3.862,5,Yamada2025_MFV-J
|
||||
Japan,liberty,3.535,0.564,564,0.0237,3.488,3.581,5,Yamada2025_MFV-J
|
||||
Japan,loyalty,2.699,0.616,564,0.0259,2.648,2.749,5,Yamada2025_MFV-J
|
||||
Japan,sanctity,3.489,0.599,564,0.0252,3.44,3.539,5,Yamada2025_MFV-J
|
||||
Netherlands,authority,2.89,0.92,269,0.0561,2.78,3.0,5,Hopp2024_DutchMFV
|
||||
Netherlands,care,3.81,0.99,655,0.0387,3.73,3.89,5,Hopp2024_DutchMFV
|
||||
Netherlands,fairness,3.72,0.91,318,0.051,3.62,3.82,5,Hopp2024_DutchMFV
|
||||
Netherlands,liberty,3.94,0.89,304,0.051,3.84,4.04,5,Hopp2024_DutchMFV
|
||||
Netherlands,loyalty,2.68,1.09,345,0.0587,2.57,2.8,5,Hopp2024_DutchMFV
|
||||
Netherlands,sanctity,3.64,1.15,353,0.0612,3.52,3.76,5,Hopp2024_DutchMFV
|
||||
|
||||
|
Reference in New Issue
Block a user