r语言 - 使用素食阿多尼斯错误后DESeq2的名称发生了变化



我对deseq2输出的命名(对比)遇到了这个问题,其中对输出的命名是不可重复的。通常情况下,比较如下:variable_level2_vs_level1 ("treat_b_vs_a")但有时它会返回变量1 ("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)

我得到治疗。

因此,在adonis中触发对比度错误会导致DESeq对对比度的错误处理。

我想你漏掉了一个重要的信息:在你的例子中,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是恒定的(只有一个值),不能使用。在vegan2.5-x我们设置对比度(这是一个用户选项),但我们稍后重置它们。但是,如果adonis由于无效输入而失败,则不会进行此复位。

这个可以修复,这样我们就可以在失败时重置对比度,但是未来的版本不会设置对比度,因此我没有计划修复这个问题。

简短的回答是,在运行adonis函数时更改了对比度选项。你可以在这篇文章中看到关于对比度的信息。下面是重现您的错误,首先我们将默认选项存储在一个新的设置中:

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"

你可以看到它现在被改变了。运行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"

最新更新