DESeq2 的名称在 vegan adonis 出错后发生变化

names of DESeq2 change after error with vegan adonis

我在 deseq2 输出的命名(对比)方面遇到了这个问题,其中命名输出是不可重现的。通常比较看起来像:variable_level2_vs_level1 ("treat_b_vs_a") 但有时它会 return as variable1 ("treat1")。我也在其他网站上看到过这个问题的帖子,但我从未找到合适的解决方案(也没有找到原因)。

到目前为止,这是一个非常难以捉摸的问题,因为我无法轻易重现它。 但今天我设法解决了这个问题,并提出了导致以下问题的最小可重现代码。

仅当我 运行 具有不正确对比度的不良素食阿多尼斯模型时才会出现此问题。 也许有人可以帮助我更好地理解问题的根源

library(vegan)
library(DESeq2)

mat <- matrix(sample(1:1000), ncol=10)
var$treat <- c(rep("a",5), rep("b",5))
var$y <- c(rep("a",10))

dds <- DESeq2::DESeqDataSetFromMatrix(mat, colData = var, design = ~ treat)
dds = DESeq(dds, test="Wald", fitType="parametric")
resultsNames(dds)

这给出了 treat_b_vs_a,但是如果我 运行 它在 adonis 模型之后再次出现:

adonis(mat~var$y)

dds <- DESeq2::DESeqDataSetFromMatrix(mat, colData = var, design = ~ treat)
dds = DESeq(dds, test="Wald", fitType="parametric")
resultsNames(dds)

我得到治疗1。

因此,以某种方式触发 adonis 中的对比度错误会导致 DESeq 对对比度的处理不正确。

简短的回答是,当您 运行 adonis 函数时,对比度选项会发生变化。您可以查看此 post 以获取有关对比度的信息。下面是重现你的错误,首先我们将默认选项存储在一个新的设置上:

library(DESeq2)
library(vegan)
default_options = options()

mat <- matrix(sample(1:1000), ncol=10)
da = data.frame(treat = c(rep("a",5), rep("b",5)),
                y= c(rep("a",10)))

dds <- DESeq2::DESeqDataSetFromMatrix(mat, colData = da, design = ~ treat)
dds = DESeq(dds, test="Wald", fitType="parametric")

以上是带名字的结果。我们可以看到环境选项和默认设置是一样的,

options()$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly"

default_options$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly"

现在 运行 adonis 在示例数据集上,一切正常:

data(dune)
data(dune.env)
adonis(dune ~ dune.env$Management)

        unordered           ordered 
"contr.treatment"      "contr.poly"

运行 您的示例会引发错误:

adonis(mat~da$y)
options()$contrasts
[1] "contr.sum"  "contr.poly"

可以看到现在改了。而 运行ning DESeq2 会给你你看到的结果。你需要改回来:

options(contrasts = c(unordered = "contr.treatment",ordered = "contr.poly"))

dds <- DESeq2::DESeqDataSetFromMatrix(mat, colData = da, design = ~ treat)
dds = DESeq(dds, test="Wald", fitType="parametric")

resultsNames(dds)
[1] "Intercept"    "treat_b_vs_a"

我认为您遗漏了一条重要信息:在您的示例中,adonis 失败:

> adonis(mat ~ da$y)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

您的 y 是常量(只有一个值),无法使用。的确,在 vegan 2.5-x 中我们确实设置了对比度(这是一个用户选项),但我们稍后会重置它们。但是,如果 adonis 由于输入无效而失败,则不会发生此重置。

这可以修复,这样我们即使在失败时也能重置对比度,但未来的版本不会设置对比度,因此我不打算只解决这个问题。