6

我目前正在尝试对已组合成一个大矩阵的多个数据集实施 Wilcoxon Ranksum 测试A,也就是说705x17635(即我想运行 ranksum 测试17,635时间。我所看到的唯一方法是如何做到这一点使用 for 循环是lapply,我运行为:

> lapply(data.frame(A), function(x) 
         wilcox.test(x,b,alternative="greater",exact=FALSE,correct=FALSE))

哪里b是我们的阴性对照数据并且是一个20000x1向量。然而,运行它需要很长时间(我在 30 分钟后放弃了),我想知道是否有更快的方法来运行它,特别是因为我可以在 MATLAB 中执行相同的过程(即使使用 forloop)大约五分钟,但由于各种原因我需要使用 R。

4

1 回答 1

2

有一些软件包试图解决这个问题。IE:

A <- matrix(rnorm(705*17635), nrow=705)
b <- rnorm(20000)

library(matrixTests)
res <- col_wilcoxon_twosample(A, b) # running time: 83 seconds

结果中的几行:

res[1:2,]

  obs.x obs.y obs.tot statistic    pvalue alternative location.null exact corrected
1   705 20000   20705   6985574 0.6795783   two.sided             0 FALSE      TRUE
2   705 20000   20705   7030340 0.8997009   two.sided             0 FALSE      TRUE

检查结果是否与wilcox.test()逐列执行相同:

wilcox.test(A[,1], b)

    Wilcoxon rank sum test with continuity correction

data:  A[, 1] and b
W = 6985574, p-value = 0.6796
alternative hypothesis: true location shift is not equal to 0
于 2019-09-19T19:04:24.373 回答