Data Science · Klinik Klinische Datenanalyse & Machine Learning
Ansicht
Lerntiefe
Codeansicht
Farbschema

21 · Auswahl der passenden statistischen Methode

mann_whitney_median_myth.png

Abbildung · Quellcode

mann_whitney_median_myth

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
# --- 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")

← zurück zu Modul 21 · vollständige Datei ansehen