威尔科克森符号秩检验的 z 分数?

机器算法验证 r 威尔克森符号秩
2022-03-31 14:43:15

我想知道是否有人可以回答有关在 R 中运行 Wilcoxon 符号秩检验的问题。

在查找如何报告我们的分数时,它告诉我们报告 Z 分数。但是,在 R 中运行 Wilcoxon 符号秩检验会产生 V 分数,而不是 Z 分数。

这两个可以互换吗?还是分数不同?如果是这样,我将如何计算 z?

4个回答

给定样本中元素的数量(以及它们中的关系数),您可以将一个(测试统计数据,在您的情况下说是统计数据,尽管如下所示,这也适用于统计数据)另一个(相应的 z 分数)相当容易。VW

W 和 V 统计数据的公式广泛可用(此处此处)。事实上,当exact = FALSE计算 p-val 时,这些计算已经在 R 代码中完成,它们只是没有导出。

要让 R 导出这些统计信息,请将源代码复制到R 脚本。

在第 397-403 行,您会看到:

    RVAL <- list(statistic = STATISTIC,
                 parameter = NULL,
                 p.value = as.numeric(PVAL),
                 null.value = mu,
                 alternative = alternative,
                 method = METHOD,
data.name = DNAME)

将其更改为:

    RVAL <- list(statistic = STATISTIC,
                 parameter = NULL,
                 p.value = as.numeric(PVAL),
                 null.value = mu,
                 alternative = alternative,
                 method = METHOD,
                 z_val = z,
data.name = DNAME)

以不同的名称保存函数。wilcox_test然后,只要分数可用(当),就会返回它。例子;zexact = FALSEwilcox_test

set.seed(123);
wilcox_test(runif(4000), rnorm(100), exact = FALSE)$z_val
      W 
8.77776 

或者:

 set.seed(123);
wilcox_test(runif(4000), exact = FALSE)$z_val
       V 
54.77567 

请参阅BBR的第 7.2 节,其中讨论了 Wilcoxon 符号秩检验的简单、准确的检验统计量。 等于有符号秩的总和除以其平方和的平方根。这也很好地处理了关系。zz

不,它们不可互换。来自 R wilcox 检验的 Wilcoxon 符号检验中的是“分配给带正号差异的等级的总和”。V

让我通过使用 ZeaMays 数据向您展示。

首先,我们使用 wilcox.test 函数进行 Wilcoxon 签名测试。

 install.packages("HistData")
 library(HistData)
 data(ZeaMays)
 head(ZeaMays)
 wilcox.test(ZeaMays$cross, ZeaMays$self, paired=TRUE)

结果是:

   # Wilcoxon signed rank test
   # data:  ZeaMays$cross and ZeaMays$self
   # V = 96, p-value = 0.04126
   # alternative hypothesis: true location shift is not equal to 0

现在让我们手动计算 V

 diff<-ZeaMays$cross-ZeaMays$self #calculate paired difference
 diff
 rank_d<-rank(abs(diff))*sign(diff) #rank the difference and assign the sign

接下来我们计算“分配给带有正号的差异的等级总和”V

p_rank<-c() #postive ranks only
for (i in 1:15){
if (rank_d[i]>0){
p_rank[i]=rank_d[i]}
}
V<-sum(p_rank,na.rm=TRUE)
V
#[1] 96

您可以看到,这与 wilcox.test 的完全相同。V=96V

接下来什么是分数?Z

EH0(V)=n(n+1)4=15×164=60

VarH0(V)=n(n+1)(2n+1)24=15×16×3124

Z=\frac{VE (Z=VE(V)Var(V)N(0,1)

可以显示收敛到标准法线。Z

因此,您的分数为:z966015×16×3124=2.044663

对应两侧 p 值 0.04088813

  2*(1-pnorm(z,0,1))
  #p=0.04088813$

p 值略有不同,可能是因为 wilcox.test 使用了一些修正。

在进行 Wilcoxon 符号秩检验时,我执行以下操作以获得 Z 分数。

test<-wilcox.test(mtdata$x, mydata$y, paired=TRUE, exact=TRUE) 

print(test) # get the results of the Wilcoxon signed rank test

Zstat<-qnorm(test$p.value/2)  # obtain the Z-score 
abs(Zstat)/sqrt(20)