我正在尝试计算敏感性和特异性。我使用了插入符号包和pROC包。但是,为什么使用两个不同的程序包会得到不同的结果?
我已将数据转换为二进制格式(只要有正确的调用,就将其标记为1和0表示错误的调用,即其余39个类中的任何一个)。
混乱矩阵如下:
table(actual_labels,app_labels)
app_labels
actual_labels 0 1
0 1183 23
1 5 18
方法1:使用插入符程序包
> sensitivity(table(actual_labels,app_labels))
[1] 0.9957912
> specificity(table(actual_labels,app_labels))
[1] 0.4390244
cutoff of =0.5
方法2:使用 pROC 软件包
aa <- roc(actual_labels,app_labels)
Setting levels: control = 0, case = 1
Setting direction: controls < cases
> aa$sensitivities
[1] 1.0000000 0.7826087 0.0000000
> aa$specificities
[1] 0.0000000 0.9809287 1.0000000
> aa$thresholds
[1] -Inf 0.5 Inf
为什么使用两个不同的程序包会得到不同的结果?
答案 0 :(得分:2)
根据the documentation of the sensitivity function in caret,在Details部分中,该表应如下所示:
Reference
Predicted Event No Event
Event A B
No Event C D
请注意,真正的标签在列中,而预测的标签在行中,这与您所拥有的相反。要获得正确的表格,您应该使用:
table(app_labels, actual_labels)
此语法非常容易出错,并且使用替代方法(这是早期插入符号中唯一可用的替代方法)是一个好主意:
sensitivity(data, reference, ...)
具有:
data for the default functions, a factor containing the discrete measurements. [...]
reference a factor containing the reference values
因此,您的情况应该是这样
sensitivity(app_labels, actual_labels)
答案 1 :(得分:1)
确定您正确使用了插入符号中的功能吗?
手动计算敏感性和特异性,您将得到pROC的结果。自己尝试:
>>> re.sub(r'-\s*[0-9]:[0-9]{2}(/[0-9]:[0-9]{2})?\s*[AP]M', "", data)
'8:30 AM\n9:00 AM \n08:00 AM-03:00 PM\nM, T, W, Th: 7:45 AM F: 7:45 AM\n8:15/8:45 AM'