【问题标题】:normal approximation in R wilcox.test()R wilcox.test() 中的正态近似
【发布时间】:2015-05-21 10:10:12
【问题描述】:

我对 wilcox.test() 函数中的正态近似有疑问。

我直观地期望这些计算的结果是相同的:

vec1 <- c(10,11,12)
wilcox.test(vec1,rep(0,10),exact=FALSE,correct = FALSE)
wilcox.test(vec1,c(runif(8),0,0),exact=FALSE,correct=FALSE)

但这远非如此。 (0.0006056 与 0.01112)

来自 wilcox.test 文档:

“如果样本包含的有限值少于 50 个并且没有关联,则计算精确的 p 值。否则,使用正态近似值。”

我不清楚如何根据文档计算正态近似值。 网上搜了一下(比如wiki,Mann-Whitney U-test),好像可以这样计算:

U = sum of ranks of vec1 (-1 in R)
mU = length(vec1)*length(vec2)/2
sdU = sqrt(length(vec1)*length(vec2)*(length(vec1)+length(vec2)+1)/12)
z = (U-mU)/sdU
pval = 2*pnorm(-abs(z)) 

但由于本例中 U 和向量长度相同,这显然不是 R 计算正态逼近的方式。

所以我的问题是如何通过 R 中的 wilcox.test() 计算正态近似值。

【问题讨论】:

    标签: r


    【解决方案1】:

    与上述公式的不一致是由于在方差计算中考虑到了平局。下面是wilcox.test 代码取自 R source

    NTIES <- table(r)
    z <- STATISTIC - n.x * n.y / 2
    SIGMA <- sqrt((n.x * n.y / 12) *
        ((n.x + n.y + 1) - sum(NTIES^3 - NTIES) 
        / ((n.x + n.y) * (n.x + n.y - 1))))
    

    其中n.xn.y 是第一个和第二个样本的长度,r 是组合样本的秩向量。

    顺便把varU改成其他名字,因为你取平方根。

    【讨论】:

    • 感谢您澄清并指出 sd 与方差不同! (已更改)
    猜你喜欢
    • 2014-05-24
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多