你的既定目标是评估是否
1 往往排名较低(即出现较早)
这不是通过运行来衡量的,而是通过排名来衡量的。 使用Wilcoxon(又名Mann-Whitney)测试。
这个测试在概念上和计算上都很简单,但相当强大。数据使用数字按出现顺序排列1,2,…,n(在哪里n=35在这种情况下)。每组内的排名相加:总和n0=18等级对应于零和总和n1=17等级对应的。为了补偿不同数量的 0 和 1,从每个中减去可能的最小总和(等于1+2+⋯+ni=(ni+12)团体用i,i=0,1)。如果那些真的倾向于首先出现,那么它们调整后的秩和将大大小于零的秩和。这可以通过假设统计量的渐近正态分布转换为 Z 分数,或者可以通过排列分布找到更准确的 p 值。下面的代码说明了这两种方法。
对于这些数据,零出现在等级
9 11 17 18 20 21 22 23 24 25 26 27 28 29 30 32 33 35
而那些出现在队伍中
1 2 3 4 5 6 7 8 10 12 13 14 15 16 19 31 34
调整后的等级总和为U=47. 正态近似估计其 p 值0.0002339. 在本案中,这个小值证明了这个测试的力量。估计有一百万次重复的置换分布给出的 p 值为0.000264. 它是准确的±0.000016(这是一个标准错误)。任一 p 值都为您提供了充分的基础来拒绝零和一随机散布在整个序列中的零假设。
这是排列分布的直方图U对这些数据进行统计。

红色垂直线标记了实际的测试统计量。这显然是极端的。
虽然看起来可能不像,但这个测试是作为双尾测试进行的(通过取两个调整后的秩和中较小的一个)。它测试排名是否有任何差异,而不仅仅是排名是否更早。
下面是R制作图形并计算 p 值的(可重现的)代码。这个大型模拟运行大约需要十秒钟。(通常只需要几千次重复。一百万次用于表明在这种情况下正常近似效果很好。)减少第replicate25 行的第一个参数以实现更快的运行时间。
x <- c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0)
#
# Wilcoxon test.
#
Wilcoxon <- function(x) {
n <- length(x)
n0 <- sum(x==0)
n1 <- sum(x==1)
u0 <- sum((1:n)[x==0]) - choose(n0+1, 2)
u1 <- sum((1:n)[x==1]) - choose(n1+1, 2)
u <- min(u0, u1)
m.u <- n0 * n1 / 2
s.u <- sqrt(n0 * n1 * (n+1) / 12)
Z <- (u - m.u)/s.u
p <- pnorm(Z)
return(c(U=u, Z=Z, p.value=p))
}
stats <- Wilcoxon(x)
#
# Permutation test.
#
set.seed(17)
U <- replicate(1e6, Wilcoxon(sample(x, length(x)))["U"])
hist(U, main="Permutation Distribution", )
abline(v = stats["U"], lwd=2, col="Red")
#
# Summary.
#
message("Normal approximation: ", signif(stats["p.value"], 4),
" Permutation estimate: ", signif(mean(c(1, U <= stats["U"])), 4),
" +/- ", signif(sd(c(1, U <= stats["U"])) / sqrt(1 + length(U)), 2))