gpt4 book ai didi

r - 如何在使用 pRoc 包进行 ROC 分析后获得 p 值?

转载 作者:行者123 更新时间:2023-12-04 01:25:32 28 4
gpt4 key购买 nike

对一组数据进行ROC分析后,如何计算p值?使用相同的统计数据,我看到可以在 SPSS 中输出 p 值。
示例代码如下:

library(pROC)
data(aSAH)
head(aSAH)
# gos6 outcome gender age wfns s100b ndka
# 29 5 Good Female 42 1 0.13 3.01
# 30 5 Good Female 37 1 0.14 8.54
# 31 5 Good Female 42 1 0.10 8.09
# 32 5 Good Female 27 1 0.04 10.42
# 33 1 Poor Female 42 3 0.13 17.40
# 34 1 Poor Male 48 2 0.10 12.75

(rr <- roc(aSAH$outcome, aSAH$s100b, plot=T))
# Setting levels: control = Good, case = Poor
# Setting direction: controls < cases
#
# Call:
# roc.default(response = aSAH$outcome, predictor = aSAH$s100b, plot = F)
#
# Data: aSAH$s100b in 72 controls (aSAH$outcome Good) < 41 cases (aSAH$outcome Poor).
# Area under the curve: 0.7314

编辑:

SPSS中计算的p值是0.000007,但是p值是通过 verification::roc.area()计算出来的是0.000022546,是 roc.area()的计算方法和SPSS不一致?
levels(aSAH$outcome) <- c(0, 1)
library(verification)
ra <- roc.area(as.numeric(as.vector(aSAH$outcome)), rr$predictor)
ra$p.value
# [1] 0.00002254601

最佳答案

无法在 pROC::roc 中获取 p 值, 您可以设置选项 ci=TRUE来获得置信区间。 pROC::roc产生一个不可见的输出,你可以通过将它分配给一个对象来获取它。

library(pROC)
data(aSAH)
rr <- pROC::roc(aSAH$outcome, aSAH$s100b, ci=TRUE)

使用 str(rr)揭示了如何访问 ci :
rr$ci
# 95% CI: 0.6301-0.8326 (DeLong)

所以你已经有了一个置信区间。

此外,您还可以使用 pROC::var 获得方差。 *,您可以从中手动计算标准误差。
(v <- var(rr))
# [1] 0.002668682
b <- rr$auc - .5
se <- sqrt(v)
(se <- sqrt(v))
# [1] 0.05165929

* 请注意,还有一个引导选项 pROC::var(rr, method="bootstrap") .

这与Stata计算的相同,
# . roctab outcome_num s100b, summary
#
# ROC -Asymptotic Normal--
# Obs Area Std. Err. [95% Conf. Interval]
# ------------------------------------------------------------
# 113 0.7314 0.0517 0.63012 0.83262
# .
# . display r(se)
# .05165929

哪里 Stata Base Reference Manual 14 - roctab (p. 2329) 指出:

By default, roctab calculates the standard error for the area under the curve by using an algorithm suggested by DeLong, DeLong, and Clarke-Pearson (1988) and asymptotic normal confidence intervals.



一旦我们有了标准误差,我们还可以根据 z 分布 ( Ref. ) 计算 p 值。
z <- (b / se)
2 * pt(-abs(z), df=Inf) ## two-sided test
# [1] 0.000007508474

此 p 值接近您的 SPSS 值,因此它很可能是使用类似于 Stata 的算法计算得出的(比较: IBM SPSS Statistics 24 Algorithms ,第 888:889 页)。

然而, ROC 分析的 p 值的计算可能存在争议。例如。您在编辑中显示的方法(另请参见下面的第一个链接)基于 Mann-Whitney U 统计。

在决定哪种方法最适合您的分析之前,您可能需要更深入地研究该主题。我在这里为您提供一些阅读建议:
  • Does AUC/ROC curve return a p-value? (Cross Validated)
  • Which standard error formula for the area under the ROC curve should I use? (Cross Validated)
  • Differences between cross validation and bootstrapping to estimate the standard error of the AUC of a given ROC curve (Cross Validated)
  • Comparison of Three Methods for Estimating the Standard Error of the Area Under the Curve in ROC Analysis of Quantitative Data (Hajian-Tilaki and Hanley 2002)
  • Testing Statistical Significance of the Area under aReceiving Operating Characteristics Curve forRepeated Measures Design with Bootstrapping (Liu et al. 2005)
  • 关于r - 如何在使用 pRoc 包进行 ROC 分析后获得 p 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61997453/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com