ROC-Kurve: Definition, AUC & Anwendung in der Diagnostik
Die ROC-Kurve (Receiver Operating Characteristic) visualisiert die diagnostische Güte eines Tests über alle Cut-off-Werte. Definition, AUC, Cut-off-Optimierung und Berechnung in SPSS und R.
Definition
Die ROC-Kurve (Receiver Operating Characteristic Curve) ist eine grafische Darstellung der Sensitivität (True Positive Rate, TPR) gegen 1 − Spezifität (False Positive Rate, FPR) eines diagnostischen Tests, bei der die Trennschwelle (Cut-off) systematisch über den gesamten Wertebereich variiert wird. Sie erlaubt die Beurteilung der diagnostischen Trennschärfe unabhängig von einem konkreten Cut-off und ist Goldstandard für die Bewertung kontinuierlicher diagnostischer Marker.
Die zugehörige Maßzahl AUC (Area Under the Curve, auch AUROC) quantifiziert die Fläche unter der ROC-Kurve und liegt zwischen 0,5 (kein diagnostischer Wert — Zufall) und 1,0 (perfekte Trennung).
Merke: Die ROC-Kurve ist cut-off-frei. Sie sagt: "Wie gut trennt mein Marker grundsätzlich Kranke von Gesunden?" — nicht: "Welcher Cut-off ist klinisch sinnvoll?". Letzteres ist eine separate Entscheidung (siehe Youden-Index unten).
Formel
Die AUC ist mathematisch definiert als das Integral der Sensitivität über die Falsch-Positiv-Rate:
$$AUC = \int_0^1 TPR(FPR) , dFPR$$
Anschaulicher ist die probabilistische Interpretation (Mann-Whitney-U-äquivalent):
$$AUC = P(X_{krank} > X_{gesund})$$
Das heißt: Die AUC ist die Wahrscheinlichkeit, dass ein zufällig gezogener Kranker einen höheren Markerwert hat als ein zufällig gezogener Gesunder. Eine AUC von 0,85 bedeutet also: In 85 % aller Paarungen (Kranker vs. Gesunder) ordnet der Marker korrekt.
Voraussetzungen
Damit eine ROC-Analyse sinnvoll und interpretierbar ist:
- Binärer Goldstandard — der wahre Krankheitsstatus muss dichotom (krank/gesund) durch ein Referenzverfahren bekannt sein (Histologie, Bildgebung, klinische Diagnose etc.)
- Kontinuierlicher oder ordinaler Marker — der zu evaluierende Test muss Werte auf einer geordneten Skala liefern (Laborwert, Score, Wahrscheinlichkeit aus einem Prädiktionsmodell)
- Unabhängige Beobachtungen — bei longitudinalen oder geclusterten Daten sind erweiterte Verfahren notwendig (Cluster-Bootstrap)
- Ausreichende Fallzahl in beiden Gruppen — Faustregel: ≥ 30 Kranke und ≥ 30 Gesunde, für stabile Konfidenzintervalle eher ≥ 100 pro Gruppe
- Repräsentative Spektrumsabbildung — die Stichprobe sollte das volle Krankheitsspektrum abbilden, sonst entsteht spectrum bias mit überoptimistischer AUC
Eine ausführliche Diskussion diagnostischer Studiendesigns findest du in der Übersicht zu Statistik in der Doktorarbeit.
Interpretation
Die AUC wird in der medizinischen Literatur klassisch wie folgt eingeordnet:
| AUC | Diagnostische Güte |
|---|---|
| 0,50 | kein Trennwert (Zufall) |
| 0,60 – 0,70 | schwach |
| 0,70 – 0,80 | akzeptabel |
| 0,80 – 0,90 | gut |
| 0,90 – 0,95 | sehr gut |
| > 0,95 | exzellent (Vorsicht: oft Overfitting) |
| 1,00 | perfekt (in der Praxis kaum realistisch) |
Praxis-Tipp: Eine AUC < 0,5 bedeutet nicht "schlechter als Zufall" — sondern, dass der Marker invers zur Erkrankung läuft. Einfach das Vorzeichen drehen → AUC = 1 − AUC_alt.
Die AUC sollte immer mit 95%-Konfidenzintervall berichtet werden (z.B. AUC = 0,82; 95%-KI: 0,76 – 0,88). Der Vergleich zweier ROC-Kurven erfolgt mit dem DeLong-Test.
Klinisches Anwendungsbeispiel
Studie: Diagnostische Wertigkeit von hochsensitivem Troponin T (hsTnT) bei Verdacht auf akuten Myokardinfarkt in der Notaufnahme. Goldstandard: Adjudikation durch zwei verblindete Kardiologen.
- n = 1.200 Patienten (240 mit NSTEMI, 960 ohne)
- hsTnT-Werte 1 h nach Aufnahme (kontinuierlich, ng/L)
- AUC = 0,94 (95%-KI: 0,92 – 0,96)
- Optimaler Cut-off via Youden-Index: 14 ng/L
- Sensitivität: 91,7 %
- Spezifität: 88,3 %
- PPV: 60,6 %, NPV: 97,7 %
Interpretation: Die AUC von 0,94 zeigt eine sehr gute diagnostische Trennschärfe — bei 94 % aller Paarungen (NSTEMI vs. kein NSTEMI) hat der Patient mit Infarkt den höheren hsTnT-Wert. Der Cut-off von 14 ng/L maximiert Sensitivität + Spezifität (Youden-Index J = 0,80). Klinisch wird man je nach Setting (Rule-out vs. Rule-in) jedoch unterschiedliche Cut-offs wählen — bei Rule-out priorisiert man Sensitivität (niedriger Cut-off, hoher NPV), bei Rule-in Spezifität (hoher Cut-off, hoher PPV).
Cut-off-Bestimmung: Youden-Index
Der gebräuchlichste Index zur Cut-off-Optimierung ist der Youden-Index J:
$$J = \text{Sensitivität} + \text{Spezifität} - 1$$
Der optimale Cut-off ist der Punkt auf der ROC-Kurve mit maximalem J — geometrisch: der Punkt mit größtem vertikalem Abstand zur Diagonale. Alternativen:
- Closest-to-(0,1)-Methode: Punkt mit minimaler Distanz zur idealen Ecke (0; 1)
- Kostengewichteter Cut-off: wenn falsch-negative und falsch-positive Befunde unterschiedliche klinische Konsequenzen haben (z.B. Tumorscreening vs. präoperatives Screening)
- Klinisch fixierter Cut-off: Sensitivität ≥ 95 % bei Rule-out-Strategien
In SPSS berechnen
Analysieren → ROC-Kurve...
- Testvariable: kontinuierlicher Marker (z.B. hsTnT-Wert)
- Statusvariable: binärer Goldstandard (z.B. NSTEMI ja/nein)
- Wert der Statusvariable: den Wert eingeben, der "krank" kodiert (üblicherweise 1)
- Optionen aktivieren: ✔ Mit diagonaler Bezugslinie, ✔ Standardfehler und Konfidenzintervall, ✔ Koordinatenpunkte der ROC-Kurve
Im Output erhältst du:
- Fläche = AUC
- Asymptotisches 95%-Konfidenzintervall
- Asymptotische Signifikanz = p-Wert für H₀: AUC = 0,5
- Tabelle mit allen Cut-offs + Sensitivität + 1−Spezifität → Youden-Index manuell berechnen
Schwäche von SPSS: Der DeLong-Test zum Vergleich zweier ROC-Kurven ist nicht direkt verfügbar — hier muss auf R ausgewichen werden. Mehr in der SPSS-Anleitung.
In R berechnen
library(pROC)
# ROC-Kurve berechnen
roc_obj <- roc(response = df$nstemi,
predictor = df$hstnt,
ci = TRUE,
levels = c(0, 1),
direction = "<")
# AUC + 95%-KI
auc(roc_obj)
# Area under the curve: 0.9412
ci.auc(roc_obj)
# 95% CI: 0.9203-0.9621 (DeLong)
# Optimaler Cut-off via Youden-Index
coords(roc_obj, "best", best.method = "youden",
ret = c("threshold", "sensitivity", "specificity"))
# threshold sensitivity specificity
# 1 14 0.917 0.883
# Plot mit Konfidenzband
plot(roc_obj, print.auc = TRUE, print.thres = "best",
auc.polygon = TRUE, grid = TRUE)
# Vergleich zweier ROC-Kurven (DeLong)
roc.test(roc_obj1, roc_obj2, method = "delong")
Für komplexere Analysen (zeitabhängige ROC bei Survival-Daten, NetReclassification Improvement) eignen sich die Pakete timeROC und survIDINRI. Mehr in der R-Statistik-Anleitung.
Häufige Fehler
Fehler 1: AUC isoliert ohne Konfidenzintervall berichten
Falsch: "Der Marker zeigte eine AUC von 0,82." Richtig: "AUC = 0,82; 95%-KI: 0,75 – 0,89."
Ohne KI ist die Präzision der Schätzung unbekannt — bei kleinen Stichproben kann das KI sehr breit sein.
Fehler 2: Cut-off auf Trainingsdaten optimieren und als final berichten
Wer Youden-Index auf derselben Stichprobe optimiert, in der die AUC berechnet wird, erzeugt Optimismus-Bias. Korrekt: externe Validierung oder Bootstrap-/Kreuzvalidierungs-Korrektur.
Fehler 3: AUC mit klinischem Nutzen verwechseln
Eine AUC von 0,90 sagt nichts darüber aus, ob der Test in der konkreten Population (mit gegebener Prävalenz) klinisch nützlich ist. PPV/NPV sind prävalenzabhängig — siehe Satz von Bayes.
Fehler 4: Zwei ROC-Kurven "per Augenschein" vergleichen
Visuell sich überschneidende ROC-Kurven können trotzdem signifikant unterschiedliche AUCs haben — und umgekehrt. Immer DeLong-Test rechnen.
Fehler 5: ROC bei kategorialen oder Score-Markern mit wenigen Stufen
Bei Markern mit nur 3–5 Stufen (z.B. Likert-Score) hat die ROC-Kurve nur wenige Eckpunkte → Trapezregel überschätzt die AUC. Hier ggf. nichtparametrische Mann-Whitney-Schätzung verwenden.
Fehler 6: Spektrumsbias ignorieren
Wer nur "klar Kranke" und "klar Gesunde" einschließt (Case-Control-Design), erhält oft AUCs > 0,95 — die in der realen klinischen Population mit Grenzfällen nie reproduziert werden. Konsekutive Patientenrekrutierung ist Goldstandard.
Verwandte Konzepte
- Sensitivität & Spezifität — die zwei Grundkennzahlen, aus denen die ROC-Kurve aufgebaut ist
- Likelihood Ratio — prävalenzunabhängige diagnostische Maßzahl, ergänzt die ROC sinnvoll
- Cut-Point-Bestimmung — Methodik zur Wahl des optimalen Trennwerts (Youden, kostengewichtet)
- PPV & NPV — prädiktive Werte; im Gegensatz zur AUC prävalenzabhängig
- DeLong-Test — nichtparametrischer Vergleich zweier (gepaarter) AUCs
- Net Reclassification Improvement (NRI) — moderne Alternative zur AUC-Differenz beim Vergleich von Prädiktionsmodellen
Häufige Fragen
- „Was ist der Unterschied zwischen ROC-Kurve und AUC?" → Die ROC-Kurve ist die grafische Darstellung der Sensitivität gegen 1 − Spezifität über alle Cut-offs. Die AUC ist die zugehörige skalare Maßzahl — die Fläche unter dieser Kurve. Die ROC zeigt die Form der diagnostischen Performance, die AUC fasst sie in einer Zahl zwischen 0,5 und 1,0 zusammen.
- „Ab welcher AUC ist ein diagnostischer Test klinisch nützlich?" → Eine starre Schwelle gibt es nicht — es hängt vom klinischen Kontext ab. Klassisch gelten AUCs > 0,80 als gut, > 0,90 als sehr gut. Bei Screening-Tests in Niedrig-Prävalenz-Populationen können auch AUCs > 0,90 unzureichend sein (zu viele Falsch-Positive), während bei seltenen, schwer erkennbaren Erkrankungen schon AUCs um 0,75 klinischen Nutzen haben können.
- „Wie bestimme ich den optimalen Cut-off aus einer ROC-Kurve?" → Die häufigste Methode ist der Youden-Index (J = Sensitivität + Spezifität − 1) — der Cut-off mit maximalem J. Alternativ: Closest-to-(0,1)-Methode oder kostengewichtete Optimierung, wenn Falsch-Positive und Falsch-Negative unterschiedliche klinische Konsequenzen haben. Wichtig: Den Cut-off niemals auf derselben Stichprobe optimieren und validieren — sonst Optimismus-Bias.
- „Kann eine AUC kleiner als 0,5 sein?" → Mathematisch ja, klinisch bedeutet das, dass der Marker invers zur Erkrankung läuft (höhere Werte → eher gesund). In der Praxis dreht man dann einfach das Vorzeichen oder die Richtung des Markers um, dann liegt die AUC oberhalb von 0,5. Eine AUC von exakt 0,5 entspricht reinem Zufall.
- „Wie vergleiche ich zwei ROC-Kurven statistisch?" → Goldstandard ist der DeLong-Test (
roc.test()im R-Paket pROC). Er testet H₀: AUC₁ = AUC₂ und berücksichtigt korrekt, ob die ROC-Kurven aus derselben Stichprobe stammen (gepaart) oder aus unabhängigen Stichproben. SPSS bietet diesen Test nicht nativ an — hier auf R ausweichen. - „Was bedeutet die AUC wahrscheinlichkeitstheoretisch?" → Die AUC entspricht der Wahrscheinlichkeit, dass ein zufällig gezogener Kranker einen höheren Markerwert hat als ein zufällig gezogener Gesunder. Eine AUC von 0,82 heißt also: In 82 % aller solchen Paarungen ordnet der Marker korrekt. Diese Interpretation ist äquivalent zur Mann-Whitney-U-Statistik.
- „Wie groß muss meine Stichprobe für eine ROC-Analyse sein?" → Für stabile AUC-Schätzungen mit engen Konfidenzintervallen sollten mindestens 30 Kranke und 30 Gesunde eingeschlossen werden, besser ≥ 100 pro Gruppe. Bei sehr hoher AUC (> 0,9) reichen auch kleinere Fallzahlen, bei niedriger AUC (~ 0,7) und gewünschten engen KIs braucht es deutlich mehr (n > 200 pro Gruppe). Software wie
pROC::power.roc.test()hilft bei der Fallzahlplanung. - „Was ist der Unterschied zwischen AUC und Genauigkeit (Accuracy)?" → Die Accuracy ist der Anteil korrekt klassifizierter Fälle bei einem fixen Cut-off — sie hängt also vom Cut-off und von der Prävalenz ab. Die AUC ist cut-off-frei und prävalenzunabhängig. Daher ist die AUC für die globale diagnostische Bewertung geeigneter, während Accuracy nur für die Bewertung eines konkreten klinischen Workflows mit fixem Cut-off Sinn ergibt.
- „Berücksichtigt die AUC die Krankheitsprävalenz?" → Nein — und das ist gleichzeitig Stärke und Schwäche. Stärke: Die AUC ist zwischen Studien mit unterschiedlicher Prävalenz vergleichbar. Schwäche: Sie sagt nichts über den klinischen Nutzen in einer konkreten Population — dafür braucht es prädiktive Werte (PPV, NPV) oder Decision-Curve-Analyse, die die Prävalenz einbeziehen.