在R中计算AUC检验统计量S与p值的技术问询
检验AUC=0.75的统计量S与p值计算方法
针对你的数据和需求,直接用pROC包结合Mann-Whitney U统计量的关联逻辑,就能得到所需的检验统计量和p值,具体操作如下:
1. 准备数据与创建ROC对象
先加载包并构建你的数据框(如果还没准备好):
library(pROC) df <- data.frame( obs = c(0,1,0,1,0,0,0,1,0,0,1,1), pred = c(0,0,0,1,0,0,1,1,1,0,0,1) ) # 创建ROC对象 roc_obj <- roc(obs ~ pred, data = df)
2. 直接用roc.test检验AUC=0.75
pROC的roc.test函数支持自定义原假设的AUC值,直接运行就能得到统计量(Z值,即你说的S)和p值:
test_result <- roc.test(roc_obj, null = 0.75) print(test_result)
输出结果里会明确给出标准化统计量(Z)和对应的双侧p值,这就是你需要的结果。
3. 手动关联Mann-Whitney U统计量的逻辑
如果想手动验证,AUC和Mann-Whitney U统计量的关系是:
- 无结时:
AUC = (U + 0.5)/(n0*n1) - 有结时:
pROC会使用调整后的U值计算AUC
其中n0是观测为0的样本数(你的数据里是7),n1是观测为1的样本数(你的数据里是5)。
步骤拆解:
- 提取U统计量:从ROC对象中获取
roc_obj$statistic,这就是调整后的Mann-Whitney U值。 - 计算原假设下的U期望:
E(U) = n0*n1*0.75 = 7*5*0.75 = 26.25 - 计算U的方差(考虑结调整):
# 统计每个预测值的结大小 t <- table(df$pred) sum_t3_t <- sum(t^3 - t) var_u <- (n0*n1)/12 * ((n0+n1+1) - sum_t3_t/((n0+n1)*(n0+n1-1))) - 标准化得到统计量S(Z值):
Z = (U - E(U))/sqrt(var_u) - 通过标准正态分布计算p值:
p_value = 2*pnorm(abs(Z), lower.tail = FALSE)
这个手动计算的结果会和roc.test的输出一致。
内容的提问来源于stack exchange,提问作者fredi96
相关产品推荐
相关产品推荐

