Hallo JMP-Community,
Ich verfüge über einen großen Datensatz mit ca. 4.000 Biomarkermessungen zu Studienbeginn bei Patienten, die an einer klinischen Studie teilnehmen. Ich muss aus diesen Daten herausfinden, welche Kombination von Biomarkern das klinische Ergebnis 12 Wochen später vorhersagen kann.
Ich habe einen ziemlich naiven Ansatz verwendet, der offenbar zu stark überangepassten Ergebnissen führt:
- Führen Sie alle 4.000 Biomarker durch das Screening > Response-Screening, wobei Response das binäre klinische Ergebnis in Woche 12 ist.
- Auswahl der 10 - 20 wichtigsten Biomarker (basierend auf FDR)
- Verwenden Sie die ausgewählten Biomarker (als Modelleffekte) auf der Plattform „Modell anpassen > Schrittweise“, wobei Y das binäre klinische Ergebnis in Woche 12 ist; Kriterium = BIC minimieren
- Generieren des Modells
Während dieser Ansatz hervorragende „Prädiktoren“ für die klinische Reaktion in Woche 12 lieferte (ROC AUC > 0,940), ergab er auch hohe ROC AUC, wenn er mit einer zufällig generierten „Dummy“-Variable getestet wurde (ROC AUC ~0,870). Letzteres zeigt mir, dass meine Methode aufgrund von Überanpassung völlig ungeeignet ist.
Ich habe die Machbarkeit der Arbeit mit Discovery- und Validation-Patientenuntergruppen (50 % der Gesamtbevölkerung) untersucht, aber mein Problem mit der Überanpassung wurde dadurch nicht gelöst.
Gibt es neben der Verwendung der erweiterten Modellierungsplattformen von JMP Pro bessere Techniken in JMP, um eine solche Frage anzugehen?
Ich danke Ihnen für Ihre Hilfe.
Am besten,
TS
Danke für das Beispiel. Lassen Sie uns aus ein paar Perspektiven genau hinsehen. Und sie sollten zu demselben Schluss führen: In den Daten steckt kein Gold.
Erste Perspektive, Daten in Training und Validierung aufteilen, man sollte nicht versuchen, das angepasste Modell basierend auf dem Ergebnis Ihres Skripts zu verwenden.
Zweite Perspektive, passen Sie einfach die gute und alte logistische Regression ohne Train/Val-Splitting an und sehen Sie, ob es Warnzeichen gibt.
Erstes Warnzeichen: Gesamtmodelltest, der besagt, dass die Wahrscheinlichkeit groß ist, dass das Modell nicht besser ist als eine zufällige Vermutung.

Zweites Warnzeichen: Wirkungstests und Parameterbedeutung. Hier ist Wirkungstests. Nur zwei Rote. Wenn diese beiden das Gold sind, ist der Rest Schutt. Trümmer lassen uns glauben, sie seien Gold. Entfernen Sie sie, sollen wir?

Ok, was jetzt am anderen Ende der Schleusenkiste rauskommt, sind die folgenden Whole Tests und Effect Tests. Und achten Sie auf diese p-Werte. Sie liegen zwischen 0,05 und 0,10. Auf dem Zaun, mit üblichen Mitteln. Sollen wir sie behalten? Wenn wir sie entfernen, erhalten wir eine zufällige Vermutung. Tun wir so, als wollten wir sie wirklich behalten und sehen, wie es läuft.


Wie sieht es mit ROC und AUC aus?

AUC ist also 0,59. Gold? Ich vermute, dass es mit üblichen Mitteln auch auf dem Zaun liegt, denn die Modellanprobe sagt, dass das Modell auf dem Zaun steht, also sollte alles davon abgeleitet werden. Benötigen Sie einen Beweis? Ja, wir können einen Beweis haben. Wir können den AUC-Wert booten, wenn Sie JMP Pro haben. Klicken Sie mit der rechten Maustaste auf den AUC-Wert und wählen Sie Bootstrap. Ich habe ihm 10000 Ziehungen gegeben. Und 0,5 liegt im Bereich der Bootstrap-Stichproben. Es kommt also wirklich darauf an, wie sehr man glauben möchte, dass diese beiden verbleibenden Faktoren Gold sind.

Was ich getan habe, ist, ein Bootstrap-Konfidenzintervall um die AUC herum festzulegen. Wir können auch Konfidenzintervalle um ROC herum erstellen, sodass wir möglicherweise sehen, dass die schöne Halbschale überhaupt nicht so beeindruckend ist. Dafür wäre allerdings viel Aufwand nötig. Schauen wir uns stattdessen nur einen Punkt ROC an: den Punkt, der dem 0,5-Cutoff-Schwellenwert entspricht. Hier sind die Schritte.
Schalten Sie zuerst die Confusion Matrix ein.

Schauen Sie sich die hervorgehobenen Zahlen an, sie sind True-Positive-Rate und False-Positive-Rate, die der 0,5-Cutoff-Schwelle entsprechen.
Und wir können diesen Punkt auf ROC wie im folgenden Screenshot am Kreuz finden.

Bootstrap jetzt diese hervorgehobenen Zahlen. Und ich bekomme diese Tabelle, in der Spalte „0“ die Bootstrapped-False-Positive-Rate und Spalte „1“ die Bootstrapped-True-Positive-Rate ist.

Zeichnen Sie Spalte "1" gegen Spalte "0" und überlagern Sie den ROC. Und hier ist, was ich bekomme. Ich habe auch eine diagonale Linie als Referenz gesetzt.

Was die Bootstrap-Stichprobe besagt, dass der Wahrscheinlichkeitsschwellenwert von 0,5 auf ROC eine große Chance über der diagonalen Linie hatte, aber es gibt eine nicht zu vernachlässigende Chance unterhalb der Diagonale. Es steht auf dem Spiel, wenn wir schon aus dem Modell geschlossen haben sollten.
Was ich also aus diesem Beispiel schließen möchte, ist, dass wir das Modell wirklich festnageln sollten, bevor wir die Modellüberanpassungen abschließen. Das Einbeziehen von zufälligem Rauschen als Effekte wird in diesem Fall überangepasst.
Um das Mysterium zu vervollständigen, habe ich die Simulation angehängt, die ich gemacht habe.Dieses Mal habe ich eine Validierungsspalte verwendet.Bemerkenswert: Die logistische Regression (in der Datei gespeichertes Skript) zeigt eine AUC von etwa 0,71 für Trainingsdaten und viel niedriger (weniger als 0,5) für die Validierungsdaten.Das ist ein klarer Beweis für Overfitting.Ich habe jedoch auch das Modellscreening durchgeführt - alle Methoden (einschließlich der logistischen Regression) zeigen AUC um 0,5 für die Trainingsdaten und niedriger für die Validierungsdaten - das erscheint mir vernünftig.Darüber hinaus ist das logistische Regressionsmodell nicht signifikant (und nur 1 oder 2 Faktoren sind signifikant, was ungefähr dem entspricht, was Sie für 20 zufällige Faktoren erwarten würden).Ich verstehe unter anderem nicht, warum die logistische Regressionsplattform und die logistische Regression innerhalb der Modell-Screening-Plattform so unterschiedliche Ergebnisse liefern.Ich weiß (oder glaube), dass das Modellscreening nicht so viele Tune-Hyperparameter findet wie die einzelnen Modellierungsplattformen, aber der Unterschied zwischen 0,7 und 0,5 auf den Trainingsdaten erscheint mir zu groß.
Ich kenne die Antwort nicht, aber ich kann bestätigen, was Sie herausgefunden haben.Ich habe eine binäre Antwortvariable (zufällig) und 20 zufällige Normalfaktoren mit 200 Beobachtungen erstellt.Ich habe AUC = 0,71!Ich finde es wirklich sehr überraschend.Ich vermute, dass es etwas mit einer Begrenzung der AUC als Leistungsmaß zu tun hat, verstehe dieses Verhalten aber wie gesagt nicht wirklich.In meinem Fall sollte es auf keinen Fall overfitting sein.Ich bin gespannt, was andere dazu sagen können.
Hallo Dale,
Vielen Dank, dass Sie dieser relativ offenen Frage nachgegangen sind. Ich habe die Zufallsvariable mit der folgenden Formel erstellt:
random uniform (0,1) > 0.5;
Bemerkenswert ist, dass ich meine oben beschriebene „Methode“ mit acht verschiedenen Versionen der Dummy-Variablen (dh Formel neu berechnen) ausgeführt habe, was ROC-AUC-Werte im Bereich von 0,770 bis 0,870 ergab.
Ich bin nie auf ein solches Verhalten gestoßen, aber ich habe nie mit mehr als 1.200 Biomarkervariablen gearbeitet.
Danke für Ihre Hilfe.
Am besten,
TS
Können Sie weitere Einzelheiten zu Ihrer zufällig generierten Antwortvariablen angeben?Wie genau hast du es erstellt?