R语言ROC分析阈值异常?求解阈值计算与解读问题
ROC曲线阈值与原变量范围不符的问题解答
核心问题:误解了ROC阈值的定义
你看到的阈值不是原变量DOKU_INDEXWERT的取值,而是逻辑回归输出的事件发生预测概率(也就是glm.fit$fitted.values的取值,范围0-1),这是正常现象,并非计算错误。
具体解释
- 逻辑回归的拟合结果
fitted.values是每个样本对应ENTLASSMANAGEMENT_BIN=1的概率,范围0到1。ROC曲线的本质是遍历这个概率的所有可能截断点,计算对应的灵敏度和特异度,因此阈值自然是概率值,和原自变量DOKU_INDEXWERT的1-41范围完全无关。 - 出现
-Inf是ROC计算的标准起始点:当阈值设为负无穷时,所有样本都会被判定为阳性,此时灵敏度100%、特异度0%,对应ROC曲线的左下角起点。
如何得到原变量DOKU_INDEXWERT的截断值
如果需要对应到原变量的分界点,可以把预测概率阈值反向映射回DOKU_INDEXWERT的取值(逻辑回归的预测概率和DOKU_INDEXWERT呈单调关系,因此可以对应):
# 合并原变量、预测概率和实际标签 pred_df <- data.frame( doku = data_sub$DOKU_INDEXWERT, prob = glm.fit$fitted.values, actual = data_sub$ENTLASSMANAGEMENT_BIN ) # 按预测概率排序 pred_df_sorted <- pred_df[order(pred_df$prob), ] # 选择最优概率阈值(以Youden指数为例) youden_idx <- which.max(roc.info$sensitivities + roc.info$specificities - 1) optimal_prob <- roc.info$thresholds[youden_idx] # 找到对应的DOKU_INDEXWERT截断值:取预测概率>=最优阈值的最小DOKU值 optimal_doku_cutoff <- min(pred_df_sorted$doku[pred_df_sorted$prob >= optimal_prob])
内容的提问来源于stack exchange,提问作者Zachai
相关产品推荐
相关产品推荐

