【问题标题】:Automate Mann Whitney U test for huge dataset自动化 Mann Whitney U 测试以获取大量数据集
【发布时间】:2019-05-16 18:03:04
【问题描述】:

我是一个 R 新手,如果这个问题对你们来说太琐碎了,我提前道歉,但我完全在我的脑海里。

在尝试学习 R 时,我发现自己面临一个问题,即创建一个重复循环来逐一执行 Mann Whitney U 测试组 1 与组 2 的多个变量。下面,一个例子。 (https://i.redd.it/2c0429k4y3y21.png)

即使我可以从 A 到 Z 逐个执行一个变量的测试,但在我正在测试的真实数据中,我有超过 10000 个变量,因此我必须找到一种方法来 1)自动化测试; 2) 生成一个包含所有结果 p 值的文件。

有人会这么好心地帮助我完成这项任务吗?我非常愿意花尽可能多的时间来学习如何在 R 中编码,但我需要一点点推动。

谢谢

【问题讨论】:

  • 您要测试哪些变量对?
  • 嗨,欢迎来到堆栈溢出。我不清楚您的测试如何与您的数据相关。您想测试Sex 中组的所有AnatomyAstronomy 等列中的值吗?此外,如果我们可以使用您的数据的 sn-p,那么回答这个问题会更容易,您可以通过发布 dput(head(your_data)) 的输出来创建它。
  • 你能生成数据吗?获取您的数据,对其进行子集化,然后按照@teunbrand 的建议在数据名周围使用dput
  • 感谢您对我的问题的蹩脚描述。我打算做的是测试两组(突变型与野生型)以发现某些基因表达水平的差异。 dput(head()) 的输出如下
  • structure(list(genotype = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Mutant", "Wildtype"), class= "factor" ),X312 = C(0,0,927911044,7.604660497,0,8.469434699),X1.Sep = C(9.296165425,7.994991396,10.59396298,10.59396214,10.2554214,7063356173),X2.Sep = C(12.0207487,10.92364072,11.22504751, 11.207482,11.91886469,11.64801165),X1.DEC = C(0L,0L,0L,0L,0L,0L),X128UP = C(8.051389852,8.437100325,0,8.05631996,0,8.993819702),X140UP = C(7.859521468,7.638131579,7.638131579,7.638131579,7.638131579,7.638131579 , 0, 8.567090791, 8.7672994, 10.219634)), row.names = c(NA, 6L), class= "data.frame")

标签: r


【解决方案1】:

由于您提供的数据只有一个因子水平,因此我添加了三个“Wildtypes”以使代码正常工作。

gen <- structure(list(genotype=structure(c(1L, 1L, 1L, 1L, 1L, 1L),
    .Label=c("Mutant", "Wildtype"), class="factor"), X312=c(0, 0, 9.927911044,
    7.604660497, 0, 8.469434699), X1.Sep=c(9.296165425, 7.994991396, 10.3226941,
    10.59396298, 10.2554214, 7.963356173), X2.Sep=c(12.0207487, 10.92364072,
    11.22504751, 11.2077482, 11.91886469, 11.64801165), X1.Dec=c(0L, 0L, 0L, 0L, 0L,
    0L), X128up=c(8.051389852, 8.437100325, 2.9382856, 9.05631996, 0, 8.993819702),
    X140up=c(7.859521468, 7.638131579, 0, 8.567090791, 8.7672994, 10.219634)),
    row.names=c(NA, 6L), class="data.frame")


gen[1:3, 1] <- factor(rep(2, 3), label="Wildtype")

我们可以像这样对一列执行 Mann Whitney U 检验:

# for column 6
wilcox.test(gen[gen$genotype == "Mutant", 6], 
            gen[gen$genotype == "Wildtype", 6], exact=FALSE)$p.val

我们可以通过使用sapply() 简单地循环列索引(不包括第一列)来对所有列执行它,如下所示:

sapply(2:ncol(gen), 
  function(x) {
      wilcox.test(gen[gen$genotype == "Mutant", x], 
                  gen[gen$genotype == "Wildtype", x], exact=FALSE)$p.val
  }
)
# [1] 1.00000 1.00000 1.00000     NaN 0.66252 0.08085

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2018-08-09
    • 1970-01-01
    • 2019-02-15
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2021-05-17
    相关资源
    最近更新 更多