我努力寻找一种方法来计算接收器操作员特征(ROC)下面积的p值。我有一个连续变量和诊断测试结果。我想看看AUROC是否具有统计意义。
我发现许多处理ROC曲线的软件包:pROC,ROCR,caTools,验证,Epi。但是,即使花了很多时间阅读文档和测试,我仍然找不到方法。我想我只是想念它。
我努力寻找一种方法来计算接收器操作员特征(ROC)下面积的p值。我有一个连续变量和诊断测试结果。我想看看AUROC是否具有统计意义。
我发现许多处理ROC曲线的软件包:pROC,ROCR,caTools,验证,Epi。但是,即使花了很多时间阅读文档和测试,我仍然找不到方法。我想我只是想念它。
Answers:
在您的情况下,绘制ROC曲线并计算该曲线下的面积会很好,但是这应该被认为是对您的主要分析的补充,而不是主要分析本身。相反,您想拟合逻辑回归模型。
逻辑回归模型将通过对模型整体进行测试而成为标准配置。(实际上,由于您只有一个变量,因此该p值将与测试结果变量的p值相同。)该p值就是您所追求的。该模型将使您能够计算观察到的疾病的预测概率。一个接收器工作特性将告诉您如何在灵敏度和特异性会权衡,如果使用不同的阈值来预测概率转化为预测分类。由于预测概率将取决于测试结果变量,因此,如果您使用不同的测试结果值作为阈值,它还会告诉您如何权衡。
如果您对逻辑回归不十分熟悉,则可以从Internet上获得一些资源(除了上面链接的Wikipedia页面之外):
R
,加州大学洛杉矶分校统计帮助网站一般是优秀的,具有相关页面这里。summary(GLM.1)
应该会为您提供所需的信息,我想anova(GLM.1)
将它与没有实际需要的null模型进行比较。但是,您的方式肯定会有效,是的。
基本上,您要测试H0 =“ AUC等于0.5”。
实际上,这等效于说H0 =“两组中的等级分布相等”。
后者是曼-惠特尼(Wilcoxon)检验的原假设(例如,参见Gold,1999年)。
换句话说,您可以安全地使用Mann-Whitney-Wilcoxon检验来回答您的问题(例如,参见Mason&Graham,2002)。这正是Franck Dernoncourt提到的验证包所做的。
您可以从包验证中使用roc.area():
install.packages("verification")
library("verification")
# Data used from Mason and Graham (2002).
a<- c(1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990,
1991, 1992, 1993, 1994, 1995)
d<- c(.928,.576, .008, .944, .832, .816, .136, .584, .032, .016, .28, .024, 0, .984, .952)
A<- data.frame(a,d)
names(A)<- c("year", "p2")
# For model without ties
roc.area(A$event, A$p2)
它将返回 $p.value
[1] 0.0069930071
可以使用pROC比较两个ROC曲线roc.test()
。这也会产生一个p值。此外,roc(..., auc=TRUE, ci=TRUE)
在创建ROC对象时,使用将为您提供较低和较高的置信区间以及输出中的AUC,这可能会很有用。
以下是有效的示例代码,用于测试每加仑行驶的英里数或汽车的重量是否可以更好地预测其配备的变速箱类型(自动或手动):
library(pROC)
roc_object_1 <- roc(mtcars$am, mtcars$mpg, auc=T, ci=T) #gives AUC and CI
roc_object_2 <- roc(mtcars$am, mtcars$wt, auc=T, ci=T) #gives AUC and CI
roc.test(roc_object_1, roc_object_2) #gives p-value
看来,重量是比油耗好得多的预测指标。但是,这是将两条曲线进行比较,而不是将一条曲线与诸如0.5的数字进行比较。查看置信区间,看看它是否包含数字0.5,可以告诉我们它是否显着不同,但不会产生p值。