Jak podejść do tego problemu z prognozowaniem binarnym?


9

Mam zestaw danych o następującym formacie.

Prognozy raka bez raka

Istnieje wynik binarny rak / brak raka. Każdy lekarz w zbiorze danych widział każdego pacjenta i oceniał go niezależnie od tego, czy pacjent ma raka. Następnie lekarze podają poziom ufności na 5, że diagnoza jest prawidłowa, a poziom ufności jest wyświetlany w nawiasach.

Próbowałem różnych sposobów, aby uzyskać dobre prognozy z tego zestawu danych.

U mnie całkiem dobrze działa uśrednianie wśród lekarzy, ignorując ich poziom pewności siebie. W powyższej tabeli dałoby to prawidłowe diagnozy dla pacjenta 1 i pacjenta 2, chociaż niepoprawnie powiedziałoby, że pacjent 3 ma raka, ponieważ większość 2-1 lekarze uważają, że pacjent 3 ma raka.

Próbowałem także metody, w której losowo badamy dwóch lekarzy, a jeśli nie zgadzają się ze sobą, wówczas decydujący głos przechodzi do tego, który lekarz jest bardziej pewny siebie. Ta metoda jest ekonomiczna, ponieważ nie musimy konsultować się z wieloma lekarzami, ale również znacznie zwiększa wskaźnik błędów.

Próbowałem pokrewnej metody, w której losowo wybieramy dwóch lekarzy, a jeśli nie zgadzają się ze sobą, losowo wybieramy dwóch kolejnych. Jeśli jedna diagnoza zostanie wyprzedzona co najmniej dwoma „głosami”, wówczas rozstrzygamy sprawy na korzyść tej diagnozy. Jeśli nie, próbujemy kolejnych lekarzy. Ta metoda jest dość ekonomiczna i nie popełnia zbyt wielu błędów.

Nie mogę oprzeć się wrażeniu, że brakuje mi bardziej wyrafinowanego sposobu robienia rzeczy. Na przykład zastanawiam się, czy istnieje jakiś sposób, w jaki mógłbym podzielić zestaw danych na zestawy szkoleniowe i testowe, i opracować optymalny sposób łączenia diagnoz, a następnie zobaczyć, jak te wagi działają na zestawie testowym. Jedną z możliwości jest jakaś metoda, która pozwala mi na obniżenie wagi lekarzy, którzy ciągle popełniają błędy w zestawie próbnym, i być może diagnozę nadwagi, która jest dokonywana z dużą pewnością (pewność koreluje z dokładnością w tym zestawie danych).

Mam różne zestawy danych pasujące do tego ogólnego opisu, więc rozmiary próbek różnią się i nie wszystkie zestawy danych dotyczą lekarzy / pacjentów. Jednak w tym konkretnym zbiorze danych jest 40 lekarzy, z których każdy widział 108 pacjentów.

EDYCJA: Oto link do niektórych wag, które wynikają z mojego przeczytania odpowiedzi @ jeremy-miles.

  1. Wyniki nieważone znajdują się w pierwszej kolumnie. W rzeczywistości w tym zestawie danych maksymalna wartość ufności wynosiła 4, a nie 5, jak błędnie powiedziałem wcześniej. Tak więc, zgodnie z podejściem @ jeremy-miles, najwyższy wynik nieważony, jaki może uzyskać każdy pacjent, wynosiłby 7. To znaczy, że dosłownie każdy lekarz stwierdził z poziomem ufności 4, że ten pacjent miał raka. Najniższy wynik nieważony, jaki może uzyskać każdy pacjent, wynosi 0, co oznaczałoby, że każdy lekarz stwierdził z poziomem ufności 4, że ten pacjent nie miał raka.

  2. Ważenie według Alfa Cronbacha. W SPSS znalazłem, że ogólna alfa Cronbacha wynosi 0,9807. Próbowałem sprawdzić, czy ta wartość była poprawna, obliczając Alfa Cronbacha w bardziej ręczny sposób. Stworzyłem macierz kowariancji wszystkich 40 lekarzy, którą tu wklejam . Następnie w oparciu o moje zrozumienie formuły Cronbacha gdzie jest liczbą elementów (tutaj lekarze są „przedmiotami”) obliczyłem , sumując wszystkie elementy ukośne w macierzy kowariancji, a , sumując wszystkie elementy w macierz kowariancji. Potem dostałemα=KK1(1σxi2σT2)Kσxi2σT2α=40401(18.7915200.7112)=0.9807 Następnie obliczyłem 40 różnych wyników Cronbach Alpha, które wystąpiłyby po usunięciu każdego lekarza z zestaw danych. Ważyłem zero lekarzy, którzy negatywnie przyczynili się do alfa Cronbacha na zero. Wymyśliłem wagi dla pozostałych lekarzy proporcjonalne do ich pozytywnego wkładu w alfa Cronbacha.

  3. Ważenie według łącznej korelacji pozycji. Obliczam wszystkie całkowite korelacje pozycji, a następnie ważę każdego lekarza proporcjonalnie do wielkości ich korelacji.

  4. Ważenie według współczynników regresji.

Jednej rzeczy, której wciąż nie jestem pewien, jak powiedzieć, która metoda działa „lepiej” niż druga. Wcześniej obliczałem takie rzeczy jak Peirce Skill Score, który jest odpowiedni dla przypadków, w których istnieje binarna prognoza i wynik binarny. Jednak teraz mam prognozy w zakresie od 0 do 7 zamiast od 0 do 1. Czy powinienem przekonwertować wszystkie wyniki ważone> 3,50 na 1 i wszystkie wyniki ważone <3,50 na 0?


Możemy powiedzieć, że No Cancer (3)jest Cancer (2)? To trochę uprościłoby twój problem.
Wayne

1
Re: Twoja struktura danych, prawie zawsze lepiej jest mieć różne zmienne (czy pacjent ma raka; jak pewna jest ocena) w różnych kolumnach. Łączenie ich jak w „bez raka (3)” poważnie ogranicza twoje możliwości.
rolando2

@Wayne Dane wahają się od przewidywania raka z maksymalną pewnością Cancer (4)do przewidywania braku raka z maksymalną pewnością No Cancer (4). Nie możemy tego powiedzieć No Cancer (3)i Cancer (2)są takie same, ale moglibyśmy powiedzieć, że istnieje kontinuum, a środkowymi punktami tego kontinuum są Cancer (1)i No Cancer (1).
user1205901 - Przywróć Monikę

@ rolando2 Dzięki za radę. Przegrupowałem rzeczy we własnym pliku danych, aby teraz były rozdzielone.
user1205901 - Przywróć Monikę

1
Zauważ, że twój próg jest parametrem dostrajalnym , więc odpowiednie ograniczenie będzie zależeć od twojego kryterium oceny. Ponieważ nie byłem zaznajomiony z twoją metryką, przejrzałem ją i faktycznie pierwsze trafienie może być dla ciebie odpowiednie: notatka o maksymalnym wyniku umiejętności Peirce (2007) .
GeoMatt22,

Odpowiedzi:


7

Najpierw sprawdziłbym, czy lekarze się ze sobą zgadzają. Nie możesz przeanalizować 50 lekarzy osobno, ponieważ dopasujesz model - jeden lekarz będzie przez przypadek wyglądał świetnie.

Możesz spróbować połączyć pewność siebie i diagnozę w 10-punktową skalę. Jeśli lekarze stwierdzą, że pacjent nie ma raka, i są bardzo pewni siebie, to wynosi 0. Jeśli lekarz mówi, że ma raka i są bardzo pewni, to jest to 9. Jeśli doktor twierdzi, że nie ma, i nie są pewni, to jest 5 itd.

Kiedy próbujesz przewidzieć, przeprowadzasz analizę regresji, ale myśląc o przyczynowym uporządkowaniu tych zmiennych, jest na odwrót. Niezależnie od tego, czy przyczyną raka jest pacjent, wynikiem jest diagnoza.

Wasze rzędy powinny być pacjentami, a kolumny kolumnami lekarzami. Masz teraz sytuację, która jest powszechna w psychometrii (dlatego dodałem tag).

Następnie spójrz na relacje między wynikami. Każdy pacjent ma średnią punktację i punktację od każdego lekarza. Czy średni wynik koreluje dodatnio z wynikiem każdego lekarza? Jeśli nie, ten lekarz prawdopodobnie nie jest godny zaufania (nazywa się to korelacją między pozycją a wartością całkowitą). Czasami usuwasz jednego lekarza z całkowitego wyniku (lub średniego wyniku) i sprawdzasz, czy ten lekarz koreluje ze średnią wszystkich innych lekarzy - jest to skorygowana całkowita korelacja pozycji.

Można obliczyć alfa Cronbacha (co jest formą korelacji wewnątrzklasowej) i alfa bez każdego lekarza. Alfa powinna zawsze wzrastać po dodaniu lekarza, więc jeśli wzrośnie po usunięciu lekarza, ocena lekarza jest podejrzana (to często nie mówi nic innego niż skorygowana korelacja pozycji z całkowitą).

Jeśli używasz R, tego rodzaju rzeczy są dostępne w pakiecie psych za pomocą funkcji alpha. Jeśli używasz Staty, polecenie jest alfa, w SAS jest proc corr, aw SPSS jest skalowane, niezawodność.

Następnie możesz obliczyć wynik jako średni wynik każdego lekarza lub średnią ważoną (ważoną przez korelację) i sprawdzić, czy wynik ten prognozuje prawdziwą diagnozę.

Możesz też pominąć ten etap i zarejestrować osobno wyniki każdego lekarza po diagnozie i traktować parametry regresji jako ciężary.

Nie wahaj się prosić o wyjaśnienia, a jeśli chcesz książkę, podoba mi się „Skala pomiaru zdrowia” Streinera i Normana.

-Edycja: na podstawie dodatkowych informacji PO.

Wow, to cholernie alfa Cronbacha. Widziałem to tak wysoko tylko wtedy, gdy popełniono błąd.

Wykonałbym teraz regresję logistyczną i spojrzałbym na krzywe ROC.

Różnica między wagą regresji a korelacją zależy od tego, w jaki sposób lekarze reagują. Niektóre dokumenty mogą być na ogół bardziej pewne siebie (nie są bardziej zręczne), a zatem mogą częściej używać skrajnych zakresów. Jeśli chcesz to poprawić, skorzystaj z korelacji zamiast z regresji. Prawdopodobnie miałbym wagę regresji, ponieważ zachowuje oryginalne dane (i nie odrzuca żadnych informacji).

Edycja (2): Uruchomiłem modele regresji logistycznej w R, aby zobaczyć, jak dobrze każdy przewidział wynik. tl / dr: nic między nimi nie ma.

Oto mój kod:

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 krzywe ROC

A wynik:

> 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
Bardzo dobre. I, jak pozwala na to twoje rozumowanie, możliwe, że niektórzy lekarze pogorszą alfa, przyczyniając się do unikalnego wglądu, jednocześnie ograniczając trend.
rolando2

@ jeremy-miles Dziękujemy za tę odpowiedź i uprzejmą ofertę odpowiedzi na pytania. Próbowałem wdrożyć to, co zasugerowałeś, i zredagowałem OP, aby opublikować niektóre wyniki. Zastanawiam się przede wszystkim, czy poprawnie zinterpretowałem Twój post, a także, co trzeba zrobić, aby pokazać, że niektóre metody agregacji działają lepiej niż inne metody w przewidywaniu wyniku.
user1205901 - Przywróć Monikę

Dziękujemy za opublikowanie danych. Zajmę się tym później. (Z jakiego oprogramowania korzystasz?)
Jeremy Miles,

@JeremyMiles Dziękujemy za opublikowanie tej edycji! Używam MATLAB, ale wiem wystarczająco dużo o R, aby przejść w górę i użyć go zamiast tego, ponieważ już napisałeś kod R. Obliczyłem, że Alfa Cronbacha w SPSS - czy otrzymujesz inną wartość niż R?
user1205901 - Przywróć Monikę

1
Tak właśnie myślałem. Więc każdy lekarz ma inną wagę.
Jeremy Miles,

2

Dwie gotowe sugestie:

  1. Możesz użyć ciężarów funkcji utraty regresji logistycznej, aby lekarz, który jest bardzo pewny, że pacjent ma raka z P = 1, podwoi się, ma inny, który mówi, że ma raka z P = 0,75. Nie zapomnij odpowiednio przekształcić swoich prawdopodobieństw w wagi.
  2. Rodzina często zaniedbywanych modeli to modele rankingowe. W rankingach istnieją trzy duże grupy: rankingowe, punktowe i parowe, w zależności od tego, jaki jest twój wkład. Wygląda na to, że w twoim przypadku możesz użyć punktowego rankingu .

Czy możesz zasugerować sposób prawidłowego przekształcenia prawdopodobieństwa w wagi? Próbowałem googlować w tej koncepcji, ale nie mogłem znaleźć żadnej wyraźnej porady, jak to zrobić.
user1205901 - Przywróć Monikę

@ user1205901, miałem na myśli coś bardzo prostego: Let P= prawdopodobieństwo zachorowania na raka podane przez lekarza, a następnie (w notacji python): y=[1 if p >= 0.5 else 0 for p in P]i w=[abs(p-0.5)*2 for p in P]. Następnie trenuj model:LogisticRegression().fit(X,y,w)
Ricardo Cruz,

W funkcji utraty daje to na przykład podwójną wagę do 0,1 niż 0,2 za to, że nie jest rakiem (0,1 -> 0,8 i 0,2 -> 0,6). Jeśli lekarz nie jest pewien (P ~ 0,5), obserwacja prawie nie przyczynia się do straty. Niezależnie od tego, jakiego modelu używa, musi obsługiwać dodanie wektora kosztu do funkcji straty, który obsługuje większość modeli. Nie wiem, czy to coś dobrego, ale próba wydaje się trywialna. Najpierw musi określić metrykę. Funkcja straty może być dodatkowo dostosowana do dowolnej metryki, którą chce maksymalizować.
Ricardo Cruz,

2

(To nie moja specjalizacja, więc odpowiedź Jeremy'ego Milesa może być bardziej wiarygodna).

Oto jeden pomysł.

Po pierwsze, wyobraź sobie, że nie ma poziomu zaufania. Następnie dla każdego pacjenta ma raka albo nie ma , a każdy lekarz zdiagnozował u nich raka lub nie, .i=1Nci{0,1}j=1mdij{0,1}

Prostym podejściem jest założenie, że chociaż lekarze mogą zgodzić się lub nie zgodzić w sprawie diagnozy danego pacjenta, jeśli znamy prawdziwy status pacjenta, diagnozę każdego lekarza można traktować jako niezależną. Oznacza to, że są warunkowo niezależne, biorąc uwagę . Wynikiem tego jest dobrze zdefiniowany klasyfikator znany jako Naive Bayes , którego parametry są łatwe do oszacowania.dijci

W szczególności podstawowymi parametrami są stawka podstawowa, , a prawdopodobieństwo diagnostyki warunkowej Należy zauważyć, że ten ostatni parametr jest średnią ważoną diagnoz dla lekarza , gdzie wagi są prawdziwymi warunkami pacjenta .p[c]1Nici

p[dj|c]idijciici
jci

Teraz, jeśli ten model jest rozsądny, wówczas jednym ze sposobów włączenia poziomów ufności jest dostosowanie wag. Wówczas prawdopodobieństwa warunkowe stałyby się Tutaj to waga, która odpowiada poziomowi ufności .

p[dj|c,wj]idijwijciiwijci
wij0dij

Zauważ, że jeśli twoje wagi są wyrzucane jako prawdopodobieństwa , możesz użyć formuły „skrót Bernoulliego ” odpowiednio uwzględnić przypadek .w[0,1]

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

Uwaga: Wymaga to, aby twoje oprogramowanie dawało 0^0=1zamiast 0^0=NaN, co jest powszechne, ale warto to sprawdzić! Alternatywnie możesz zapewnić , np. Jeśli ufność wynosi wtedy będzie działać.w(0,1)k{1K}w=k/(K+1)


W kontekście komentarza @Wayne: Jeśli powiesz No Cancer (3) = Cancer (2), jest to zgodne z moim modelem ważenia, używając , ponieważ . Alternatywnie, jeśli powiesz , jest to zgodne z , ponieważ . w[k]=kK25=135No Cancer (3) = Cancer (3)w[k]=kK+136=136
GeoMatt22,

Czy mogę sprawdzić, czy rozumiem ? Jeśli wyniki wynoszą [1,0,1], a lekarz prognozuje [0,1,1], a waga lekarza wynosi [0,2, 0,4,0, 8,8], czy prawdopodobieństwo ważonej diagnozy warunkowej wynosi 0,5?
p[dj|c,wj]idijwijciiwijci
user1205901 - Przywróć Monikę

Przepraszam, zdałem sobie sprawę, że chciałem tylko, aby , tzn. , zamiast wskaźników . Więc w twoim przypadku . Następnie , podczas gdy i . Zatem i . 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[δ]=δ¯=560.8p[c|δ]=p[c,δ]/p[δ]=0.8p[δ|c]=p[c,δ]/p[c]=0.8
GeoMatt22,

0

Z twojego pytania wynika, że ​​to, co chcesz przetestować, to twój system pomiarowy. W dziedzinie inżynierii procesowej byłaby to analiza systemu pomiaru atrybutów lub MSA.

Ten link zawiera przydatne informacje na temat potrzebnej wielkości próby oraz obliczeń przeprowadzanych w celu przeprowadzenia badania tego typu. https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-calculations/

W ramach tego badania lekarz musiałby również zdiagnozować u tego samego pacjenta co najmniej dwukrotnie te same informacje.

Możesz przeprowadzić to badanie na dwa sposoby. Możesz użyć prostej oceny raka / brak raka, aby ustalić porozumienie między lekarzami i każdym lekarzem. Idealnie powinny być w stanie zdiagnozować z takim samym poziomem pewności. Następnie możesz użyć pełnej 10-punktowej skali, aby sprawdzić zgodność między i przez każdego lekarza. (Wszyscy powinni zgodzić się, że rak (5) to ta sama ocena, że ​​żaden rak (1) nie jest taki sam, itd.)

Obliczenia w połączonej witrynie są łatwe do przeprowadzenia na dowolnej platformie, z której korzystasz do swoich testów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.