14 · Fehlende Werte und Imputation
imputation_coverage.png
Abbildung · Quellcode

Erzeugt von make_figure() in module/14-fehlende-werte/code/benchmark.py, Zeile 499–560.
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.def make_figure(beta_metrics: dict[str, dict]) -> None: import matplotlib.pyplot as plt apply_style() order = list(reversed(METHOD_ORDER)) # oracle on top labels_de = { "oracle": "Oracle (volle Wahrheit)", "complete_case": "Complete Case", "mean_imputation": "Mittelwert-Imputation", "median_imputation": "Median-Imputation", "regression_deterministic": "Regressions-Imputation (deterministisch)", "regression_stochastic": "Regressions-Imputation (stochastisch, single)", "pmm": "PMM (single, k=5)", "mice": "MICE (m=20, Rubin's rules)", "missing_indicator": "Missing-Indicator-Methode", } coverage = [beta_metrics[k]["coverage"] for k in order] colors = [] for k in order: if k in ("oracle",): colors.append(PRIMARY) elif k == "complete_case": colors.append(SECONDARY) elif k == "mice": colors.append(PALETTE[2]) # multiple imputation -- distinct colour else: colors.append(EVENT) # single-imputation methods fig, ax = plt.subplots(figsize=(9, 5.5)) nominal = 0.95 tol = 2 * np.sqrt(nominal * (1 - nominal) / R) ax.axvspan(nominal - tol, nominal + tol, color="#ECEDEF", zorder=0, label=f"Monte-Carlo-Toleranz (±2·SE, R={R})") ax.axvline(nominal, color=SECONDARY, linewidth=1.2, linestyle="--", zorder=1) bars = ax.barh(range(len(order)), coverage, color=colors, edgecolor="none", height=0.6, zorder=2) ax.set_yticks(range(len(order))) ax.set_yticklabels([labels_de[k] for k in order]) ax.set_xlim(0, 1.05) ax.set_xlabel("95%-CI-Abdeckung für beta(bga_ph)") ax.set_title("Abdeckung des 95%-Konfidenzintervalls je Imputationsmethode") ax.grid(axis="x") ax.grid(axis="y", visible=False) for bar, cov, k in zip(bars, coverage, order): single = " (single)" if k in SINGLE_IMPUTATION else "" ax.text(min(cov + 0.015, 1.0), bar.get_y() + bar.get_height() / 2, f"{cov:.0%}{single}", va="center", fontsize=9) from matplotlib.patches import Patch legend_items = [ Patch(facecolor=PRIMARY, label="Oracle (volle Daten)"), Patch(facecolor=SECONDARY, label="Complete Case"), Patch(facecolor=EVENT, label="Single-Imputation-Methoden"), Patch(facecolor=PALETTE[2], label="Multiple Imputation (MICE)"), ] ax.legend(handles=legend_items, loc="lower right", fontsize=9) save(fig, Path(__file__).resolve().parents[1] / "assets" / "imputation_coverage.png")