从混淆矩阵中手动计算灵敏度,得出值 0.853。
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
这是引导方法的结果吗?因为是中位数?
答案 0 :(得分:1)
在报告和分析混乱矩阵的结果时,请务必小心。进行数字预测时,必须考虑生成此表的阈值。给定其中的数字,我将假定您使用的阈值为0.495或与之接近的阈值,这使我可以获得与您相同的数字:
> table(y_test, y_pred_prob > 0.495)
y_test FALSE TRUE
0 17 6
1 5 29
现在我们有一个阈值可以使用,我们可以使用coords函数从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