美文网首页
用soupX对环境基因表达做估量和矫正

用soupX对环境基因表达做估量和矫正

作者: Ace423 | 来源:发表于2020-12-28 07:02 被阅读0次

基于液滴的单细胞捕获方法通常其单细胞液滴也会捕获环境基因(ambient RNA)。环境基因的表达由于并不来自barcode细胞,会导致基因表达矩阵计数不准确,更会影响用标记基因鉴定细胞群。SoupX (Young et al.) 可以对环境基因表达做估量并从表达基因表达矩阵中去除其影响。

首先加载R包和数据集 (数据下载地址:https://support.10xgenomics.com/single-cell-gene-expression/datasets/2.1.0/pbmc4k

library(cowplot)
library(Seurat)
library(SoupX)
library(Matrix)

# Load data
scPBMC = load10X("./PBMC_4k/")

问题的提出如下图, IGKC作为B细胞特异表达的基因不仅在B细胞中(上方细胞群),在其他细胞群中多个细胞中其表达量不为零。

dd = scPBMC$metaData[colnames(scPBMC$toc), ]

dd$clusters <- as.factor(dd$clusters)

dd$IGKC = scPBMC$toc["IGKC", ]
dd$IGKC <- as.integer(dd$IGKC)
gg = ggplot(dd, aes(tSNE1, tSNE2)) + geom_point(aes(colour = IGKC > 0), size=1)
plot(gg)
image.png

首先我们用自动的方法对环境基因表达量做估测, 可以看到环境基因表达的预估值为0.058。

# Estimate the contamination fraction - automatic
scPBMC = autoEstCont(scPBMC)
scPBMC$autoEst$rhoEst = scPBMC$fit$rhoEst

#248 genes passed tf-idf cut-off and 177 soup quantile filter.  Taking the top 100.
#Using 427 independent estimates of rho.
#Estimated global rho of 0.06
image.png

其次我们用手动的方法,这时需要指定用来估测环境基因表达的基因。这里我们选取了IG家族基因。还需要用estimateNonExpressingCells函数选取用来评估背景表达的细胞,如下图中所示绿色边框的细胞为选定的细胞。可以看到手动方法得到的预估值为0.055, 和自动方法的到的值非常接近。

# Estimate the contamination fraction - manual 
igGenes = c("IGHA1", "IGHA2", "IGHG1", "IGHG2", "IGHG3", "IGHG4", "IGHD", "IGHE", 
            "IGHM", "IGLC1", "IGLC2", "IGLC3", "IGLC4", "IGLC5", "IGLC6", "IGLC7", "IGKC")

ute = estimateNonExpressingCells(scPBMC, nonExpressedGeneList = list(IG = igGenes) )

scPBMC = calculateContaminationFraction(scPBMC,nonExpressedGeneList= list(IG = igGenes),useToEst=ute,forceAccept = TRUE)

#Estimated global contamination fraction of 5.51%
image.png

最后我们用adjustCounts函数得到修正后的矩阵。

# corrected count matrix
out = adjustCounts(scPBMC,setNames(scPBMC$metaData$clusters,rownames(scPBMC$metaData)),verbose=2, roundToInt = TRUE)

我们可以检查一下修正后的效果, 如下图所示,可以看到除了B细胞群,其他细胞群里IGKC的表达的细胞大幅度减少了。

standard10X = function(dat,nPCs=50,res=1.0,verbose=FALSE){
  srat = CreateSeuratObject(dat)
  srat = NormalizeData(srat,verbose=verbose)
  srat = ScaleData(srat,verbose=verbose)
  srat = FindVariableFeatures(srat,verbose=verbose)
  srat = RunPCA(srat,verbose=verbose)
  srat = RunTSNE(srat,dims=seq(nPCs),verbose=verbose)
  srat = FindNeighbors(srat,dims=seq(nPCs),verbose=verbose)
  srat = FindClusters(srat,res=res,verbose=verbose)
  return(srat)
}

sra_obj <- standard10X(out, nPCs=30, res=0.6)

ee = sra_obj@meta.data

ee = cbind(ee, Embeddings(sra_obj[["tsne"]]))

ee$IGKC = sra_obj@assays$RNA@counts[rownames(sra_obj@assays$RNA@counts) == "IGKC", ]
ee$IGKC <- as.integer(ee$IGKC)
gg = ggplot(ee, aes(tSNE_1, tSNE_2)) + geom_point(aes(colour = IGKC > 0), size=1)
plot(gg)
image.png

https://github.com/constantAmateur/SoupX

相关文章

  • 用soupX对环境基因表达做估量和矫正

    基于液滴的单细胞捕获方法通常其单细胞液滴也会捕获环境基因(ambient RNA)。环境基因的表达由于并不来自ba...

  • 转录组入门(8): 差异基因结果注释

    前言 我们统一选择p<0.05而且abs(logFC)大于1的基因为显著差异表达基因集,对这个基因集用R包做KEG...

  • 转录组入门(8): 富集分析

    我们统一选择p<0.05而且abs(logFC)大于1的基因为显著差异表达基因集,对这个基因集用R包做KEGG/G...

  • 转录组入门(8):差异基因结果注释

    作业要求 我们统一选择p<0.05而且abs(log2FC)大于1的基因为显著差异表达基因集,对这个基因集用R包做...

  • 你最关心的差异基因是怎么挑出来的?!

    差异基因分析 做基因表达分析时必然要做差异基因分析,做差异基因分析最常用的软件就是DESeq2,使用DESeq2对...

  • 单细胞转录组标准化

    一旦表达矩阵经过初步的质控、过滤,即判断低丰度表达基因、矫正批次效应、过滤低质量细胞等步骤后,接下来需要对表达矩阵...

  • R|KM+unicox批量筛选基因

    基因表达量作为连续变量,可以利用单因素cox回归筛选目标基因,也可以根据基因表达的中位值分为高低表达组,用KM方法...

  • 比较基因组学的研究内容

    定义:在基因组序列信息已知的基础上,对已知基因和基因的结构进行比较,了解基因的功能,表达调控机制和物种进化过程(简...

  • 基因和环境

    英国BBC4最近播放了一个纪录片,一对本来应该生活在一个家庭里的中国双胞胎姐妹,却被一个美国和一个挪威的家庭分别领...

  • 第3话: 文化、文化、还是文化

    人类极其丰富的行为方式与固定不变的基因模式形成强烈的对比,即使加上生存环境差异,人类行为还是无法用基因和环境完整解...

网友评论

      本文标题:用soupX对环境基因表达做估量和矫正

      本文链接:https://www.haomeiwen.com/subject/omxbnktx.html