boot() 函数中的 Wilcoxon 测试

机器算法验证 r 引导程序 奥克
2022-03-28 20:13:59

我正在尝试使用 AUC(又名 c 统计量)作为我的性能衡量标准的 boot() 函数来对逻辑 glm 模型进行内部验证。我的问题是,根据我使用的数据集,有时该函数会收到“50 个或更多警告”,所有这些都是这种类型:

Warning messages:
1: In wilcox.test.default(pred[obs == 1], pred[obs == 0],  ... :
  cannot compute exact p-value with ties

即使该函数产生这些警告,它也会产生相关的引导统计信息。

我不确定如何处理这种情况,因为我什至不知道 boot() 在什么上下文中调用 wilcox.test。文档 ?boot 没有提到使用 Wilcoxon 测试。

以下是生成这些警告的示例:

data(nuclear)
library(verification)

AUC = function(data, i) {
    d = data[i,]
    rs1 = glm(ne ~ cost, family=binomial(link="logit"), data=d)
    return(roc.area(d$ne, predict(rs1))$A)
}

library(boot)
boot(data=nuclear, statistic=AUC, R=600)

还有一个例子:

data(melanoma)

AUC = function(data, i) {
    d = data[i,]
    rs1 = glm(ulcer ~ thickness, family=binomial(link="logit"), data=d)
    return(roc.area(d$ulcer, predict(rs1))$A)
}

boot(data=melanoma, statistic=AUC, R=600)

(如果这个问题属于 Stack Overflow 而不是这里,我深表歉意——不确定这个问题是统计性还是程序性。)

1个回答

这不是boot调用 Wilcoxon 测试,而是verification::roc.area可以通过查看在线帮助来检查:

产生的 P 值与 Mann-Whitney U 统计量有关。p 值是使用 wilcox.test 函数计算的,该函数自动处理关系并对大值进行近似

(或直接通过查看源代码,例如verification:::roc.area。)

当您使用带替换的引导程序时,我们知道每次运行都不会使用大约三分之一的样本,因此您自然会引入 tie 和 rank 将不再是唯一的,这就是wilcox.test抱怨的地方。该函数将返回一个近似的值(使用渐近正态分布)。p

作为旁注,您可能想查看rms包,其中包含您估计、校准和验证 GLM 所需的一切(使用引导技术等)。