我在使用 Wilcoxon 计算一个样本置信区间时遇到了 JASP 统计包中的意外行为,并将其回溯到底层 R 函数
Wilcox.test
。简而言之,如果要求提供所需置信水平的置信区间,则报告的置信区间对应于下一个较低的可计算置信水平。更重要的是,用户没有被警告这一点,这很容易导致人们得出错误的结论。在对小样本进行操作时,这个问题尤为严重 (N < 10).
举个例子:
x <- c(1, 2, 3, 4, 5, 6, 7)
wilcox.test(x, conf.int = TRUE, conf.level = 0.95)
退货:
Wilcoxon signed rank exact test
data: x
V = 28, p-value = 0.01563
alternative hypothesis: true location is not equal to 0
95 percent confidence interval: 2 6
sample estimates:
(pseudo)median 4
但是,如果我没记错的话,[2,6] 是下一个低于要求值 0.95 的离散置信水平的置信区间,即 0.9219。因此,不知情的用户将报告过分狭窄(即错误的)95% CI。
在我看来,正确的行为应该是同时发布警告和与返回的 CI 关联的实际置信度。这样,用户将能够手动调整置信度,直到超过所需的阈值。在这种情况下,下一个高于 0.95 的离散置信水平恰好是 0.9531(见下文)。
有趣的是,
wilcox.test
的 R 手册指出:
对于小样本,可能无法实现非常高的置信区间覆盖。如果发生这种情况,将发出警告并替换为覆盖率较低的间隔。
由于上面的示例中没有提供警告,我怀疑这可能是错误或缺少功能。在提交错误报告之前,我将非常感谢对此的任何合格反馈,因为我可能完全错了!
背景
样本量为 7 的前三个可计算置信水平由(Geyer 2007;Stat 5102 注释:非参数检验和置信区间)给出:
n <- 7
m <- n * (n + 1) / 2
k <- 1:(m / 2)
conf.lev <- 1 - 2 * psignrank(k, n)
names(conf.lev) <- k
round(conf.lev[0.9 < conf.lev & conf.lev < 1], 4)
是:
1 2 3
0.9688 0.9531 0.9219
通过在
conf.level
中尝试不同的 wilcox.test(x, conf.int = TRUE, conf.level = 0.95)
值,很容易看出报告的 CI 默认为低于要求的下一个离散置信水平。