You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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)。

步骤拆解:

  1. 提取U统计量:从ROC对象中获取roc_obj$statistic,这就是调整后的Mann-Whitney U值。
  2. 计算原假设下的U期望:E(U) = n0*n1*0.75 = 7*5*0.75 = 26.25
  3. 计算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)))
    
  4. 标准化得到统计量S(Z值):Z = (U - E(U))/sqrt(var_u)
  5. 通过标准正态分布计算p值:p_value = 2*pnorm(abs(Z), lower.tail = FALSE)

这个手动计算的结果会和roc.test的输出一致。

内容的提问来源于stack exchange,提问作者fredi96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:42:28