Медиана pROC Чувствительность по сравнению с ручным расчетом чувствительности - разные результаты

Вычисление чувствительности вручную из матрицы путаницы дает значение 0,853.

  • TN = 16
  • FP = 7
  • FN = 5
  • TP = 29

Выход pROC отличается (медиана = 0,8235).

y_test = c(1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
       0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0,
       0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0)

y_pred_prob = c(0.63069148, 0.65580015, 0.9478634 , 0.94471701, 0.24756774,
       0.51969906, 0.26881201, 0.6722361 , 0.30275069, 0.61676645,
       0.76116789, 0.90867332, 0.31525658, 0.10681422, 0.6890589 ,
       0.25185641, 0.54820684, 0.7175465 , 0.57194733, 0.71304872,
       0.98805141, 0.92829077, 0.38150015, 0.97653216, 0.96036858,
       0.75878699, 0.95466371, 0.52292342, 0.28296724, 0.5660834 ,
       0.91581461, 0.49574317, 0.79025422, 0.14303487, 0.66885536,
       0.07660444, 0.10342033, 0.53661914, 0.04701796, 0.83313871,
       0.37766607, 0.89157993, 0.47731778, 0.62640482, 0.47664294,
       0.0928437 , 0.13605622, 0.2561323 , 0.95572329, 0.49051571,
       0.49267652, 0.92600581, 0.48464618, 0.96006108, 0.01548211,
       0.56057243, 0.82257937)

set.seed(99)
boot = 2000
rocobj <- roc(y_test, y_pred_prob)
print(ci.thresholds(rocobj,.95, thresholds =  0.5, method = 'bootstrap',boot.n = boot))

OUT:    95% CI (2000 stratified bootstrap replicates):
     thresholds sp.low sp.median sp.high se.low se.median se.high
      0.5002624 0.5652    0.7391   0.913 0.6765    0.8235  0.9412

Является ли это результатом метода начальной загрузки? Потому что это медиана?


person Mischa    schedule 25.07.2020    source источник
comment
Начальная загрузка — это случайный метод, вы должны ожидать разных результатов. Попробуйте, например, изменить начальное число ГСЧ.   -  person Rui Barradas    schedule 26.07.2020
comment
@RuiBarradas Я пытался это сделать, но это мало что меняет, если вообще меняет. Поэтому мне любопытно, как возникает большая разница между 0,853 и 0,8235...   -  person Mischa    schedule 26.07.2020
comment
Миша это показывает чувствительность с использованием порога 0,5. Если вы используете порог 0,5, чтобы получить свою ручную чувствительность (например, table(prediction = y_pred_prob > 0.5, actual = y_test)), вы получите матрицу путаницы, отличную от той, которую вы показали. Эта матрица путаницы дает чувствительность 0,8235 (это 28/34, а не 29/34). Возможно, вы используете оптимальную отсечку для своей матрицы путаницы? Если это так, вам нужно передать это значение пороговому аргументу ci.thresholds.   -  person Allan Cameron    schedule 26.07.2020
comment
Молодец @AllanCameron   -  person duckmayr    schedule 26.07.2020


Ответы (1)


Какой порог вы использовали?

Вы должны быть осторожны, когда вы сообщаете и анализируете результаты матрицы путаницы. Когда у вас есть числовые прогнозы, вы должны учитывать, при каком пороге была сгенерирована эта таблица. Учитывая числа в нем, я предполагаю, что вы использовали порог 0,495 или что-то близкое к этому, что позволило мне получить те же числа, что и вы:

> table(y_test, y_pred_prob > 0.495)
      
y_test FALSE TRUE
     0    17    6
     1     5   29

Как получить эмпирическую чувствительность и специфичность от pROC?

Теперь, когда у нас есть порог для работы, мы можем извлечь данные для этого порога из pROC с помощью координаты функция:

> coords(rocobj, 0.495, "threshold", transpose = FALSE)
  threshold specificity sensitivity
1     0.495   0.7391304   0.8529412

Это именно та чувствительность, которую вы рассчитали.

Что насчет бустеринга?

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

Однако для медианы с 2000 репликами начальной загрузки мы получаем довольно близкое значение:

> set.seed(99)
> print(ci.thresholds(rocobj,.95, thresholds =  0.495, method = 'bootstrap',boot.n = boot))

95% CI (2000 stratified bootstrap replicates):
 thresholds sp.low sp.median sp.high se.low se.median se.high
      0.495 0.5652    0.7391   0.913 0.7353    0.8529  0.9706
person Calimo    schedule 26.07.2020