Fallgewichtete logistische Regression

9

Ich betrachte einige logistische Regressionsprobleme. ("regulär" und "bedingt").

Im Idealfall möchte ich jeden der Eingabefälle gewichten, damit sich der glm mehr darauf konzentriert, die höher gewichteten Fälle korrekt vorherzusagen, auf Kosten einer möglichen Fehlklassifizierung der niedriger gewichteten Fälle.

Sicher wurde dies schon einmal gemacht. Kann mich jemand auf relevante Literatur hinweisen (oder möglicherweise eine modifizierte Wahrscheinlichkeitsfunktion vorschlagen?)

Vielen Dank!

Noah
quelle
1
Sie gehen davon aus, dass die Klassifizierung das Ziel ist und nicht die Vorhersage. Für eine optimale Schätzung der Wahrscheinlichkeiten müssen Sie nichts neu gewichten. "Falsch-Negative" und "Falsch-Positive" treten nur bei erzwungenen Entscheidungen auf, und normalerweise erzwingt niemand eine reine binäre Wahl.
Frank Harrell
@ Frank Du machst einen guten Punkt. Letztendlich ist das Ziel dieses Projekts, das Ergebnis weiterer Ereignisse vorherzusagen. (Ich denke, es kann als ein Geschmack des maschinellen Lernens mit Trainingsdaten angesehen werden.) Einige Ergebnisse sind "wichtiger" als andere, daher suchte ich nach einer Möglichkeit, sie entsprechend zu gewichten. Nicks Vorschlag für die Likelihood-Funktion ist sinnvoll und sollte in Code ziemlich trivial zu implementieren sein.
Noah
1
Klingt so, als bräuchten Sie genau ein Wahrscheinlichkeitsmodell ohne Gewichte.
Frank Harrell
1
Richtig; Schließen Sie die Kostenfunktion an und verwenden Sie die vorhergesagte Wahrscheinlichkeit, und Sie haben eine optimale Entscheidung.
Frank Harrell
1
Mit einem gut kalibrierten Wahrscheinlichkeitsmodell gibt es keine "Fehler", sondern nur Zufälligkeiten, die nicht vorhergesagt werden können. Optimale Entscheidungen sind eine Funktion der vorhergesagten Wahrscheinlichkeit und der Kostenfunktion, um verschiedene Handlungsentscheidungen zu treffen.
Frank Harrell

Antworten:

3

glmenthält weightsgenau zu diesem Zweck einen Parameter . Sie stellen ihm einen Vektor von Zahlen auf jeder Skala zur Verfügung, der die gleiche Anzahl von Gewichten enthält, wie Sie Beobachtungen haben.

Mir ist erst jetzt klar, dass Sie vielleicht nicht sprechen R. Wenn nicht, möchten Sie vielleicht.

Nick Sabbe
quelle
Ich bin mit R sehr vertraut, möchte jedoch die Mathematik hinter der Wahrscheinlichkeitsfunktion verstehen. Ich könnte dies in C ++ oder einer anderen Sprache codieren. (Nur der "Blackbox" der glm-Funktion zu vertrauen, ist nicht immer die beste Lösung)
Noah
Ah. Gut auf dich. Soweit ich weiß, werden die Gewichte einfach verwendet, um die Log-Wahrscheinlichkeit pro Beobachtung mit zu multiplizieren. Wenn Sie also eine ungewichtete Version geschrieben haben, sollte das Hinzufügen der Gewichte ein Kinderspiel sein. Beachten Sie auch, dass Sie immer im Quellcode nachsehen können, um glm(wahrscheinlich) eine C-Implementierung zu finden.
Nick Sabbe
2
@ Nick, ich war auch unter dem Missverständnis, dass dies die Funktion des Gewichtsarguments in glm war - es ist nicht. Es wird tatsächlich verwendet, wenn die Binomialergebnisse in dem Sinne inhomogen sind, dass sie auf einer unterschiedlichen Anzahl von Versuchen basieren. Wenn zum Beispiel die erste Beobachtung Binomial ( ) und die zweite Binomial ( ) wäre, wären ihre Gewichte . Auch hier sind die Gewichte in glm () KEINE Stichprobengewichte. Um dies in R zu tun, müssen Sie den Datensatz entsprechend den Gewichten erweitern und das Modell an den erweiterten Datensatz anpassen (die SEs können in diesem Fall jedoch falsch sein). 3,.57,.53,7
Makro
3
Hier ist eine Diskussion des 'Gewichte'-Arguments in einem Message Board: r.789695.n4.nabble.com/Weights-in-binomial-glm-td1991249.html
Makro
@ Macro: Danke! Sehr gepflegt. Eines der Dinge, die mich in die Zähne getroffen haben könnten, wenn ich es vor Ihrem Kommentar benutzt hätte :-)
Nick Sabbe
1

Wenn Sie Zugriff auf SAS haben, ist dies mit PROC GENMOD sehr einfach zu bewerkstelligen. Solange jede Beobachtung eine Gewichtsvariable hat, können Sie mithilfe der Gewichtsangabe die Art von Analyse durchführen, nach der Sie suchen. Ich habe es meistens mit Inverse-Probability-of-Treatment-Gewichten verwendet, aber ich sehe keinen Grund, warum Sie Ihren Daten keine Gewichte zuweisen konnten, um bestimmte Arten von Fällen hervorzuheben, solange Sie sicherstellen, dass Ihr N konstant bleibt. Sie sollten auch sicherstellen, dass eine Art ID-Variable enthalten ist, da die hochgewichteten Fälle technisch gesehen wiederholte Beobachtungen sind. Beispielcode mit einer Beobachtungs-ID von 'id' und einer Gewichtsvariablen von 'wt':

proc genmod data=work.dataset descending;
    class id;
    model exposure = outcome covariate / dist=bin link=logit;
    weight wt;
    repeated subject=id/type=ind;
run;
Fomite
quelle