斯坦福大学Satija lab的 Seurat v3.1 guidline于近日更新啦!其中包括许多个性化的模块,其中我个人比较感兴趣的是Cell-Cycle Scoring and Regression模块,因为在条件干预的情况下,部分细胞处于非稳定状态下,如增殖类细胞出现由于细胞周期相关基因的不同导致细胞聚类发生一定的偏移。

其实在许多已经发表的文献中,我们也可以看到由于细胞周期不同所导致的分类偏移。如在Spatially and functionally distinct subclasses of breast cancer-associated fibroblasts revealed by single cell RNA sequencing   中 vCAFs和cCAFs中只有cell cycle genes的表达差异。

当作者使用SC3重新进行聚类时,两种亚型又重新聚在了一起 (重点关注图中的cluster1和cluster3,不要被颜色误导了。同一个cluster,不同的配色方案,也是服了,还是看看史上最全的图表色彩运用原理吧)。

系统介绍

通过计算各个细胞可能所处的细胞周期阶段的得分 (G1,S,G2期),并在预处理过程 (主要是ScaleData步骤)中将细胞周期得分作为混杂因素移除,从而排除单细胞所处细胞周期不同对基因表达和细胞分型的影响。作者在小鼠造血祖细胞的数据集上证明了该观点 (Nestorowa et al. Blood 2016.),其实只要是Seurat v3对象,自己的数据都是可以跑得通的。

细胞周期相关基因集使用的是人的基因,用小鼠进行测试,说明该细胞周期相关基因数据集适合人和小鼠;如果是其它物种,准备方法见 https://github.com/satijalab/seurat/issues/462。

下面是操作代码:

library(Seurat)# 读取表达矩阵, The first row is a header row, the first column is rownames
exp.mat <- read.table(file = "../data/nestorawa_forcellcycle_expressionMatrix.txt",header = TRUE, as.is = TRUE, row.names = 1)# 一系列的细胞周期相关的markers,其中包括处于S期的43个细胞周期相关基因,54个G2M期的细胞周期相关基因,
# from Tirosh et al, 2015, is loaded with Seurat.  We can
# segregate this list into markers of G2/M phase and markers of S phase
s.genes <- cc.genes$s.genes
g2m.genes <- cc.genes$g2m.genes# 创建Seurat对象并进行标准化;marrow <- CreateSeuratObject(counts = exp.mat)
marrow <- NormalizeData(marrow)
marrow <- FindVariableFeatures(marrow, selection.method = "vst")
marrow <- ScaleData(marrow, features = rownames(marrow))

如果我们在Seurat对象上进行PCA分析,使用FindVariableFeatures中找到高可变基因,进行PCA分析,并展示对各个主成分贡献最大的基因。

PCA分析有不少需要注意的,具体见用了这么多年的PCA可视化竟然是错的!!! 和 PCA主成分分析实战和可视化 | 附R代码和测试数据。

marrow <- RunPCA(marrow, features = VariableFeatures(marrow), ndims.print = 6:10, nfeatures.print = 10)

我们看到对PC8PC10贡献最大的基因中一部分是细胞周期相关基因,包括TOP2AMKI67

从下面的热图也可以看出来。

DimHeatmap(marrow, dims = c(8, 10))#热图表示

我们将尝试从数据中去除该组分,从而确保细胞周期异质性对PCA或下游分析没有贡献。

分配细胞周期分数

首先,根据其G2/MS期标记基因的表达为每个细胞分配一个所处周期的分数。这些标记基因的表达水平应该是反相关的,而不表达这些标记基因的细胞可能处于G1期。

我们用CellCycleScoring函数计算细胞周期分数,并在metadata中存储SG2/M分数,以及G2MSG1阶段中每个细胞的预测分类。如果指定set.ident=T,则CellCycleScoring将Seurat对象中每个细胞的分组信息设置为其所处的细胞周期阶段。

marrow <- CellCycleScoring(marrow, s.features = s.genes, g2m.features = g2m.genes, set.ident = TRUE)# view cell cycle scores and phase assignments
head(marrow[[]])

观察细胞周期基因的表达情况 (评估计算的准确性)

注:R语言可视化学习笔记之ggridges包可绘制类似图形。

# 观察细胞周期基因的表达情况
RidgePlot(marrow, features = c("PCNA", "TOP2A", "MCM6", "MKI67"), ncol = 2)

我们用CellCycleScoring函数计算细胞周期分数,并在metadata中存储SG2/M分数,以及G2MSG1阶段中每个细胞的预测分类。如果指定set.ident=T,则CellCycleScoring将Seurat对象中每个细胞的分组信息设置为其所处的细胞周期阶段。利用细胞周期基因进行PCA分析 (这个例子可以拓展,使用任意指定的基因集进行细胞周期分析)

PCA分析有不少需要注意的,具体见用了这么多年的PCA可视化竟然是错的!!! 和 PCA主成分分析实战和可视化 | 附R代码和测试数据。

# Running a PCA on cell cycle genes reveals, unsurprisingly, that cells separate entirely by
# phase
marrow <- RunPCA(marrow, features = c(s.genes, g2m.genes))
DimPlot(marrow)

在数据标归一化时去除细胞周期影响

marrow <- ScaleData(marrow, vars.to.regress = c("S.Score", "G2M.Score"), features = rownames(marrow))

再次做PCA时,就看不到细胞周期相关基因对主成分的贡献了。

# 我们可以看到组分中不再出现细胞周期相关的基因
marrow <- RunPCA(marrow, features = VariableFeatures(marrow), nfeatures.print = 10)

再次根据细胞周期相关基因进行PCA分析时,也不分不出群了,说明移除细胞周期影响的效果还是比较好的。

# When running a PCA on only cell cycle genes, cells no longer separate by cell-cycle phase
marrow <- RunPCA(marrow, features = c(s.genes, g2m.genes))
DimPlot(marrow)

如果细胞周期不合适时怎么办?

上述过程去除了与细胞周期相关的所有信息。在某些情况下,我们发现这会对下游分析产生负面影响,特别是在分化过程(如小鼠血细胞分化生成过程中 hematopoiesis)中,干细胞处于静止状态,分化细胞正在增殖(反之亦然)。在这种情况下,消除所有细胞周期效应也会模糊干细胞和前体细胞之间的区别。

作为替代方案,我们建议消除G2MS期分数之间的差异。这意味着将保持非周期细胞和周期细胞的组分差异,但是增殖细胞之间的细胞周期阶段的差异将从数据中去除。

# 计算并移除分数差异
marrow$CC.Difference <- marrow$S.Score - marrow$G2M.Score
marrow <- ScaleData(marrow, vars.to.regress = "CC.Difference", features = rownames(marrow))

细胞周期相关的基因对各个主成分贡献减小

# cell cycle effects strongly mitigated in PCA
# 在PCA中不再出现大量的细胞周期相关的基因
marrow <- RunPCA(marrow, features = VariableFeatures(marrow), nfeatures.print = 10)

G1期区分开,G2/M和S期聚在一起。

# when running a PCA on cell cycle genes, actively proliferating cells remain distinct from G1
# cells.
# however, within actively proliferating cells, G2M and S phase cells group together
marrow <- RunPCA(marrow, features = c(s.genes, g2m.genes))
DimPlot(marrow)

单细胞是目前很火的领域,分析工具很多,而且也还在不断发展中。Seurat是其中一个,虽然好用,却不一定是最好的。而且运用好工具,需要对原理有很好的理解,易生信8月份的单细胞课程邀请来在单细胞算法开发上很有经验的中科院博士开课,深入浅出的讲述了单细胞分析的方法和注意事项,我个人认为课程讲的特别好,很多学员也反映特别好,在此强烈推荐。

Seurat亮点之细胞周期评分和回归相关推荐

  1. Seurat4.0系列教程8:细胞周期评分和回归分析

    此教程展示了如何通过基于传统细胞周期相关marker计算细胞周期得分,并在预处理过程中将这些分数从数据中回归,以消除 scRNA-seq 数据中细胞周期异质性的影响.数据: https://www.d ...

  2. R语言倾向性评分:回归和分层

    倾向性评分有4种应用,前面介绍了倾向性评分匹配及matchIt和cobalt包的使用:R语言倾向性评分:匹配 今天说一下倾向性评分回归和分层.使用了一个不是很成功的案例,并使用了大量purrr风格的代 ...

  3. 一个R包玩转单细胞免疫组库分析,还能与Seurat无缝对接

    单细胞免疫组库数据分析 NGS系列文章包括NGS基础.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞测序分析  ...

  4. 单细胞分析Seurat使用相关的10个问题答疑精选!

    NGS系列文章包括NGS基础.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞测序分析 (重磅综述:三万字长文读 ...

  5. 让你的单细胞数据动起来!|iCellR(一)

    今天在翻阅single cell 的github时候,我看见了这个R包,允许我们处理各种来自单细胞测序技术的数据,如scRNA-seq,scVDJ-seq和CITE-Seq. 单细胞转录组教程汇总 想 ...

  6. 对一篇单细胞RNA综述的评述:细胞和基因质控参数的选择

    原文链接: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6072887 摘要 单细胞RNA测序技术的发展加深了我们对于细胞作为功能单元的理解,不仅能基于成 ...

  7. 如何使用Bioconductor进行单细胞分析?

    最近的技术进步使得能够在单个细胞中分析全基因组特征.但是,单细胞数据为分析提出了独特的挑战,需要开发专用的方法和数据架构才能成功解析数据背后的生物问题.Bioconductor项目托管了社区开发的开源 ...

  8. 重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程 (原理、代码和评述)

    原文链接: https://www.embopress.org/doi/10.15252/msb.20188746 主编评语 这篇文章最好的地方不只在于推荐了工具,提供了一套分析流程,更在于详细介绍了 ...

  9. 生信宝典教程大放送,一站式学习生信技术

    生物信息学包含生物数据分析.数据可视化.重复工作程序化,是生物.医学科研必备的技能之一.生信宝典精心组织生信学习系列教程.生信工具精品教程,通过大量的生信例子.关键的注释.浓缩的语句和录制的视频帮助快 ...

最新文章

  1. linux pam模块 cron,Linux-PAM 1.1.2 中文文档 - 6.32. pam_tally-登录计数器(统计)模块 | Docs4dev...
  2. 护肤产生共鸣_通过以人为本的设计编织共鸣的20个指针
  3. IDEA这样配置注释模板,让你高出一个逼格!!
  4. delphi 软件在线人数统计_【大学分析】计算机爆满,软件爆冷!这所985大学考研分数截然不同!...
  5. 在字节,校招刚入职就得到业界大会talk机会是一种怎样的体验?
  6. 局部线性嵌入(LLE,Locally Linear Embedding)
  7. c += c-- | ++b;
  8. 伊宅购集团伊家田园勠力同心数字农业项目说明会圆满举行!
  9. Sketch中的快捷键总结
  10. Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?Doctype文档类型?
  11. Ubuntu安装repo
  12. python 拼多多_python 拼多多_拼多多2018校招编程题汇总 Python实现
  13. <数据结构>倒拔二叉树
  14. 合成资产赛道风云突变,Linear Finance有望成为最具潜力的黑马
  15. 作为荣耀脱离华为后的第二代旗舰,荣耀Magic4 Pro是否值得选购?
  16. 数据可视化笔记3 数据可视化基础(几何标记、视觉通道)
  17. Oracle 字符集从GBK升级到Utf8
  18. Windows 正在连接xxx...无法打开到主机的连接。在端口xxx:连接失败问题解决
  19. m3u8格式直播地址
  20. ios上架被拒5.1.1

热门文章

  1. 《大数据》2015年第2期“动态”——大数据发现银行贷款风险
  2. 【Servlet】解决org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception invoking method……
  3. 【Python】AttributeError: ‘DatetimeProperties’ object has no attribute ‘weekday_name’ 的解决方法
  4. 【SQL Sever】将SQL Sever中的一个数据表的数据导出为insert语句
  5. 转帖:对linux中半增加半连接数量和防止服务器被dos***
  6. SONICWALL E-Class NSA 系列简介
  7. QTP User-Defined Function 学习经验汇总
  8. 确保您的Silverlight 1.0运行时间组件是最新版本
  9. C#2.0新特性探究之模拟泛型和内置算法
  10. 有人说学了C语言,两天就能学会Java,两个星期就可以找工作?