我想知道是否有人可以回答有关在 R 中运行 Wilcoxon 符号秩检验的问题。
在查找如何报告我们的分数时,它告诉我们报告 Z 分数。但是,在 R 中运行 Wilcoxon 符号秩检验会产生 V 分数,而不是 Z 分数。
这两个可以互换吗?还是分数不同?如果是这样,我将如何计算 z?
我想知道是否有人可以回答有关在 R 中运行 Wilcoxon 符号秩检验的问题。
在查找如何报告我们的分数时,它告诉我们报告 Z 分数。但是,在 R 中运行 Wilcoxon 符号秩检验会产生 V 分数,而不是 Z 分数。
这两个可以互换吗?还是分数不同?如果是这样,我将如何计算 z?
给定样本中元素的数量(以及它们中的关系数),您可以将一个(测试统计数据,在您的情况下说是统计数据,尽管如下所示,这也适用于统计数据)另一个(相应的 z 分数)相当容易。
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
。然后,只要分数可用(当),就会返回它。例子;exact = FALSE
wilcox_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 符号秩检验的简单、准确的检验统计量。 等于有符号秩的总和除以其平方和的平方根。这也很好地处理了关系。
不,它们不可互换。来自 R wilcox 检验的 Wilcoxon 符号检验中的是“分配给带正号差异的等级的总和”。
让我通过使用 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
接下来我们计算“分配给带有正号的差异的等级总和”。即
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 的完全相同。
接下来什么是分数?
Z=\frac{VE (
即 可以显示收敛到标准法线。
因此,您的分数为:
对应两侧 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)