我正在寻找一种方法来鉴定在各种条件下都非常稳定的基因。换句话说,与标准DE分析相反。
标准DE将基因分为两类:一方面发生显着变化,另一方面则是“其余”。
但是,“其余”既包含实际上不发生变化的基因,也包含对其变化信心不足以称其为差异的基因。
我想要的是找到那些没有变化的东西,换句话说,就是那些我可以确信地说我的情况没有变化的东西。
我知道在DEseq中可以通过提供替代的零假设来实现这一点,但是我必须将此作为额外的步骤集成到已经使用limma的其他人的管道中,我想坚持下去。 理想情况下,我想以类似的方式测试DE和不变基因,这在概念上类似于改变DEseq中的H0。
目前要测试DE的代码如下:
# shaping data
comparison <- eBayes(lmFit(my_data, weights = my.weights^2))
results <- limma::topTable(my_data, sort.by = "t",
coef = 1, number = Inf)
作为示例,我很喜欢以下内容,但是从概念上讲,任何事情都可以。
comparison <- eBayes(lmFit(my_data, weights = my.weights^2), ALTERNATIVE_H0 = my_H0)
我知道treat()允许通过提供倍数变化来指定间隔为零的假设,并引用该手册:“它使用间隔为零的假设,其中间隔为[-lfc,lfc]”。
但是,这仍然测试从0附近的中心间隔开始的变化,而我要测试的间隔是[-inf,-lfc] + [lfc,inf]。
我有没有其他选择?
谢谢!
答案 0 :(得分:1)
您可以尝试使用logFC的置信区间来选择您的基因,但是我必须说,这很大程度上取决于您拥有的样本数量以及生物学差异有多强。下面,我展示了一个示例如何实现:
首先,我们使用DESeq2生成示例数据集,我们设置betaSD以使我们有一小部分应显示条件之间差异的基因
library(DESeq2)
library(limma)
set.seed(100)
dds = makeExampleDESeqDataSet(n=2000,betaSD=1)
#pull out the data
DF = colData(dds)
# get out the true fold change
FC = mcols(dds)
现在我们可以在此数据集上运行limma-voom
V = voom(counts(dds),model.matrix(~condition,data=DF))
fit = lmFit(V,model.matrix(~condition,data=DF))
fit = eBayes(fit)
# get the results, in this case, we are interested in the 2nd coef
res = topTable(fit,coef=2,n=nrow(V),confint=TRUE)
因此,有一个选项可以收集函数topTable中倍数变化的95%置信区间。我们这样做并与真实的FC进行比较:
# fill in the true fold change
res$true_FC = FC[rownames(res),"trueBeta"]
我们可以看看估计值和真实值有何不同:
plot(res$logFC,res$true_FC)
因此,假设我们要寻找基因,我们确信倍数变化<1,我们可以做到:
tabResults = function(tab,fc_cutoff){
true_unchange = abs(tab$true_FC)<fc_cutoff
pred_unchange = tab$CI.L>(-fc_cutoff) & res$CI.R <fc_cutoff
list(
X = table(pred_unchange,true_unchange),
expression_distr = aggregate(
tab$AveExpr ~ pred_unchange+true_unchange,data=tab,mean
))
}
tabResults(res,1)$X
true_unchange
pred_unchange FALSE TRUE
FALSE 617 1249
TRUE 7 127
以上结果告诉我们,如果将其限制为95%置信度在+/- 1 FC之内的基因,我们将获得134次命中,其中7次为假(实际倍数变化> 1)。
我们之所以错过某些真正的不变基因,是因为它们的表达水平较低,而我们正确预测的大多数不变基因却具有高表达:
tabResults(res,1)$expression_distr
pred_unchange true_unchange tab$AveExpr
1 FALSE FALSE 7.102364
2 TRUE FALSE 8.737670
3 FALSE TRUE 6.867615
4 TRUE TRUE 10.042866
我们可以降低FC,但最终也会减少基因:
tabResults(res,0.7)
true_unchange
pred_unchange FALSE TRUE
FALSE 964 1016
TRUE 1 19
置信区间很大程度上取决于您拥有的样本数量。因此,对于一个数据集,取值为1的临界值将对另一个数据集有所不同。
因此,我想说的是,如果您手头有一个数据集,则可以首先在该数据集上运行DESeq2,获取均值方差关系,然后像我一样模拟数据,以大致猜出倍数变化截止点是可以的,您可能会得到多少,然后从那里做出决定。