【问题标题】:Can I use a subset of results from DESeq2 to calculate Bray-Curtis dissimilarity and then plot a PCoA?我可以使用 DESeq2 的结果子集来计算 Bray-Curtis 相异度,然后绘制 PCoA 吗?
【发布时间】:2019-11-16 23:56:38
【问题描述】:

在比较疾病和对照之间细菌基因的差异表达,然后计算 Bray-Curtis 相异度并随后绘制 PCoA 时,我无法使用来自 DESeq2 的结果。

我的 DESeq2 输出已保存为数据框。它由 6000 行(基因名称)和两列组成,一列用于 p 值(均 1。数据框称为 siggenes1。在运行 Bray-Curtis 和 PCoA 之前,我是否需要标准化我的数据?我认为这已经通过 DESEq2 完成,但是查看我可以提供的代码,我在执行 DESeq2 时没有包含 normalisation=T。

或者我需要在使用 DESeq2 之前使用扫描函数对初始数据进行归一化吗?

我的 Bray-Curtis 差异代码

 vegDistOut=vegdist(t(siggenes1),"bray")

上面得到 1 个值,即 0.995。现在我有点迷茫,我将如何设计用于绘制 PCoA 的代码,因为我的下一段代码是错误的。

pcoaOut=pcoa(vegDistOut)

数组中的错误(STATS,dims[perm]):“dims”的长度不能为 0

由于上述步骤,我无法继续。

如果有人可以帮忙,我将不胜感激。 谢谢你

【问题讨论】:

  • 嗨@Adam9,我真的不太明白你想要做什么。如果您使用 vegdist,您正在计算样本之间的距离。好的,如果您使用的是基因表达,那么您应该输入标准化的基因表达表?
  • 嗨@StupidWolf,我的基因表达表是一个csv,其中有超过100000个基因作为行,然后是8列,4个疾病和4个对照。数据可以描述为零膨胀负二项分布。从这个意义上说,我已经看到用于“规范化”表的扫描函数,一些代码将是 totalgenecount = colSums(gct) gctnorm = sweep(gct, MARGIN=2, totalgenecount/10^9, FUN="/") 与分析在此之后使用组之间的 t 检验完成(我使用 DESeq2 代替差异基因表达)....
  • 想知道在运行 DESeq2 之前是否需要完成这样的标准化步骤?我知道在 PCA 或 PCoA 之前我需要确保数据标准化,我想知道这是否可能是我的下游分析尝试不起作用的原因。

标签: r


【解决方案1】:

欢迎使用 StackOverflow。

Bray-Curtis 相似度通常用于确定两个样本的物种组成 的相似程度。典型的输入包括来自软件的每个样本的物种计数,例如用于高通量数据的krakenclark,或者 - 在 16S 的情况下 - Qiime2: 或dada2

|     Genus     |  Sample 1   |  Sample 2  |
|---------------|-------------|------------|
|  Pseudomonas  |     200     |    100     |
| Streptococcus |      50     |     20     |

您当然可以为基因表达数据计算此指标,但这不是通常会做的事情,我需要更多关于您想要这样做的原因信息。

据我了解您的描述,您有兴趣在 PCA 图中可视化样本表达式之间的距离。使用 DESeq2,您可以:

library(DESeq2)

# Get a DESeqDataSet from somewhere
dds <- DESeqDataSetFrom...(...)

# You don't need to run `DESeq()` on the dds for a PCA, just transform your data 
# into a homoscedastic dataset with either VST or rlog
vsd <- varianceStabilizingTransformation(dds, blind=TRUE)
rld <- rlogTransformation(dds, blind=TRUE)

# 'xxx' here takes the place of your condition of interest from your 
# design data frame
plotPCA(vsd, intgroup=c('xxx'))

好吧,假设您实际上希望在 PCA 中包含基因,而不是样本。在这种情况下,您可以从 VST 或 rlog 对象中获取转换后的表达式值并自己运行 PCA 代码:

library(DESeq2)
library(ggplot2)

# Get gene expression post VST
vst_expr <- assay(vsd)
# Or - if you want to select some genes
vst_expr <- assay(vsd)[c(...), ]

# Perform PCA
pca <- prcomp(vst_expr)

# Calculate explained % variation
pvar_expl <- round(((pca$sdev ^ 2) / sum(pca$sdev ^ 2)) * 100, 2)

ggplot(as.data.frame(pca$x), aes(x = PC1, y = PC2)) + 
  geom_point() +
  xlab(paste("PC1: ", pvar_expl[1], "%")) +
  ylab(paste("PC2: ", pvar_expl[2], "%"))

最后一点,在进行探索性数据分析之前,通常不建议只选择一些基因,尤其是按照您的想法。您已经测试了这些基因在 DESeq2 中的差异表达,所以您知道它们是不同的。使用 PCA 或热图执行盲可视化要好得多。关注 this 了解有关 DESeq2 的所有信息并查看 https://support.bioconductor.org/

【讨论】:

  • 嗨@adam9,这是你需要的吗?您可以将 t(assay(rld)) 输入 vegdist 并从那里继续
  • 非常感谢您的帮助。我将需要运行代码并稍微查看一下输出。请你告诉我是否可以在疾病与对照中显着表达的基因子集上使用 vegdist(我来自 DESeq2 输出的数据框包含 250,000 个基因中的大约 6000 个基因,这些基因在疾病中表达更多与控制),并且这些转换仍然适用吗?对不起,如果这些是愚蠢的问题。我被建议只看最差异表达的那些。非常感谢您的回复。
  • IMO 在删除恒定数据后计算相似性度量(例如 Bray-Curtis)有点不合情理。这样看:从 DESeq2 出来的所有 SDE 基因都已知在对照和处理方面是不同的,那么你的相似性指标会告诉你什么?当然,当只查看样本之间的变化时,您的样本会有所不同。由于 SO 不鼓励长评论链,我很乐意在其他地方讨论您的实验设置,一旦找到解决方案,我们就会在这里报告
  • @BastianSchiffthaler 使用 DF = data.frame(id=colnames(gctab),type=rep(c("ctrl","disease"),each=3)) dds = DESeqDataSetFromMatrix(gctab, DF,~type) vsd
  • 如果您可以上传可重现的工作流程或您的数据,那就太好了。您得到的错误是因为应该使用严格的正值来计算 BC 相似度,但 VST 会产生负值。您可以assay(vsd) + min(assay(vsd)),因为您的数据现在是同调的并且(伪)-log2 转换。这基本上只是移动零偏移。只是不要试图将价值与任何“现实世界”的意义联系起来。由于您的数据是零膨胀的,因此请查看例如:bioconductor.org/packages/release/bioc/html/zinbwave.html 进行预处理而不是 VST
猜你喜欢
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多