R语言给定alpha值/I类错误率时计算logistic回归模型灵敏度的方法
R语言基于指定alpha(一类错误率)计算logistic回归灵敏度与混淆矩阵的实现方法
你当前已经通过caret包训练了logistic回归模型,并用MLeval包的evalm生成了ROC对象,可以按以下步骤实现需求:
核心逻辑
一类错误率(alpha)等价于ROC曲线的假阳率(FPR = 1 - 特异度),我们可以从已生成的ROC对象中匹配目标alpha对应的分类阈值,再用该阈值将预测概率转换为分类标签,最终生成混淆矩阵并得到对应灵敏度。
完整实现代码
1. 从ROC对象中提取阈值、假阳率、灵敏度数据
# 从evalm返回的roc结果中提取核心指标 roc_data <- data.frame( threshold = eval$roc$thresholds, fpr = 1 - eval$roc$specificities, # 假阳率即为一类错误率alpha tpr = eval$roc$sensitivities # 真阳率即为灵敏度 )
2. 匹配目标alpha对应的阈值与灵敏度
# 替换为你实际需要的目标alpha值,示例为0.05 target_alpha <- 0.05 # 匹配和目标alpha差值最小的离散点(ROC阈值为离散值,无完全匹配时取最接近值) matched_row <- roc_data[which.min(abs(roc_data$fpr - target_alpha)), ] # 打印匹配结果 cat("目标alpha:", target_alpha, "\n", "匹配到的实际alpha:", round(matched_row$fpr, 4), "\n", "对应灵敏度:", round(matched_row$tpr, 4), "\n", "对应分类阈值:", round(matched_row$threshold, 4), "\n")
3. 生成分类标签并输出混淆矩阵
# 假设你的正类为"Yes",myPred中"Yes"列为正类预测概率,可根据实际情况调整 pred_class <- factor( ifelse(myPred$Yes >= matched_row$threshold, "Yes", "No"), levels = levels(myTestData$myTarget) ) # 输出标准confusionMatrix格式结果,指定正类为"Yes" confusionMatrix(pred_class, reference = myTestData$myTarget, positive = "Yes")
注意事项
- 若你的目标变量正类为"No",需对应修改代码中的
myPred$Yes为myPred$No,同时将positive参数改为"No" - 若需要严格匹配完全等于目标alpha的阈值,可将
which.min逻辑替换为精确匹配,但ROC的阈值为离散值,通常取最接近的结果即可 - 你之前的训练代码中指定了
metric = "ROC",默认已开启类概率输出,无需额外调整参数
内容的提问来源于stack exchange,提问作者user16971617
相关产品推荐
相关产品推荐

