So reduzieren Sie Prädiktoren auf die richtige Weise für ein logistisches Regressionsmodell


9

Daher habe ich einige Bücher (oder Teile davon) über Modellierung gelesen (unter anderem F. Harrells "Regressionsmodellierungsstrategien"), da ich derzeit ein logistisches Modell erstellen muss, das auf binären Antwortdaten basiert. Ich habe sowohl kontinuierliche, kategoriale als auch binäre Daten (Prädiktoren) in meinem Datensatz. Grundsätzlich habe ich momentan ungefähr 100 Prädiktoren, was für ein gutes Modell offensichtlich viel zu viele sind. Viele dieser Prädiktoren sind auch verwandt, da sie oft auf derselben Metrik basieren, obwohl sie etwas unterschiedlich sind.

Wie auch immer, was ich gelesen habe, mit univariater Regression und schrittweisen Techniken, ist eines der schlimmsten Dinge, die Sie tun können, um die Anzahl der Prädiktoren zu reduzieren. Ich denke, die LASSO-Technik ist ganz in Ordnung (wenn ich das richtig verstanden habe), aber offensichtlich kann man das bei 100 Prädiktoren einfach nicht anwenden und glaubt, dass daraus etwas Gutes wird.

Welche Möglichkeiten habe ich hier? Muss ich mich wirklich nur hinsetzen, mit all meinen Vorgesetzten und klugen Leuten bei der Arbeit sprechen und wirklich darüber nachdenken, was die fünf besten Prädiktoren sein könnten / sollten (wir könnten falsch liegen) oder welche Ansätze ich sollte stattdessen überlegen?

Und ja, ich weiß auch, dass dieses Thema stark diskutiert wird (online und in Büchern), aber es scheint manchmal etwas überwältigend, wenn Sie in diesem Modellierungsbereich etwas neu sind.

BEARBEITEN:

Zuallererst beträgt meine Stichprobengröße +1000 Patienten (was in meinem Bereich sehr viel ist), und von diesen gibt es zwischen 70 und 170 positive Antworten (dh 170 Ja-Antworten gegenüber ungefähr 900 Nein-Antworten in einem der Fälle). . Grundsätzlich besteht die Idee darin, die Toxizität nach der Bestrahlung vorherzusagen. Ich habe einige prospektive binäre Antwortdaten (dh die Toxizität, entweder Sie haben sie (1) oder Sie haben sie nicht (0)), und dann habe ich verschiedene Arten von Metriken. Einige Metriken sind patientenspezifisch, z. B. Alter, verwendete Medikamente, Organ- und Zielvolumen, Diabetes usw., und dann habe ich einige behandlungsspezifische Metriken, die auf dem simulierten Behandlungsfeld für das Ziel basieren. Daraus kann ich mehrere Prädiktoren abrufen, was in meinem Bereich oft sehr relevant ist, da die meisten Toxizitäten in hohem Maße mit der empfangenen Strahlungsmenge (Iedose) korrelieren. Wenn ich zum Beispiel einen Lungentumor behandle, besteht die Gefahr, dass das Herz mit einer bestimmten Dosis getroffen wird. Ich kann dann berechnen, wie viel x-Menge des Herzvolumens x-Menge der Dosis erhält, z. Wählen Sie zunächst nur eine aus (obwohl dies natürlich in früheren Experimenten versucht wurde und ich dies auch tun möchte), da ich "genau" wissen muss, in welchem ​​Ausmaß tatsächlich eine große Korrelation zwischen Herztoxizität besteht und Volumendosis (wieder gibt es als Beispiel andere ähnliche Metriken, bei denen dieselbe Strategie angewendet wird). Also ja, so sieht mein Datensatz aus. Einige unterschiedliche Metriken und einige Metriken, die etwas ähnlich sind. Wählen Sie zunächst nur eine aus (obwohl dies natürlich in früheren Experimenten versucht wurde und ich dies auch tun möchte), da ich "genau" wissen muss, in welchem ​​Ausmaß tatsächlich eine große Korrelation zwischen Herztoxizität besteht und Volumendosis (wieder gibt es als Beispiel andere ähnliche Metriken, bei denen dieselbe Strategie angewendet wird). Also ja, so sieht mein Datensatz aus. Einige unterschiedliche Metriken und einige Metriken, die etwas ähnlich sind. So sieht mein Datensatz aus. Einige unterschiedliche Metriken und einige Metriken, die etwas ähnlich sind. So sieht mein Datensatz aus. Einige unterschiedliche Metriken und einige Metriken, die etwas ähnlich sind.

Was ich dann tun möchte, ist ein Vorhersagemodell zu erstellen, damit ich hoffentlich vorhersagen kann, bei welchen Patienten das Risiko einer Toxizität besteht. Und da die Antwortdaten binär sind, bestand meine Hauptidee natürlich darin, ein logistisches Regressionsmodell zu verwenden. Zumindest haben das andere Leute auf meinem Gebiet getan. Wenn Sie jedoch viele dieser Artikel durchgehen, in denen dies bereits geschehen ist, scheint ein Teil davon einfach falsch zu sein (zumindest beim Lesen dieser speziellen Arten von Modellierungsbüchern wie F. Harrels). Viele verwenden eine univariate Regressionsanalyse, um Prädiktoren auszuwählen und sie in einer multivariaten Analyse zu verwenden (eine Sache, von der abgeraten wird, wenn ich mich nicht irre), und viele verwenden schrittweise Techniken, um die Anzahl der Prädiktoren zu reduzieren. Natürlich ist es nicht alles schlecht. Viele verwenden LASSO, PCA, Kreuzvalidierung, Bootstrapping usw., aber die, die ich mir angesehen habe,

In Bezug auf die Funktionsauswahl bin ich wahrscheinlich hier. Wie wähle / finde ich die richtigen Prädiktoren für mein Modell? Ich habe diese univariaten / schrittweisen Ansätze ausprobiert, aber jedes Mal denke ich: "Warum überhaupt, wenn es falsch ist?". Aber vielleicht ist es eine gute Möglichkeit, zumindest am Ende zu zeigen, wie ein "gutes Modell", das richtig gemacht wurde, gegen ein "schlechtes Modell", das falsch gemacht wurde, antritt. Also könnte ich es jetzt wahrscheinlich etwas falsch machen. Ich brauche Hilfe, um eine Richtung zu finden, wie ich es richtig mache.

Entschuldigung für die Bearbeitung, und sie dauert so lange.

EDIT 2: Nur ein kurzes Beispiel dafür, wie meine Daten aussehen:

'data.frame':   1151 obs. of  100 variables:
 $ Toxicity              : Factor w/ 2 levels "0","1": 2 1 1 1 1 1 1 1 1 1 ...
 $ Age                   : num  71.9 64 52.1 65.1 63.2 ...
 $ Diabetes              : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 1 ...
 $ Risk.Category         : Ord.factor w/ 3 levels "LOW"<"INTERMEDIATE"<..: 1 1 1 1 2 1 1 1 1 3 ...
 $ Organ.Volume.CC       : num  136.1 56.7 66 136.6 72.8 ...
 $ Target.Volume.CC      : num  102.7 44.2 58.8 39.1 56.3 ...
 $ D1perc                : num  7961 7718 7865 7986 7890 ...
 $ D1.5CC                : num  7948 7460 7795 7983 7800 ...
 $ D1CC                  : num  7996 7614 7833 7997 7862 ...
 $ D2perc                : num  7854 7570 7810 7944 7806 ...
 $ D2.5CC                : num  7873 7174 7729 7952 7604 ...
 $ D2CC                  : num  7915 7313 7757 7969 7715 ...
 $ D3perc                : num  7737 7379 7758 7884 7671 ...
 $ D3.5CC                : num  7787 6765 7613 7913 7325 ...
 $ D3CC                  : num  7827 6953 7675 7934 7480 ...
 $ D4perc                : num  7595 7218 7715 7798 7500 ...
 $ D5perc                : num  7428 7030 7638 7676 7257 ...
 $ DMEAN                 : num  1473 1372 1580 1383 1192 ...
 $ V2000CGY              : num  24.8 23.7 25.9 22.3 19.3 ...
 $ V2000CGY_CC           : num  33.7 13.4 17.1 30.4 14 ...
 $ V2500CGY              : num  22.5 21.5 24 20.6 17.5 ...
 $ V2500CGY_CC           : num  30.7 12.2 15.9 28.2 12.7 ...
 $ V3000CGY              : num  20.6 19.6 22.4 19.1 15.9 ...
 $ V3000CGY_CC           : num  28.1 11.1 14.8 26.2 11.6 ...
 $ V3500CGY              : num  18.9 17.8 20.8 17.8 14.6 ...
 $ V3500CGY_CC           : num  25.7 10.1 13.7 24.3 10.6 ...
 $ V3900CGY              : num  17.5 16.5 19.6 16.7 13.6 ...
 $ V3900CGY_CC           : num  23.76 9.36 12.96 22.85 9.91 ...
 $ V4500CGY              : num  15.5 14.4 17.8 15.2 12.2 ...
 $ V4500CGY_CC           : num  21.12 8.18 11.76 20.82 8.88 ...
 $ V5000CGY              : num  13.9 12.8 16.4 14 11 ...
 $ V5000CGY_CC           : num  18.91 7.25 10.79 19.09 8.03 ...
 $ V5500CGY              : num  12.23 11.14 14.84 12.69 9.85 ...
 $ V5500CGY_CC           : num  16.65 6.31 9.79 17.33 7.17 ...
 $ V6000CGY              : num  10.56 9.4 13.19 11.34 8.68 ...
 $ V6000CGY_CC           : num  14.37 5.33 8.7 15.49 6.32 ...
 $ V6500CGY              : num  8.79 7.32 11.35 9.89 7.44 ...
 $ V6500CGY_CC           : num  11.96 4.15 7.49 13.51 5.42 ...
 $ V7000CGY              : num  6.76 5.07 9.25 8.27 5.86 ...
 $ V7000CGY_CC           : num  9.21 2.87 6.1 11.3 4.26 ...
 $ V7500CGY              : num  4.61 2.37 6.22 6.13 4 ...
 $ V7500CGY_CC           : num  6.27 1.34 4.11 8.38 2.91 ...
 $ V8000CGY              : num  0.7114 0.1521 0.0348 0.6731 0.1527 ...
 $ V8000CGY_CC           : num  0.9682 0.0863 0.023 0.9194 0.1112 ...
 $ V8200CGY              : num  0.087 0 0 0 0 ...
 $ V8200CGY_CC           : num  0.118 0 0 0 0 ...
 $ V8500CGY              : num  0 0 0 0 0 0 0 0 0 0 ...
 $ V8500CGY_CC           : num  0 0 0 0 0 0 0 0 0 0 ...
 $ n_0.02                : num  7443 7240 7371 7467 7350 ...
 $ n_0.03                : num  7196 6976 7168 7253 7112 ...
 $ n_0.04                : num  6977 6747 6983 7055 6895 ...
 $ n_0.05                : num  6777 6542 6811 6871 6693 ...
 $ n_0.06                : num  6592 6354 6649 6696 6503 ...
 $ n_0.07                : num  6419 6180 6496 6531 6325 ...
 $ n_0.08                : num  6255 6016 6350 6374 6155 ...
 $ n_0.09                : num  6100 5863 6211 6224 5994 ...
 $ n_0.1                 : num  5953 5717 6078 6080 5840 ...
 $ n_0.11                : num  5813 5579 5950 5942 5692 ...
 $ n_0.12                : num  5679 5447 5828 5809 5551 ...
 $ n_0.13                : num  5551 5321 5709 5681 5416 ...
 $ n_0.14                : num  5428 5201 5595 5558 5285 ...
 $ n_0.15                : num  5310 5086 5485 5439 5160 ...
 $ n_0.16                : num  5197 4975 5378 5324 5039 ...
 $ n_0.17                : num  5088 4868 5275 5213 4923 ...
 $ n_0.18                : num  4982 4765 5176 5106 4811 ...
 $ n_0.19                : num  4881 4666 5079 5002 4702 ...
 $ n_0.2                 : num  4783 4571 4985 4901 4597 ...
 $ n_0.21                : num  4688 4478 4894 4803 4496 ...
 $ n_0.22                : num  4596 4389 4806 4708 4398 ...
 $ n_0.23                : num  4507 4302 4720 4616 4303 ...
 $ n_0.24                : num  4421 4219 4636 4527 4210 ...
 $ n_0.25                : num  4337 4138 4555 4440 4121 ...
 $ n_0.26                : num  4256 4059 4476 4355 4035 ...
 $ n_0.27                : num  4178 3983 4398 4273 3951 ...
 $ n_0.28                : num  4102 3909 4323 4193 3869 ...
 $ n_0.29                : num  4027 3837 4250 4115 3790 ...
 $ n_0.3                 : num  3955 3767 4179 4039 3713 ...
 $ n_0.31                : num  3885 3699 4109 3966 3639 ...
 $ n_0.32                : num  3817 3633 4041 3894 3566 ...
 $ n_0.33                : num  3751 3569 3975 3824 3496 ...
 $ n_0.34                : num  3686 3506 3911 3755 3427 ...
 $ n_0.35                : num  3623 3445 3847 3689 3361 ...
 $ n_0.36                : num  3562 3386 3786 3624 3296 ...
 $ n_0.37                : num  3502 3328 3725 3560 3233 ...
 $ n_0.38                : num  3444 3272 3666 3498 3171 ...
 $ n_0.39                : num  3387 3217 3609 3438 3111 ...
 $ n_0.4                 : num  3332 3163 3553 3379 3053 ...
 $ n_0.41                : num  3278 3111 3498 3321 2996 ...
 $ n_0.42                : num  3225 3060 3444 3265 2941 ...
 $ n_0.43                : num  3173 3010 3391 3210 2887 ...
 $ n_0.44                : num  3123 2961 3339 3156 2834 ...
 $ n_0.45                : num  3074 2914 3289 3103 2783 ...
 $ n_0.46                : num  3026 2867 3239 3052 2733 ...
 $ n_0.47                : num  2979 2822 3191 3002 2684 ...
 $ n_0.48                : num  2933 2778 3144 2953 2637 ...
 $ n_0.49                : num  2889 2734 3097 2905 2590 ...

Und wenn ich table(data$Toxicity)die Ausgabe laufen lasse, ist:

> table(data$Toxicity)
   0    1 
1088   63 

Dies gilt wiederum für eine Art von Toxizität. Ich habe auch 3 andere.


1
Was wollen Sie tun? Vorhersage oder Folgerung oder etwas anderes?
Stephan Kolassa

Dies wird als Funktionsauswahl bezeichnet . Wenn Sie die Regression verwenden müssen, sind kategoriale Features einzeilig, aber für Baummethoden können Sie sie unverändert verwenden. Sie können sogar Ihre prädiktivsten n-Wege-Interaktions- oder Assoziationsbegriffe herausfinden und diese verwenden.
smci

"Muss ich mich wirklich nur hinsetzen, mit Leuten reden und wirklich über die Top-n-Prädiktoren nachdenken / sie begründen?" Zur Hölle, nein, Intuition ist ein Ausgangspunkt, aber deshalb gibt es Methoden zur Auswahl von Merkmalen. Ergebnisse aus vielen Experimenten schlagen die Intuition.
smci

1
@smci Entschuldigung für die Unklarheit. In meinem Bereich (Radioonkologie) erstellen wir Behandlungspläne, die im Grunde eine 3D-Darstellung der Verteilung der Strahlung / Dosis um ein Ziel sind. Leider ist dies nicht möglich, ohne mindestens eine kleine Menge gesunden Gewebes zu treffen. Aus dieser 3D-Karte kann ich sozusagen Informationen darüber erhalten, wie groß ein Volumen die x-Menge an Strahlung / Dosis erhält. Aber wie Sie sich vorstellen können, kann ich in Schritten wie "Wie viel Strahlung erhält 1% dieses Strukturvolumens" und dann 2%, 3% "fragen". Im Prinzip sind die Werte etwas ähnlich.
Denver Dang

1
@smci, wenn Vorhersage das Ziel des OP ist, sollte die Korrelation keine Rolle spielen. Eine hohe Korrelation zwischen den Variablen wäre wirklich nur dann von großer Bedeutung, wenn versucht wird, die im Modell enthaltenen Variablen zu interpretieren.
StatsStudent

Antworten:


4

Einige der Antworten, die Sie zur Auswahl der Push-Funktion erhalten haben, sind falsch.

Das Lasso oder besser das elastische Netz wird die Merkmalsauswahl übernehmen, aber wie oben ausgeführt, werden Sie von der Volatilität des Satzes "ausgewählter" Merkmale ziemlich enttäuscht sein. Ich glaube, die einzige wirkliche Hoffnung in Ihrer Situation ist die Datenreduktion, dh unbeaufsichtigtes Lernen, wie ich in meinem Buch betone. Datenreduktion bringt mehr Interpretierbarkeit und insbesondere mehr Stabilität. Ich empfehle sehr spärliche Hauptkomponenten oder variable Cluster, gefolgt von regulären Hauptkomponenten in Clustern.

Der Informationsgehalt in Ihrem Datensatz ist viel zu niedrig, als dass ein Algorithmus zur Funktionsauswahl zuverlässig wäre.


Zunächst einmal vielen Dank, dass Sie sich die Zeit genommen haben, Kommentare abzugeben. Zweitens, wenn ich mich nicht irre, ist unbeaufsichtigtes Lernen, wenn Sie die bestimmte Antwort der Antwortvariablen (dh 1 oder 0) nicht nutzen (oder nicht haben) und den Computer "raten" lassen "wie die Verteilung aufgeteilt werden soll. Aber die logistische Regression (und die lineare) wird meines Wissens überwacht? Sie empfehlen also, diese Methode aufzugeben? Einerseits gefällt mir die Idee, andererseits ist die logistische und Probit-Regression so, wie es fast jedes Modellierungspapier in meinem Bereich (Daten ähnlich meinen) bisher getan hat.
Denver Dang

Würde ich hier nicht auf die Beine gehen oder muss ich einfach davon ausgehen, dass alle anderen es für immer "falsch" gemacht haben?
Denver Dang

3
Nicht jeder, aber die meisten Leute haben es definitiv falsch gemacht. Dies war ein Hauptmotiv für das Schreiben von Regressionsmodellierungsstrategien . Das Ziel der Datenreduktion besteht darin, den Umfang des überwachten Lernens zu verringern, zu dem die logistische Regression aufgefordert wird. Beispielsweise können Sie 100 Kandidatenfunktionen auf effektiv 5 Cluster-Scores reduzieren und müssen dann nur 5 Parameter + Achsenabschnitt schätzen.
Frank Harrell

2
Wie stehen Sie in diesem Fall zu Modellen mit variierenden Koeffizienten (wie ich meiner Antwort hinzugefügt habe)?
Ben Bolker

@FrankHarrell es klingt ziemlich interessant. Aber entschuldigen Sie die Frage, warum überwachtes Lernen schlecht oder zumindest etwas schlecht ist, wie es aussieht, als würden Sie dies implizieren?
Denver Dang

8

+1 für "scheint manchmal etwas überwältigend". Es hängt wirklich davon ab (wie Harrell klar feststellt; siehe Abschnitt am Ende von Kapitel 4), ob Sie dies tun möchten

  • Sie müssen eine Kreuzvalidierung verwenden, um den Grad der Bestrafung zu wählen, der Ihre Fähigkeit zur Inferenz zerstört (Konfidenzintervalle für Vorhersagen erstellen ), es sei denn, Sie verwenden hochmoderne hochdimensionale Inferenzmethoden (z. B. Dezeure et al. 2015 ; I. habe diese Ansätze nicht ausprobiert, aber sie scheinen vernünftig ...)

  • explorative Analyse: Viel Spaß, sei transparent und ehrlich, zitiere keine p-Werte.

Für den speziellen Anwendungsfall, den Sie jetzt beschrieben haben (eine Reihe Ihrer Prädiktoren stellen im Wesentlichen eine kumulative Verteilung der Dosis dar, die von verschiedenen Fraktionen des Herzens erhalten wird), möchten Sie möglicherweise Modelle mit unterschiedlichen Koeffizienten untersuchen (etwas schwer zu suchen). , die im Grunde eine glatte Kurve für den Effekt der CDF passen (diese können in Rs mgcvPaket implementiert werden).


Meine Stichprobengröße beträgt +1000, und je nachdem, welche Antwortvariable (ich habe 4), habe ich zwischen 75 und 170 positive (oder negative, je nachdem, wie Sie es sehen) Antworten der +1000. Ich weiß nicht, ob das etwas einfacher macht, dh ich kann einige Schritte verwerfen, da der Beispielsatz ziemlich groß ist (zumindest in meinem Bereich).
Denver Dang

Würde eine Kreuzvalidierung die Fähigkeit zur Inferenz zerstören? Vielleicht. Ich denke, man könnte vor der Kreuzvalidierung booten, um Konfidenzintervalle für Vorhersagen zu erhalten. Dies kann mit 1000 Beobachtungen möglich sein.
JTH

Inferenz nach der Auswahl ist wirklich schwierig; Wenn Sie den gesamten Datensatz verwenden, um Hyperparameter (z. B. die Stärke der Bestrafung) abzustimmen, befinden Sie sich in derselben Situation. Sie müssten Ihren Bootstrap + CV-Ansatz skizzieren, bevor ich sagen kann, ob ich glauben würde, dass es funktionieren könnte ...
Ben Bolker

0

Es gibt viele verschiedene Ansätze. Ich würde empfehlen, einige einfache in der folgenden Reihenfolge auszuprobieren:


1
Ich glaube, dass sich alle drei Methoden als instabil herausstellen werden.
Frank Harrell

Es hängt davon ab, wie Sie instabil definieren. In der Praxis verwenden Sie normalerweise eine Art Kreuzvalidierung wie k-fach oder Auslassen und beurteilen anhand der Gesamtleistung + Varianz (auch bekannt als 1SE-Methode), welche Funktionen Sie am Ende auswählen.
Resnet

Bootstrapping und Kreuzvalidierung validieren nur einen prädiktiven Index für den Prozess , der das Modell generiert. Dies führt zu einer guten Schätzung dieses Index für ein Modell, das unter Verwendung dieses Prozesses ausgewählt wurde , bietet jedoch keinen Komfort für die Struktur eines Modells, das einmal entwickelt wurde, dh das Gesamtmodell. Sehen Sie sich die ausgewählte Struktur (dh die ausgewählten Features) in den Resamples an, um die Volatilität zu ermitteln.
Frank Harrell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.