21 · Auswahl der passenden statistischen Methode
mann_whitney_median_myth.png
Abbildung · Quellcode

Erzeugt im Abschnitt „mann_whitney_median_myth" in data/figures.py, Zeile 909–963.
Dieses Skript läuft von oben nach unten. Der gemeinsame Vorspann — Bibliotheken, Kohorte laden, Plot-Stil — steht am Anfang der vollständigen Datei und gilt für alle Abbildungen darin.
Python
Python-Code: in eine Datei mit Endung
.py schreiben und mit dem ▶-Knopf in VS Code ausführen – oder Zeile für Zeile in die Python-Konsole. Setzt die in Modul 02 eingerichtete Umgebung voraus.# --- 6) Mann-Whitney U test median myth --- print(" 6) Mann-Whitney-Median-Mythos ...") np.random.seed(42) n_samples = 5000 # Group B: Concentrated lognormal (median e^1.25 = 3.50) group_b = np.random.lognormal(mean=np.log(3.5), sigma=0.25, size=n_samples) target_median = np.median(group_b) # Group A: Bi-modal / skewed mixture shifted to have the EXACT same median group_a_raw = np.concatenate([ np.random.normal(loc=1.8, scale=0.5, size=int(n_samples * 0.60)), np.random.normal(loc=7.5, scale=2.2, size=int(n_samples * 0.40)) ]) group_a_raw = np.clip(group_a_raw, 0.1, None) median_a = np.median(group_a_raw) group_a = group_a_raw + (target_median - median_a) fig, ax = plt.subplots(figsize=(8, 4.8)) # Compute smooth density curves using KDE kde_a = stats.gaussian_kde(group_a) kde_b = stats.gaussian_kde(group_b) x_grid = np.linspace(0, 14, 500) density_a = kde_a(x_grid) density_b = kde_b(x_grid) # Plot Group A (spread) ax.plot(x_grid, density_a, color=PRIMARY, linewidth=2, label="Gruppe A (breiter verteilt)") ax.fill_between(x_grid, density_a, alpha=0.15, color=PRIMARY) # Plot Group B (concentrated) ax.plot(x_grid, density_b, color=EVENT, linewidth=2, label="Gruppe B (konzentriert)") ax.fill_between(x_grid, density_b, alpha=0.15, color=EVENT) # Median line ax.axvline(target_median, color="#16181C", linestyle="--", linewidth=1.5) ax.text(target_median + 0.15, 0.58, f"Median = {target_median:.2f}\n(identisch in beiden Gruppen)", color="#16181C", fontsize=9.5, fontweight="semibold") # Add text for MWU p-value u_stat, p_val = stats.mannwhitneyu(group_a, group_b, alternative='two-sided') ax.text(8.5, 0.40, f"Mann-Whitney-U\np < 0.001", color="#16181C", fontsize=12, fontweight="bold") # Title and subtitles (bold title, smaller sub) ax.set_title("Gleicher Median. Signifikanter Mann-Whitney-Test.\nDer Test prüft stochastische Dominanz, nicht den Unterschied der Mediane.", fontsize=11, fontweight="semibold", pad=12, loc="left") ax.set_xlabel("Messwert (Value)") ax.set_ylabel("Wahrscheinlichkeitsdichte (Density)") ax.set_xlim(-0.2, 14) ax.set_ylim(0, 0.7) ax.grid(True, linestyle=":", alpha=0.6) ax.legend(loc="lower right") save(fig, M21_DIR / "mann_whitney_median_myth.png")