Умеете указывать пороги для расчета TPR и FPR? используя pROC - PullRequest
1 голос
/ 01 апреля 2019

Расчет TPR и FPR с использованием пакета pROC.Могу ли я указать пороговые значения, которые я хочу в расчете, используя пакет?

Мне нужно рассчитать TPR и FPR для порогов от 0 до 1 с шагом 0,05.

Это набор данных, с которым я работаю:

structure(list(prediction_resp_4 = c(0.0093660156194744, 0.63696691410065, 
0.693562340217509, 0.850026939982271, 0.0921374166454612, 0.223883311111169, 
0.000699258172241612, 0.117062385395824, 0.951947429014154, 0.714711536699156, 
0.230100717565363, 0.839895799034341, 0.149678433930086, 0.0913803675468538, 
0.86430898026459, 0.0807110314548418, 0.452757912184497, 0.819293921115556, 
0.0700190883640999, 0.44900095299551, 0.803772423123997, 0.373799624421601, 
0.122405205571954, 0.858831937028595, 0.276135791757235, 0.86129869300195, 
0.674060141486476, 0.303046534598074, 0.356020758015023, 0.0246899999008411, 
0.670342328628664, 0.0178170992678319, 0.0945567242524256, 0.0110559559742041, 
0.356077534809716, 0.0792480681507026, 0.630756724182966, 0.0165338433136149, 
0.816750535548877, 0.661098390528446, 0.0587373125478858, 0.315062410973728, 
0.831315518918304, 0.463520030831427, 0.725937488979879, 0.301643645590828, 
0.288625193696339, 0.9038875106375, 0.780722912230085, 0.37912106477669, 
0.136094212636133, 0.503643519530075, 0.544482442341009, 0.575738927352128, 
0.356077534809716, 0.722011034808203, 0.760550508601042, 0.603109270061287, 
0.793014589613734, 0.834485477242473, 0.783008040183127, 0.365330782046478, 
0.022358212647161, 0.0884525015278602, 0.200257196356859, 0.912502624283191, 
0.230100717565363, 0.112122111461138, 0.453938368209989, 0.704600061065344, 
0.224872418284352, 0.395491910748845, 0.999703986760998, 0.794479788600805, 
0.385076713799569, 0.0305635117938959, 0.92898574855535, 0.163314780984271, 
0.893410014409946, 0.496199240836053, 0.618023472980794, 0.584273518401166, 
0.295133623201644, 0.12042873699888, 0.251479713644139, 0.825885814333607, 
0.674317836386347, 0.371047453863054, 0.645239618141106, 0.00544077442795404, 
0.377910289600606, 0.936696423985203, 0.418497325382622, 0.871684421084382, 
0.345285714385491, 0.835470162627044, 0.0581701844461216, 0.612133334197249, 
0.675206715878502, 0.667971057122422), landslide.validation.lslpts = c(0, 
1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 
0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 
0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 
0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 
1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0)), row.names = c(NA, 
100L), class = "data.frame")

, где у меня есть ответ и прогноз.

Этот пакет pROC позволяет мне рассчитывать, но для всех возможных порогов.

мой текущий код выглядит следующим образом:

library(pROC)
myRoc <- roc(response = new_df$landslide.validation.lslpts, predictor = new_df$prediction_resp_4)

ROC <-data.frame(myRoc$sensitivities, myRoc$specificities, myRoc$thresholds)

Ожидается вычисление TPR и FPR для порогов от 0 до 1 с шагом 0,05.Как я могу сделать это?

Любая помощь будет оценена.Спасибо

1 Ответ

2 голосов
/ 01 апреля 2019

Хотя вы не можете указать, какие пороги использовать для построения самой кривой ROC (поскольку кривая ROC по определению пересекает все пороги), вы можете легко извлечь нужную информацию с помощью coords функция:

> coords(myRoc, seq(0, 1, 0.05))
            0      0.05       0.1      0.15       0.2      0.25       0.3 ...
threshold   0 0.0500000 0.1000000 0.1500000 0.2000000 0.2500000 0.3000000 ...
specificity 0 0.1568627 0.3333333 0.4509804 0.4705882 0.5098039 0.5882353 ...
sensitivity 1 0.9795918 0.9795918 0.9795918 0.9795918 0.9183673 0.9183673 ...

отмечая, что:

  • TPR = чувствительность
  • FPR = 1 - специфичность

Обратите внимание, что, хотя у вас есть FPR и TPR, это не кривая ROC , поскольку она не превышает все возможные пороги.

...