Wie soll ich dieses Problem der binären Vorhersage angehen?


9

Ich habe einen Datensatz mit dem folgenden Format.

Prognosen von Krebs kein Krebs

Es gibt ein binäres Ergebnis Krebs / kein Krebs. Jeder Arzt im Datensatz hat jeden Patienten gesehen und ein unabhängiges Urteil darüber abgegeben, ob der Patient Krebs hat oder nicht. Die Ärzte geben dann ihr Konfidenzniveau von 5 an, dass ihre Diagnose korrekt ist, und das Konfidenzniveau wird in den Klammern angezeigt.

Ich habe verschiedene Möglichkeiten ausprobiert, um aus diesem Datensatz gute Prognosen zu erhalten.

Es funktioniert ziemlich gut für mich, nur über die Ärzte zu mitteln und deren Selbstvertrauen zu ignorieren. In der obigen Tabelle hätte dies zu korrekten Diagnosen für Patient 1 und Patient 2 geführt, obwohl fälschlicherweise gesagt worden wäre, dass Patient 3 Krebs hat, da die Ärzte mit 2: 1-Mehrheit glauben, dass Patient 3 Krebs hat.

Ich habe auch eine Methode ausprobiert, bei der wir zwei Ärzte nach dem Zufallsprinzip befragen. Wenn sie nicht übereinstimmen, geht die entscheidende Stimme an den Arzt, der sicherer ist. Diese Methode ist insofern wirtschaftlich, als wir nicht viele Ärzte konsultieren müssen, aber sie erhöht auch die Fehlerrate erheblich.

Ich habe eine verwandte Methode ausprobiert, bei der wir zufällig zwei Ärzte auswählen. Wenn sie nicht übereinstimmen, wählen wir zufällig zwei weitere aus. Wenn eine Diagnose mindestens zwei "Stimmen" voraus ist, entscheiden wir uns für diese Diagnose. Wenn nicht, beproben wir immer mehr Ärzte. Diese Methode ist ziemlich wirtschaftlich und macht nicht zu viele Fehler.

Ich kann nicht anders, als das Gefühl zu haben, dass mir eine ausgefeiltere Art fehlt, Dinge zu tun. Ich frage mich zum Beispiel, ob es eine Möglichkeit gibt, den Datensatz in Trainings- und Testsätze aufzuteilen, einen optimalen Weg zu finden, um die Diagnosen zu kombinieren, und dann zu sehen, wie sich diese Gewichte auf den Testsatz auswirken. Eine Möglichkeit ist eine Methode, mit der ich Ärzte, die immer wieder Fehler im Versuchs-Set gemacht haben, und möglicherweise hochgewichtige Diagnosen, die mit hoher Sicherheit gestellt werden, abnehmen kann (Vertrauen korreliert mit der Genauigkeit in diesem Datensatz).

Ich habe verschiedene Datensätze, die dieser allgemeinen Beschreibung entsprechen, daher variieren die Stichprobengrößen und nicht alle Datensätze beziehen sich auf Ärzte / Patienten. In diesem speziellen Datensatz gibt es jedoch 40 Ärzte, die jeweils 108 Patienten sahen.

BEARBEITEN: Hier ist ein Link zu einigen Gewichtungen, die sich aus meiner Lektüre der Antwort von @ jeremy-miles ergeben.

  1. Ungewichtete Ergebnisse befinden sich in der ersten Spalte. Tatsächlich war in diesem Datensatz der maximale Konfidenzwert 4, nicht 5, wie ich zuvor fälschlicherweise sagte. Nach dem Ansatz von @ jeremy-miles wäre der höchste ungewichtete Wert, den ein Patient erhalten könnte, 7. Dies würde bedeuten, dass buchstäblich jeder Arzt mit einem Konfidenzniveau von 4 behauptete, dieser Patient habe Krebs. Die niedrigste ungewichtete Punktzahl, die ein Patient erhalten könnte, ist 0, was bedeuten würde, dass jeder Arzt mit einem Konfidenzniveau von 4 behauptete, dass dieser Patient keinen Krebs hatte.

  2. Gewichtung nach Cronbachs Alpha. Ich fand in SPSS, dass es ein Cronbach-Alpha von insgesamt 0,9807 gab. Ich habe versucht zu überprüfen, ob dieser Wert korrekt ist, indem ich Cronbachs Alpha auf manuellere Weise berechnet habe. Ich habe eine Kovarianzmatrix aller 40 Ärzte erstellt, die ich hier einfüge . Dann basierend auf meinem Verständnis der Cronbach-Alpha-Formel Dabei ist die Anzahl der Elemente (hier sind die Ärzte die 'Elemente'). Ich berechnete durch Summieren aller diagonalen Elemente in der Kovarianzmatrix und durch aller Elemente in die Kovarianzmatrix. Ich habe dann bekommenα=KK1(1σxi2σT2)Kσxi2σT2α=40401(18.7915200.7112)=0.9807 Ich habe dann die 40 verschiedenen Cronbach Alpha-Ergebnisse berechnet, die auftreten würden, wenn jeder Arzt aus dem entfernt würde Datensatz. Ich habe jeden Arzt, der negativ zu Cronbachs Alpha beigetragen hat, mit Null gewichtet. Ich habe mir Gewichte für die verbleibenden Ärzte ausgedacht, die proportional zu ihrem positiven Beitrag zu Cronbachs Alpha sind.

  3. Gewichtung nach Gesamtelementkorrelationen. Ich berechne alle Gesamtkorrelationen und gewichte dann jeden Arzt proportional zur Größe seiner Korrelation.

  4. Gewichtung nach Regressionskoeffizienten.

Ich bin mir immer noch nicht sicher, wie ich sagen soll, welche Methode "besser" funktioniert als die andere. Zuvor hatte ich Dinge wie den Peirce Skill Score berechnet, der für Fälle geeignet ist, in denen es eine binäre Vorhersage und ein binäres Ergebnis gibt. Jetzt habe ich jedoch Prognosen von 0 bis 7 anstelle von 0 bis 1. Soll ich alle gewichteten Bewertungen> 3,50 in 1 und alle gewichteten Bewertungen <3,50 in 0 umwandeln?


Können wir sagen , dass No Cancer (3)ist Cancer (2)? Das würde Ihr Problem ein wenig vereinfachen.
Wayne

1
Betreff: Ihre Datenstruktur, es ist fast immer besser, verschiedene Variablen (ob der Patient Krebs hat; wie sicher die Bewertung ist) in verschiedenen Spalten zu haben. Wenn Sie sie wie in "kein Krebs (3)" kombinieren, werden Ihre Optionen stark eingeschränkt.
Rolando2

@Wayne Die Daten reichen von der Vorhersage von Krebs mit maximaler Sicherheit Cancer (4)bis zur Vorhersage von keinem Krebs mit maximaler Sicherheit No Cancer (4). Wir können das nicht sagen No Cancer (3)und Cancer (2)sind gleich, aber wir könnten sagen, dass es ein Kontinuum gibt und die Mittelpunkte in diesem Kontinuum sind Cancer (1)und No Cancer (1).
user1205901

@ Rolando2 Danke für den Rat. Ich habe die Dinge in meiner eigenen Datendatei neu angeordnet, sodass sie jetzt getrennt sind.
user1205901

1
Beachten Sie, dass Ihr Schwellenwert ein einstellbarer Parameter ist , sodass der geeignete Grenzwert von Ihrem Bewertungskriterium abhängt. Da ich mit Ihrer Metrik nicht vertraut war, habe ich sie gegoogelt, und tatsächlich kann der erste Treffer für Sie relevant sein: Ein Hinweis zum maximalen Peirce-Skill-Score (2007) .
GeoMatt22

Antworten:


7

Zuerst würde ich sehen, ob die Ärzte miteinander übereinstimmen. Sie können 50 Ärzte nicht separat analysieren, da Sie das Modell überanpassen - ein Arzt wird zufällig großartig aussehen.

Sie könnten versuchen, Vertrauen und Diagnose in einer 10-Punkte-Skala zu kombinieren. Wenn ein Arzt sagt, dass der Patient keinen Krebs hat und er sehr zuversichtlich ist, ist das eine 0. Wenn der Arzt sagt, dass er Krebs hat und er sehr zuversichtlich ist, ist das eine 9. Wenn der Arzt sagt, dass er keinen hat, und sind nicht zuversichtlich, das ist eine 5 usw.

Wenn Sie vorhersagen möchten, führen Sie eine Art Regressionsanalyse durch, aber wenn Sie über die kausale Reihenfolge dieser Variablen nachdenken, ist es umgekehrt. Ob der Patient Krebs hat, ist die Ursache der Diagnose, das Ergebnis ist die Diagnose.

Ihre Zeilen sollten Patienten sein, und Ihre Spalten sollten Ärzte sein. Sie haben jetzt eine Situation, die in der Psychometrie häufig vorkommt (weshalb ich das Tag hinzugefügt habe).

Schauen Sie sich dann die Beziehungen zwischen den Partituren an. Jeder Patient hat eine mittlere Punktzahl und eine Punktzahl von jedem Arzt. Korreliert die mittlere Punktzahl positiv mit der Punktzahl jedes Arztes? Wenn nicht, ist dieser Arzt wahrscheinlich nicht vertrauenswürdig (dies wird als Item-Total-Korrelation bezeichnet). Manchmal entfernen Sie einen Arzt aus der Gesamtpunktzahl (oder dem Mittelwert) und prüfen, ob dieser Arzt mit dem Mittelwert aller anderen Ärzte korreliert - dies ist die korrigierte Gesamtkorrelation des Elements.

Sie könnten Cronbachs Alpha (eine Form der klasseninternen Korrelation) und das Alpha ohne jeden Arzt berechnen. Alpha sollte immer steigen, wenn Sie einen Arzt hinzufügen. Wenn es also steigt, wenn Sie einen Arzt entfernen, ist die Bewertung dieses Arztes verdächtig (dies sagt Ihnen oft nichts anderes als die korrigierte Korrelation zwischen Artikel und Gesamtmenge).

Wenn Sie R verwenden, ist diese Art von Dingen im Psychopaket mit der Funktion Alpha verfügbar. Wenn Sie Stata verwenden, lautet der Befehl Alpha, in SAS ist es proc corr und in SPSS ist es unter Skalierung, Zuverlässigkeit.

Dann können Sie eine Punktzahl als Mittelwert von jedem Arzt oder als gewichteten Mittelwert (gewichtet durch die Korrelation) berechnen und prüfen, ob diese Punktzahl die wahre Diagnose vorhersagt.

Oder Sie können diese Phase überspringen und die Punktzahl jedes Arztes bei der Diagnose separat zurückbilden und die Regressionsparameter als Gewichte behandeln.

Fühlen Sie sich frei, um Klarstellung zu bitten, und wenn Sie ein Buch möchten, mag ich Streiner und Normans "Health Measurement Scales".

-Bearbeiten: basierend auf den zusätzlichen Informationen des OP.

Wow, das ist ein verdammtes Cronbach-Alpha. Das einzige Mal, dass ich es so hoch gesehen habe, war, als ein Fehler gemacht wurde.

Ich würde jetzt eine logistische Regression durchführen und mir die ROC-Kurven ansehen.

Der Unterschied zwischen der Gewichtung durch Regression und der Korrelation hängt davon ab, wie die Ärzte Ihrer Meinung nach reagieren. Einige Dokumente sind im Allgemeinen sicherer (ohne geschickter zu sein), und daher verwenden sie möglicherweise die extremen Bereiche häufiger. Wenn Sie dies korrigieren möchten, verwenden Sie die Korrelation anstelle der Regression. Ich würde wahrscheinlich durch Regression gewichten, da dies die Originaldaten beibehält (und keine Informationen verwirft).

Bearbeiten (2): Ich habe logistische Regressionsmodelle in R ausgeführt, um zu sehen, wie gut jeder die Ausgabe vorhergesagt hat. tl / dr: da ist nichts zwischen ihnen.

Hier ist mein Code:

d <- read.csv("Copy of Cancer data - Weightings.csv")

mrc <- glm(cancer ~ weightrc, data = d, family = "binomial")
mun <- glm(cancer ~ unweight, data = d, family = "binomial")
mca <- glm(cancer ~ weightca, data = d, family = "binomial")
mic <- glm(cancer ~ weightic, data = d, family = "binomial")

d$prc <- predict(mrc, type = "response")
d$pun <- predict(mun, type = "response")
d$pca <- predict(mca, type = "response")
d$pic <- predict(mic, type = "response")

par(mfrow = c(2, 2))
roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

4 ROC-Kurven

Und die Ausgabe:

> par(mfrow = c(2, 2))
> roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$prc, ci = TRUE,     plot = TRUE)

Data: d$prc in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9831
95% CI: 0.9637-1 (DeLong)
> roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pun, ci = TRUE,     plot = TRUE)

Data: d$pun in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9808
95% CI: 0.9602-1 (DeLong)
> roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pca, ci = TRUE,     plot = TRUE)

Data: d$pca in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9854
95% CI: 0.9688-1 (DeLong)
> roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pic, ci = TRUE,     plot = TRUE)

Data: d$pic in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9822
95% CI: 0.9623-1 (DeLong)

1
Sehr gut. Und wie Ihre Argumentation zulässt, ist es möglich, dass ein Arzt das Alpha verschlechtert, indem er einzigartige Erkenntnisse liefert, während er sich dem Trend widersetzt.
Rolando2

@ jeremy-miles Vielen Dank für diese Antwort und das freundliche Angebot, Fragen dazu zu stellen. Ich habe versucht, Ihre Vorschläge umzusetzen, und das OP bearbeitet, um einige der Ergebnisse zu veröffentlichen. Ich frage mich hauptsächlich, ob ich Ihren Beitrag richtig interpretiert habe und was erforderlich ist, um zu zeigen, dass bestimmte Aggregationsmethoden bei der Vorhersage des Ergebnisses besser funktionieren als andere.
user1205901

Vielen Dank für die Veröffentlichung der Daten. Ich werde es mir später ansehen. (Welche Software verwenden Sie?)
Jeremy Miles

@JeremyMiles Danke, dass du diese Bearbeitung gepostet hast! Ich verwende MATLAB, aber ich weiß genug über R, um es zu wechseln und stattdessen zu verwenden, da Sie bereits R-Code gepostet haben. Ich habe Cronbachs Alpha in SPSS berechnet - erhalten Sie einen anderen Wert als R?
user1205901

1
Ja, das habe ich mir gedacht. So bekommt jeder Arzt ein anderes Gewicht.
Jeremy Miles

2

Zwei sofort einsatzbereite Vorschläge:

  1. Sie können Gewichte für die Verlustfunktion Ihrer logistischen Regression verwenden, sodass der Arzt, der sehr sicher ist, dass der Patient Krebs mit P = 1 hat, die doppelte Auswirkung hat, einen anderen hat, der angibt, Krebs mit P = 0,75 zu haben. Vergessen Sie nicht, Ihre Wahrscheinlichkeiten richtig in Gewichte umzuwandeln.
  2. Eine häufig vernachlässigte Modellfamilie sind Rangmodelle. Innerhalb der Ranglisten gibt es drei große Gruppen: Listenweise, Punktweise und Paarweise, je nachdem, was Sie eingeben. Es hört sich so an, als könnten Sie in Ihrem Fall eine punktweise Rangfolge verwenden .

Können Sie einen Weg vorschlagen, um Wahrscheinlichkeiten richtig in Gewichte umzuwandeln? Ich habe versucht, dieses Konzept zu googeln, konnte aber keinen klaren Rat dazu finden.
user1205901

@ user1205901, ich hatte etwas sehr Einfaches im Sinn wie: Let P= Wahrscheinlichkeit, dass der Krebs vom Arzt gegeben wird, dann (in Python-Notation): y=[1 if p >= 0.5 else 0 for p in P]und w=[abs(p-0.5)*2 for p in P]. Dann trainieren Sie das Modell:LogisticRegression().fit(X,y,w)
Ricardo Cruz

In der Verlustfunktion ergibt dies beispielsweise das Doppelte des Gewichts auf 0,1 als 0,2, wenn kein Krebs vorliegt (0,1 -> 0,8 und 0,2 -> 0,6). Wenn der Arzt sich nicht sicher ist (P ~ 0,5), trägt die Beobachtung fast nichts zum Verlust bei. Unabhängig davon, welches Modell er verwendet, muss das Hinzufügen eines Kostenvektors zur Verlustfunktion unterstützt werden, den die meisten Modelle unterstützen. Ich weiß nicht, ob das etwas Gutes ist, aber es scheint trivial zu sein, es zu versuchen. Er muss zuerst eine Metrik angeben. Die Verlustfunktion kann weiter auf die Metrik zugeschnitten werden, die er maximieren möchte.
Ricardo Cruz

2

(Dies liegt außerhalb meines Fachgebiets, daher ist die Antwort von Jeremy Miles möglicherweise zuverlässiger.)

Hier ist eine Idee.

Stellen Sie sich zunächst vor, es gibt kein Konfidenzniveau. Dann haben sie für jeden Patienten entweder Krebs oder nicht , und jeder Arzt diagnostizierte entweder Krebs oder nicht, .i=1Nci{0,1}j=1mdij{0,1}

Ein einfacher Ansatz besteht darin anzunehmen, dass, während die Ärzte der Diagnose eines bestimmten Patienten zustimmen oder nicht zustimmen können, die Diagnose jedes Arztes als unabhängig behandelt werden kann , wenn wir den wahren Status des Patienten kennen . Das heißt, die sind bei bedingt unabhängig . Dies führt zu einem genau definierten Klassifikator namens Naive Bayes mit Parametern, die leicht abzuschätzen sind.dijci

Insbesondere sind die primären Parameter die Basisrate und die bedingten Diagnosewahrscheinlichkeiten Beachten Sie, dass dieser letztere Parameter ein gewichteter Durchschnitt der Diagnosen für Arzt , wobei die Gewichte die wahren Patientenzustände .p[c]1Nici

p[dj|c]idijciici
jci

Wenn dieses Modell vernünftig ist, besteht eine Möglichkeit, die Konfidenzniveaus einzubeziehen, darin, die Gewichte anzupassen. Dann würden die bedingten Wahrscheinlichkeiten Hier ist eine Gewichtung, die das Konfidenzniveau von berücksichtigt .

p[dj|c,wj]idijwijciiwijci
wij0dij

Beachten Sie, dass Sie, wenn Ihre Gewichte als Wahrscheinlichkeiten gegossen werden , die Formel " Bernoulli- Verknüpfung" , um den Fall angemessen zu berücksichtigen .w[0,1]

p[dw]=dw(1d)1w
d=0

Hinweis: Dies erfordert , dass Ihre Software zu geben , 0^0=1anstatt 0^0=NaN, was üblich ist , aber es lohnt! Alternativ können Sie sicherstellen , z. B. wenn das Vertrauen ist, würde funktionieren.w(0,1)k{1K}w=k/(K+1)


Im Zusammenhang mit dem Kommentar von @Wayne: Wenn Sie sagen No Cancer (3) = Cancer (2), stimmt dies mit meinem Gewichtungsmodell überein, das , da . Wenn Sie alternativ sagen , stimmt dies mit überein , da . w[k]=kK25=135No Cancer (3) = Cancer (3)w[k]=kK+136=136
GeoMatt22

Kann ich überprüfen, ob ich richtig ? Wenn die Ergebnisse [1,0,1] sind und ein Arzt [0,1,1] prognostiziert und das Gewicht des Arztes [0,2,0,4,0,8] beträgt, beträgt die gewichtete Wahrscheinlichkeit einer bedingten Diagnose 0,5?
p[dj|c,wj]idijwijciiwijci
user1205901

Entschuldigung, mir wurde klar, dass ich nur beabsichtigt hatte, das zu gewichten, dh , anstatt die Indikatoren . Für Ihren Fall . Dann ist , während und . Also ist und . dδ[0,1]d{0,1}δi=wi(di=1)+(1wi)(di=0)δ=[0.8,0.4,0.8]p[c,δ]=cδ¯=0.8+0+0.83=230.8p[2]=c¯=23p[c| δ]=p[c,δ]/p[δ]=0,8p[δ| c]=p[c,δ]/p[c]=0,8p[δ]=δ¯=560.8p[c|δ]=p[c,δ]/p[δ]=0.8p[δ|c]=p[c,δ]/p[c]=0.8
GeoMatt22

0

Aus Ihrer Frage geht hervor, dass Sie Ihr Messsystem testen möchten. Im Bereich der Verfahrenstechnik wäre dies eine Attributmesssystemanalyse oder MSA.

Dieser Link enthält einige nützliche Informationen zur erforderlichen Stichprobengröße und zu den Berechnungen, die zur Durchführung einer Studie dieses Typs ausgeführt werden. https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-calculations/

Bei dieser Studie müsste der Arzt mindestens zweimal denselben Patienten mit denselben Informationen diagnostizieren.

Sie können diese Studie auf zwei Arten durchführen. Sie können die einfache Bewertung für Krebs / kein Krebs verwenden, um die Übereinstimmung zwischen Ärzten und jedem Arzt zu bestimmen. Idealerweise sollten sie auch in der Lage sein, mit dem gleichen Maß an Sicherheit zu diagnostizieren. Sie können dann die vollständige 10-Punkte-Skala verwenden, um die Übereinstimmung zwischen und durch jeden Arzt zu testen. (Jeder sollte zustimmen, dass Krebs (5) die gleiche Bewertung hat, dass kein Krebs (1) die gleiche Bewertung hat usw.)

Die Berechnungen auf der verlinkten Website sind auf jeder Plattform, die Sie für Ihre Tests verwenden, einfach durchzuführen.

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.