请求协助计算new_outcome=1时的NPV、PPV、灵敏度、特异度
你的核心问题在于只筛选了new_outcome == 1的子集——计算NPV、PPV、灵敏度、特异度需要同时包含真实阳性(new_outcome=1)和真实阴性(new_outcome=0)的样本,否则无法构建完整的混淆矩阵(缺少真阴、假阴等关键数据)。
正确解决步骤
- 基于A、B、C的和生成预测变量(你设定的规则是
A+B+C >=2为阳性) - 用完整数据集构建混淆矩阵,明确指定阳性类别避免因子顺序错误
- 从混淆矩阵中提取所需指标
具体代码实现
# 1. 生成预测变量 mydata$pred <- ifelse(mydata$A + mydata$B + mydata$C >= 2, 1, 0) # 2. 转换为因子并指定阳性类别(将1设为阳性) mydata$new_outcome <- factor(mydata$new_outcome, levels = c(0, 1)) mydata$pred <- factor(mydata$pred, levels = c(0, 1)) # 3. 构建混淆矩阵(注意:data是预测值,reference是真实值) conf_mat <- confusionMatrix(data = mydata$pred, reference = mydata$new_outcome, positive = "1") # 4. 提取指标 NPV <- conf_mat$byClass[["Neg Pred Value"]] PPV <- conf_mat$byClass[["Pos Pred Value"]] sensitivity <- conf_mat$byClass[["Sensitivity"]] specificity <- conf_mat$byClass[["Specificity"]] # 查看结果 cat("NPV:", NPV, "\nPPV:", PPV, "\n灵敏度:", sensitivity, "\n特异度:", specificity)
关键提示
你提供的示例数据中new_outcome全为0,实际运行时如果没有new_outcome=1的样本,灵敏度和PPV会因分母为0无法计算,请确保真实数据集包含两类样本。
内容的提问来源于stack exchange,提问作者이예림
相关产品推荐
相关产品推荐

