Как мне подойти к этой проблеме бинарного предсказания?

9

У меня есть набор данных в следующем формате.

Прогнозы рака нет рака

Есть бинарный исход рак / нет рака. Каждый врач в наборе данных осмотрел каждого пациента и дал независимое суждение о том, есть ли у пациента рак или нет. Затем врачи дают из 5 уровень уверенности в том, что их диагноз верен, а уровень достоверности отображается в скобках.

Я пробовал разные способы получить хорошие прогнозы из этого набора данных.

Для меня очень хорошо просто усреднять врачей, игнорируя их уровень доверия. В приведенной выше таблице это поставило бы правильные диагнозы для Пациента 1 и Пациента 2, хотя было бы неправильно сказать, что Пациент 3 имеет рак, так как большинством 2-1 врачи считают, что Пациент 3 имеет рак.

Я также попробовал метод, в котором мы случайным образом выбираем двух врачей, и если они не соглашаются друг с другом, то решающий голос переходит к тому, кто из врачей будет более уверен. Этот метод экономичен тем, что нам не нужно консультироваться со многими врачами, но он также немного увеличивает частоту появления ошибок.

Я попробовал родственный метод, в котором мы случайным образом выбираем двух врачей, и, если они не согласны друг с другом, мы случайным образом выбираем еще двух. Если один диагноз опережает по крайней мере два «голоса», то мы решаем вопросы в пользу этого диагноза. Если нет, мы продолжаем отбирать новых врачей. Этот метод довольно экономичен и не допускает слишком много ошибок.

Я не могу избавиться от ощущения, что мне не хватает более сложного способа ведения дел. Например, мне интересно, можно ли каким-то образом разделить набор данных на обучающие и тестовые наборы и разработать какой-то оптимальный способ объединения диагнозов, а затем посмотреть, как эти веса работают на тестовом наборе. Одна из возможностей - это какой-то метод, который позволяет мне лечить врачей с избыточным весом, которые постоянно допускают ошибки на испытательном полигоне, и, возможно, диагностировать избыточный вес, которые сделаны с высокой степенью достоверности (достоверность коррелирует с точностью в этом наборе данных).

У меня есть различные наборы данных, соответствующие этому общему описанию, поэтому размеры выборки различаются, и не все наборы данных относятся к врачам / пациентам. Тем не менее, в этом конкретном наборе данных есть 40 врачей, каждый из которых видел 108 пациентов.

РЕДАКТИРОВАТЬ: Вот ссылка на некоторые из весов, которые являются результатом моего чтения ответа @ jeremy-miles.

  1. Невзвешенные результаты находятся в первом столбце. На самом деле в этом наборе данных максимальное значение достоверности было 4, а не 5, как я ошибочно сказал ранее. Таким образом, следуя подходу @ jeremy-miles, наивысший невзвешенный балл, который может получить любой пациент, будет равен 7. Это означает, что буквально каждый врач утверждал с уровнем достоверности 4, что у этого пациента был рак. Самая низкая невзвешенная оценка, которую может получить любой пациент, равна 0, что означает, что каждый врач утверждал с уровнем достоверности 4, что у этого пациента не было рака.

  2. Взвешивание по Альфе Кронбаха. В SPSS я обнаружил, что общая Альфа Кронбаха составляет 0,9807. Я попытался проверить, правильно ли это значение, вычислив Альфу Кронбаха более ручным способом. Я создал ковариационную матрицу из всех 40 врачей, которую я вставил сюда . Затем, основываясь на моем понимании формулы Альфа Кронбаха где - количество предметов (здесь врачи - «предметы»), которые я вычислил путем суммирования всех диагональных элементов в ковариационной матрице, а путем суммирования всех элементов в ковариационная матрица. Я тогда получилα=KK1(1σxi2σT2)Kσxi2σT2α=40401(18.7915200.7112)=0.9807 я рассчитал 40 различных результатов Альфа-Кронбаха, которые будут иметь место, когда каждый врач будет удален из набор данных. Я взвешивал любого доктора, который внес отрицательный вклад в Альфу Кронбаха, в ноль. Я придумал веса для оставшихся докторов, пропорциональные их положительному вкладу в Альфу Кронбаха.

  3. Взвешивание по общим соотношениям предметов. Я вычисляю все общие корреляции предметов, а затем взвешиваю каждого доктора пропорционально размеру их корреляции.

  4. Взвешивание по коэффициентам регрессии.

В одном я до сих пор не уверен, как сказать, какой метод работает «лучше», чем другой. Ранее я вычислял такие вещи, как показатель навыка Пирса, который подходит для случаев, когда есть двоичное предсказание и двоичный результат. Однако теперь у меня есть прогнозы в диапазоне от 0 до 7 вместо 0 к 1. Должен ли я конвертировать все взвешенные баллы> 3,50 в 1, и все взвешенные баллы <3,50 в 0?

user1205901 - Восстановить Монику
источник
Можем ли мы сказать, что No Cancer (3)это Cancer (2)? Это немного упростит вашу проблему.
Уэйн
1
В отношении вашей структуры данных, почти всегда лучше иметь разные переменные (есть ли у пациента рак; насколько достоверна оценка) в разных столбцах. Объединение их, как в «нет рака (3)», серьезно ограничивает ваши возможности.
rolando2
@Wayne Данные варьируются от прогноза рака с максимальной достоверностью Cancer (4)до прогноза отсутствия рака с максимальной достоверностью No Cancer (4). Мы не можем сказать, что это одно No Cancer (3)и Cancer (2)то же, но мы можем сказать, что существует континуум, а средние точки в этом континууме - Cancer (1)и No Cancer (1).
user1205901 - Восстановить Монику
@ rolando2 Спасибо за совет. Я переставил вещи в своем собственном файле данных, чтобы теперь они были выделены.
user1205901 - Восстановить Монику
1
Обратите внимание, что ваш порог является настраиваемым параметром , поэтому соответствующее ограничение будет зависеть от вашего критерия оценки. Так как я не был знаком с вашей метрикой, я прогуглил ее, и фактически первый удар может иметь отношение к вам: примечание о максимальном балле навыка Peirce (2007) .
GeoMatt22

Ответы:

7

Во-первых, я бы посмотрел, согласны ли врачи друг с другом. Вы не можете анализировать 50 врачей по отдельности, потому что вы будете соответствовать модели - один врач будет выглядеть великолепно, случайно.

Вы можете попытаться объединить доверие и диагностику в 10-балльной шкале. Если врачи говорят, что у пациента нет рака, и они очень уверены в себе, то это 0. Если врач говорит, что у него есть рак, и они очень уверены, то это 9. Если они говорят, что у них нет, и не уверены, это 5 и т. д.

Когда вы пытаетесь предсказать, вы делаете какой-то регрессионный анализ, но, думая о причинном порядке этих переменных, все наоборот. Причиной диагноза является наличие у пациента рака, а в результате - диагноз.

Ваши ряды должны быть пациентами, а ваши столбцы должны быть врачами. Теперь у вас есть ситуация, которая часто встречается в психометрии (вот почему я добавил тег).

Затем посмотрите на отношения между оценками. Каждый пациент имеет средний балл и балл от каждого врача. Средняя оценка положительно коррелирует с оценкой каждого врача? Если нет, то этот врач, вероятно, не заслуживает доверия (это называется корреляцией между предметами). Иногда вы удаляете одного врача из общего балла (или среднего балла) и смотрите, коррелирует ли этот врач со средним значением всех других докторов - это общая скорректированная статья.

Вы можете рассчитать альфу Кронбаха (которая является формой внутриклассовой корреляции) и альфу без каждого доктора. Альфа всегда должна повышаться, когда вы добавляете доктора, поэтому, если она повышается, когда вы удаляете доктора, оценка этого доктора является подозрительной (это не часто говорит вам о чем-то отличном от скорректированной корреляции между количеством элементов).

Если вы используете R, то такого рода вещи доступны в пакете psy, используя функцию alpha. Если вы используете Stata, команда является альфа-версией, в SAS это proc corr, а в SPSS - масштабируемая надежность.

Затем вы можете рассчитать оценку, как среднюю оценку от каждого врача, или средневзвешенную величину (взвешенную по корреляции) и посмотреть, является ли эта оценка прогностической в ​​отношении истинного диагноза.

Или вы можете пропустить эту стадию, и регрессировать оценку каждого врача по диагнозу отдельно, и рассматривать параметры регрессии как веса.

Не стесняйтесь просить разъяснений, и если вы хотите книгу, мне нравятся «Шкалы измерения здоровья» Стрейнера и Нормана.

-Редакт: на основе дополнительной информации ОП.

Вау, это чертов альфа Кронбаха. Единственный раз, когда я видел это так высоко, это когда была допущена ошибка.

Я бы сейчас сделал логистическую регрессию и посмотрел на кривые ROC.

Разница между взвешиванием по регрессии и корреляции зависит от того, как, по вашему мнению, реагируют врачи. Некоторые документы в целом могут быть более уверенными (не будучи более умелыми), и, следовательно, они могут больше использовать экстремальные диапазоны. Если вы хотите исправить это, используйте корреляцию, а не регрессию. Я бы, вероятно, взвесил регрессию, так как при этом сохраняются исходные данные (и не отбрасывается никакая информация).

Редактировать (2): Я запустил модели логистической регрессии в R, чтобы увидеть, насколько хорошо каждая из них предсказала результат. ТЛ / ДР: между ними ничего нет.

Вот мой код:

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

И вывод:

> 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
Отлично. И, как позволяют ваши рассуждения, возможно, что какой-то доктор усугубит альфу, предоставляя уникальную способность проникновения в суть, одновременно отражая тенденцию.
rolando2
@ jeremy-miles Спасибо за этот ответ и за любезное предложение задать вопросы по этому поводу. Я попытался реализовать то, что вы предложили, и отредактировал ОП, чтобы опубликовать некоторые результаты. Главное, что меня интересует, это то, правильно ли я интерпретировал ваш пост, а также что нужно сделать, чтобы показать, что определенные методы агрегирования работают лучше, чем другие методы прогнозирования результата.
user1205901 - Восстановить Монику
Спасибо за размещение данных. Я посмотрю на это позже. (Какое программное обеспечение вы используете?)
Джереми Майлз
@JeremyMiles Спасибо за публикацию этого редактирования! Я использую MATLAB, но я знаю достаточно о R, чтобы перейти и использовать его вместо этого, поскольку вы уже опубликовали код R. Я подсчитал, что Альфа Кронбаха в SPSS - вы получаете другое значение от R?
user1205901 - Восстановить Монику
1
Да, это то, что я думал. Таким образом, каждый врач получает разный вес.
Джереми Майлз
2

Два готовых предложения:

  1. Вы можете использовать весовые коэффициенты для функции потерь вашей логистической регрессии, чтобы врач, который очень уверен, что у пациента был рак с P = 1, получил двойное воздействие, а другой сказал, что у него рак с P = 0,75. Не забудьте правильно преобразовать ваши вероятности в весовые коэффициенты.
  2. Семейство моделей, которым часто пренебрегают, является ранжирующими моделями. Внутри ранкеров есть три большие группы: списочное, точечное и попарное ранжирование в зависимости от того, что вы делаете. Похоже, вы могли бы использовать точечное ранжирование в вашем случае.
Рикардо Круз
источник
Можете ли вы предложить способ правильного преобразования вероятностей в весовые коэффициенты? Я попытался погуглить эту концепцию, но не смог найти четкого совета, как это сделать.
user1205901 - Восстановить Монику
@ user1205901, я имел в виду что-то очень простое, например: Пусть P= вероятность заболевания раком, указанная доктором, затем (в записи Python): y=[1 if p >= 0.5 else 0 for p in P]и w=[abs(p-0.5)*2 for p in P]. Тогда тренируйте модель:LogisticRegression().fit(X,y,w)
Рикардо Крус
В функции потерь это даст, например, удвоение веса до 0,1, чем 0,2, поскольку он не является раком (0,1 -> 0,8 и 0,2 -> 0,6). Если врач не уверен (P ~ 0,5), то наблюдение почти ничего не вносит в потерю. Какую бы модель он ни использовал, он должен поддерживать добавление вектора затрат к функции потерь, которую поддерживает большинство моделей. Я не знаю, хорошо ли это, но попробовать тривиально. Сначала он должен указать метрику. Функция потерь может быть дополнительно адаптирована к любой метрике, которую он хочет максимизировать.
Рикардо Круз
2

(Это выходит за рамки моей компетенции, поэтому ответ Джереми Майлза может быть более надежным.)

Вот одна идея.

язнак равно1...Nся{0,1}Jзнак равно1...мdяJ{0,1}

dяJся

п[с]1NΣяся

п[dJ|с]ΣяdяJсяΣяся
Jся

п[dJ|с,весJ]ΣяdяJвесяJсяΣявесяJся
весяJ0dяJ

вес[0,1]

п[d|вес]знак равноdвес(1-d)1-вес
dзнак равно0

0^0=10^0=NaNw(0,1)k{1K}wзнак равноК/(К+1)

GeoMatt22
источник
No Cancer (3) = Cancer (2)вес[К]знак равноКК25знак равно1-35No Cancer (3) = Cancer (3)вес[К]знак равноКК+136знак равно1-36
п[dJ|с,весJ]ΣяdяJвесяJсяΣявесяJся
dδ[0,1]d{0,1}δязнак равновеся(dязнак равно1)+(1-веся)(dязнак равно0)δзнак равно[0.8,0,4,0.8]п[с,δ]знак равносδ¯знак равно0.8+0+0.83знак равно230.8п[2]знак равнос¯знак равно23п[δ]знак равноδ¯знак равно560.8п[с|δ]знак равноп[с,δ]/п[δ]знак равно0.8п[δ|с]знак равноп[с,δ]/п[с]знак равно0.8
0

Из вашего вопроса выясняется, что вы хотите проверить свою систему измерений. В области технологического проектирования это будет анализ системы измерения атрибутов или MSA.

Эта ссылка предоставляет некоторую полезную информацию о необходимом размере выборки и проведении расчетов для проведения исследования такого типа. https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-calculations/

В этом исследовании вам также потребуется врач для диагностики одного и того же пациента с той же информацией, по крайней мере, дважды.

Вы можете провести это исследование одним из двух способов. Вы можете использовать простой рейтинг рака / без рака, чтобы определить соглашение между врачами и каждым врачом. В идеале, они также должны быть в состоянии диагностировать с тем же уровнем доверия. Затем вы можете использовать полную 10-балльную шкалу для проверки согласия между каждым врачом. (Все должны согласиться с тем, что рак (5) имеет одинаковую оценку, а рак (1) не имеет одинаковой оценки и т. Д.)

Расчеты на связанном веб-сайте просты для проведения на любой платформе, которую вы можете использовать для своих тестов.

Tavrock
источник