Wilcoxon 秩和统计量 U 的精确分布

机器算法验证 分布 非参数 描述性统计 wilcoxon-mann-whitney 检验
2022-03-27 09:17:18

对于正在考虑的大量样本,假设秩和统计量 U 的分布是正常的。确切的分布是什么?我想比较并有时融合各种测试的结果,其中一些测试可能没有大量样本。我想有一个确切的分布,例如n1n2<30. 是否有可以使用或计算的封闭形式?

更新:很明显,人们引用 Streitberg, B. 和 J. Rohmel, Exact distributions for permutation and rank tests: An Introduction to some recent publishing algorithms, Statist。软件通讯 1 (1986) 10-17。对于确切的分布,但我还没有找到论文或结果。

2个回答

AFAIK,分发没有封闭的形式。使用 R,获得精确分布的天真实现对我来说最多可以达到至少 12 个组大小 - 在使用 Windows7 64 位和当前 R 的 Core i5 上花费不到 1 分钟。对于 R 自己在 C 中使用的更聪明的算法中pwilcox(),可以查看源文件 src/nmath/wilcox.c

n1 <- 12                                # size group 1
n2 <- 12                                # size group 2
N  <- n1 + n2                           # total number of subjects

现在为组 1 中的行列生成所有可能的情况。这些都是(Nn1)来自数字的不同样本1,,N大小的n1. 然后计算每个案例的秩和(= 检验统计量)。将这些秩和制表得到相对频率的概率密度函数,这些相对频率的累积和就是累积分布函数。

rankMat <- combn(1:N, n1)               # all possible ranks within group 1
LnPl    <- colSums(rankMat)             # all possible rank sums for group 1
dWRS    <- table(LnPl) / choose(N, n1)  # relative frequencies of rank sums: pdf
pWRS    <- cumsum(dWRS)                 # cumulative sums: cdf

将精确分布与渐近正确的正态分布进行比较。

muLnPl  <- (n1    * (N+1)) /  2         # expected value
varLnPl <- (n1*n2 * (N+1)) / 12         # variance

plot(names(pWRS), pWRS, main="Wilcoxon RS, N=(12, 12): exact vs. asymptotic",
     type="n", xlab="ln+", ylab="P(Ln+ <= ln+)", cex.lab=1.4)
curve(pnorm(x, mean=muLnPl, sd=sqrt(varLnPl)), lwd=4, n=200, add=TRUE)
points(names(pWRS), pWRS, pch=16, col="red", cex=0.7)
abline(h=0.95, col="blue")
legend(x="bottomright", legend=c("exact", "asymptotic"),
       pch=c(16, NA), col=c("red", "black"), lty=c(NA, 1), lwd=c(NA, 2))

在此处输入图像描述

Caracal 的回答很好,但重要的是要考虑到大样本近似对于相同的样本大小最有效,而对于不平衡的样本可能表现得更差。

您(和我)正在寻找的论文是比 Wilcoxon(Jonckheere-Terpstra、Umbrella 测试等)更一般的统计数据。

Mehta 在 1984 年左右有一些论文可以加快分布的计算,但我同意 Caracal 的观点,除非您的样本非常大,否则 pwilcox() 应该为您解决问题。

此外,请考虑查看 Wilcoxon 的概率生成函数,它确实存在封闭形式的解决方案,并且早在 Jonckheere 的原始论文中就出现了,并且在此之后出现了很多次。这可能有用也可能没用,具体取决于您的应用程序。