(步骤 1)使用我的预测模型,我为我的样本数据集预测了 1000 个分数。
(第 2 步)然后我对随机数据集使用相同的方法计算随机分数。我首先拟合随机分数的分布。
(第 3 步)对于我的每个预测分数(第 1 步中的 1000 个分数),我计算了获得比我的样本样本数据集的预测分数更大的分数的 p 值。因此,获得了我的样本数据集的 1000 个 p 值。
(步骤 4)由于真正的分类是已知的,通过查看真阳性的富集,我发现当通过 p 值 < 0.05 过滤样本数据集时。获得了最好的真阳性值,它代表了我的样本数据集中的大约 150 个数据。
然后,我想通过 ROC 的 AUC(敏感性与 1-特异性图)来测试我的模型的预测能力。
但是,我现在面临一个问题,我应该为 ROC 图包含所有 1000 个数据以获得 AUC,还是应该只包含这 150 个数据(p < 0.05)用于我的 AUC 分析?
当我说 p < 0.05 时,p 值随机获得一个高于我的预测分数的分数。一般来说,是不是意味着我50%的数据是偶然获得的?
编辑
感谢@AlefSin、@steffen 和@Frank Harrell 的评论。
为了便于讨论,我准备了一个示例数据集(x),如下所示:
- 我的模型预测分数(假设它是正态分布,均值 = 1,sd = 1)
- 随机集(假设也有 mean=1, sd=1)
- 每个预测分数的概率
- 类预测如下,分四栏
x <- data.frame (predict_score=c(rnorm(50,m=1, sd=1)))
x$random <- rnorm(50, m=1, sd=1)
x$probability <- pnorm(x$predict_score, m=mean(x$random),sd=sd(x$random))
x$class <- c(1,1,1,1,2,1,2,1,2,2,1,1,1,1,2,1,2,1,2,2,1,1,1,1,2,1,2,1,2,2,1,1,2,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,1,1)
然后,我对所有数据点进行了 AUC,如下所示:
library(caTools)
colAUC(x$predict_score, x$class, plotROC=T, alg=c("Wilcoxon","ROC"))
结果:
[,1]
1 vs. 2 0.6
假设当我按 p < 0.5 过滤数据集时,如果真阳性的丰富度更高(您的运行可能与我的不同,因为 rnorm 每次都会给出不同的结果),我对数据的子集进行 AUC,如下所示:
b <- subset(x, x$probability < 0.5)
colAUC(b$predict_score, b$class, plotROC=T, alg=c("Wilcoxon","ROC"))
结果:
[,1]
1 vs. 2 0.7401961
我的问题是:当我进行 AUC 分析时,是否必须对整个数据集进行分析,还是我们应该首先根据真阳性的丰富性或在进行 AUC 之前的任何标准来过滤数据集?