首页 > 解决方案 > 使用 SQL 计算 ROC

问题描述

我正在尝试使用 MS SQL Server 计算接收器操作曲线 (ROC)。以下是代码。

DROP TABLE #Areas
SELECT CASE WHEN b.sensitivity> a.sensitivity THEN b.sensitivity ELSE
a.sensitivity END * abs(b.specificity-a.specificity)
+ Abs(b.sensitivity - a.sensitivity) * abs(b.specificity.specificity)/2
AS area
INTO #Areas
FROM #SensSpec a inner join #SensSpec b ON b.rnum-1 = a.rnum

我不断收到以下错误:

消息 258,级别 15,状态 1,第 4 行无法调用浮点方法

它在代码“abs(b.specificity.specificity)/2”的这一部分中指的是“b.specificity”。我该如何解决?

标签: sqlsql-serverroc

解决方案


我不知道b.specificity.specificity应该是什么。这应该可以解决您的问题:

SELECT ((CASE WHEN b.sensitivity> a.sensitivity THEN b.sensitivity
              ELSE a.sensitivity
         END) * abs(b.specificity - a.specificity) +
        (abs(b.sensitivity - a.sensitivity) * 
         abs(b.specificity - a.specificity) / 2
        )
       ) AS area
INTO #Areas
FROM #SensSpec a inner join
     #SensSpec b
     ON b.rnum - 1 = a.rnum;

这不是我计算数据 ROC 值的方式。此计算使用内部连接,因此至少您缺少范围的端点。

我更喜欢使用累积窗口函数的计算。但是对于 Stack Overflow 的答案来说,这个解释有点长。我很少这样做,但我确实在使用 SQL 和 Excel 的数据分析,第二版中涵盖了这一点。


推荐阅读