我在deseq2输出的命名(对比)中遇到了这个问题,在这种情况下,输出的命名是不可复制的。通常情况下,比较应该是: variable_level2_vs_level1 ("treat_b_vs_a"),但有时它会以variable1 ("treat1")的形式返回。我也在其他网站上看到过这个问题的帖子,但我从来没有找到一个像样的解决方案(也没有找到原因)。
直到现在,这一直是一个非常难以捉摸的问题,因为我无法轻易复制它。但今天,我设法弄明白了,并提出了一个最低限度的可重复代码,这将导致下面的问题。
只有当我运行一个不正确对比的纯素adonis模型时,问题才会发生。也许有人能帮我更好地理解问题的根源
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)我得到了treat1。
因此,用adonis中的对比度触发一个错误会导致DESeq不正确地处理对比度。
发布于 2021-02-14 20:57:27
我认为您遗漏了一条重要信息:在您的示例中,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是常量(只有一个值),无法使用。的确,在纯素 2.5-x中,我们确实设置了对比(这是一个用户选项),但我们稍后会重新设置它们。但是,如果adonis由于输入无效而失败,则不会发生此重置。
这是可以修复的,以便我们重置对比,即使在失败,但未来的版本没有设置对比,因此,我没有计划只解决这个问题。
发布于 2021-02-13 18:22:50
简单的回答是,当运行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"https://stackoverflow.com/questions/66187422
复制相似问题