专栏首页单细胞天地使用inferCNV分析单细胞转录组中拷贝数变异

使用inferCNV分析单细胞转录组中拷贝数变异

分享是一种态度

inferCNV用与探索肿瘤单细胞RNA-seq数据,分析其中的体细胞大规模染色体拷贝数变化(copy number alterations, CNA), 例如整条染色体或大片段染色体的增加或丢失(gain or deletions)。工作原理是,以一组"正常"细胞作为参考,分析肿瘤基因组上各个位置的基因表达量强度变化. 通过热图的形式展示每条染色体上的基因相对表达量,相对于正常细胞,肿瘤基因组总会过表达或者低表达。

inferCNV提供了一些过滤参数,通过调整参数来降低噪音,更好的揭示支持CNA的信号。此外inferCNV还包括预测CNA区间的方法以及根据异质性模式定义细胞类群的方法。

软件安装

尽管inferCNV是一个R包,但是在安装inferCNV之前还需要先下载安装JAGS ,好在它有Windows,MacOS和Linux版本,所以inferCNV在各个平台都能用。

Windows和MacOS的JAGS容易安装,而Linux的JAGS需要编译

1# 手动安装BLAS和LAPACK不推荐
2# yum install blas-devel lapack-devel
3tar xf JAGS-4.3.0.tar.gz 
4cd JAGS-4.3.0
5./configure --libdir=/usr/local/lib64
6make -j 20 && make install 

安装R包

1install.packages("rjags")
2if (!requireNamespace("BiocManager", quietly = TRUE))
3     install.packages("BiocManager")
4BiocManager::install("infercnv")

此外,利用conda seach infercnv能够检索到"bioconductor-infercnv", 因此如果没有root希望在服务器上安装的话,可以尝试用conda。

测试安装

 1library(infercnv)
 2
 3infercnv_obj = CreateInfercnvObject(raw_counts_matrix=system.file("extdata", "oligodendroglioma_expression_downsampled.counts.matrix.gz", package = "infercnv"),
 4                                    annotations_file=system.file("extdata", "oligodendroglioma_annotations_downsampled.txt", package = "infercnv"),
 5                                    delim="\t",
 6                                    gene_order_file=system.file("extdata", "gencode_downsampled.EXAMPLE_ONLY_DONT_REUSE.txt", package = "infercnv"),
 7                                    ref_group_names=c("Microglia/Macrophage","Oligodendrocytes (non-malignant)")) 
 8
 9infercnv_obj = infercnv::run(infercnv_obj,
10                             cutoff=1, # cutoff=1 works well for Smart-seq2, and cutoff=0.1 works well for 10x Genomics
11                             out_dir=tempfile(), 
12                             cluster_by_groups=TRUE, 
13                             denoise=TRUE,
14                             HMM=TRUE)

如果没有报错,就说明安装成功。

软件使用

准备输入文件

需要准备3个输入数据

  1. 单细胞RNA-seq表达量的原始矩阵
  2. 注释文件,记录肿瘤和正常细胞
  3. 基因或染色体位置文件

第一个是Genes x Cells的表达矩阵(matrix),行名是基因,列名是细胞编号。

第二个是样本注释信息文件,命名为"cellAnnotations.txt"。一共两列,第一列是对应第一个文件的列名,第二列是细胞的分组

2MGH36_P6_F03    Microglia/Macrophage
3MGH54_P16_F12   Oligodendrocytes (non-malignant)
4MGH54_P12_C10   Oligodendrocytes (non-malignant)
5MGH36_P1_B02    malignant_MGH36
6MGH36_P1_H10    malignant_MGH36

第三个是基因位置信息文件,命名为"geneOrderingFile.txt"。一共四列,第一列对应第一个文件的行名,其余三列则是基因的位置。:基因名不能有重复

1WASH7P  chr1    14363   29806
2LINC00115       chr1    761586  762902
3NOC2L   chr1    879584  894689
4MIR200A chr1    1103243 1103332
5SDF4    chr1    1152288 1167411
6UBE2J2  chr1    1189289 1209265

两步法

最复杂的工作就是准备输入文件,而一旦上述三个文件已经创建完成,那么分析只要两步以及根据结果对参数进行调整。

第一步,根据上述的三个文件创建inferCNV对象

1infercnv_obj = CreateInfercnvObject(raw_counts_matrix=matrix, # 可以直接提供矩阵对象
2                                    annotations_file="cellAnnotations.txt",
3                                    delim="\t",
4                                    gene_order_file="gene_ordering_file.txt",
5                                    ref_group_names=c("normal"))

这一步的一个关键参数是ref_group_name, 用于设置参考组。假如你并不知道哪个组是正常,哪个组不正常,那么设置为ref_group_name=NULL, 那么inferCNV会以全局平均值作为基线,这适用于有足够细胞存在差异的情况。此外,这里的raw_count_matrix是排除了低质量细胞的count矩阵。

第二步,运行标准的inferCNV流程。

1# perform infercnv operations to reveal cnv signal
2infercnv_obj = infercnv::run(infercnv_obj,
3                             cutoff=1,  # use 1 for smart-seq, 0.1 for 10x-genomics
4                             out_dir="output_dir",  # 输出文件夹
5                             cluster_by_groups=T,   # 聚类
6                             denoise=T, #去噪
7                             HMM=T) # 是否基于HMM预测CNV

关键参数是cutoff, 用于选择哪些基因会被用于分析(在所有细胞的平均表达量需要大于某个阈值)。这个需要根据具体的测序深度来算,官方教程建议10X设置为0.1,smart-seq设置为1。你可以先评估下不同阈值下的保留基因数,决定具体值。cluster_by_groups用于声明是否根据细胞注释文件的分组对肿瘤细胞进行分群。

最终会输出很多文件在out_dir的目录下,而实际有用的是下面几个

  • infercnv.preliminary.png : 初步的inferCNV展示结果(未经去噪或HMM预测)
  • infercnv.png : 最终inferCNV产生的去噪后的热图.
  • infercnv.references.txt : 正常细胞矩阵.
  • infercnv.observations.txt : 肿瘤细胞矩阵.
  • infercnv.observation_groupings.txt : 肿瘤细胞聚类后的分组关系.
  • infercnv.observations_dendrogram.txt : NEWICK格式,展示细胞间的层次关系.

参数说明

Infercnv::run的参数非常之多,总体上分为如下几类

  • 基本设置
  • 平滑参数
  • 基于肿瘤亚群的下游分析(HMM或non-DE-masking)
  • 根据 BayesNet P(Normal) 过滤低可信度HMM预测结果
  • 肿瘤亚群细分
  • 去噪参数
  • 离群值修剪
  • 其他选项
  • 实验性参数(不稳定)
  • 差异表达分析的实验性参数

你可以按照具体的需求修改不同步骤的参数,例如聚类默认cluster_by_groups=FALSE会根据k_obs_groups聚类成指定的组数,而层次聚类方法用于计算组间相似度的参数则是hclust_method.

此外,设置HMM=TRUE 的计算时间会长于HMM=FALSE,因此可以先设置HMM=FALSE快速查看结果。

在运行过程中它会显示每个步骤的信息,官方文档给出了示意图帮助理解。

InferCNV_procedure

提取信息

inferCNV会输出一个" map_metadata_from_infercnv .txt"文件用于记录每个细胞的元信息,所有信息都可以从该文件中进行提取。或者使用infercnv::add_to_seurat将信息直接增加到原来的seurat对象中。


参考资料
  • 软件安装: https://github.com/broadinstitute/inferCNV/wiki/Installing-infercnv
  • 文件定义: https://github.com/broadinstitute/inferCNV/wiki/File-Definitions
  • 运行inferCNV: https://github.com/broadinstitute/inferCNV/wiki/Running-InferCNV
  • 引用: inferCNV of the Trinity CTAT Project. https://github.com/broadinstitute/inferCNV

关于inferCNV的算法原理在如下几篇文章中有说明

  • Anoop P. Patel, Itay Tirosh, et al. Single-cell RNA-seq highlights intratumoral heterogeneity in primary glioblastoma. Science. 2014 Jun 20: 1396-1401
  • Tirosh I et al. Dissecting the multicellular ecosystem of metastatic melanoma by single-cell RNA-seq. Science. 2016 Apr 8;352(6282):189-96
  • Tirosh I et al. Single-cell RNA-seq supports a developmental hierarchy in human oligodendroglioma. Nature. 2016 Nov 10;539(7628):309-313. PubMed PMID: 27806376; PubMed Central PMCID: PMC5465819.
  • Venteicher AS, Tirosh I, et al. Decoupling genetics, lineages, and microenvironment in IDH-mutant gliomas by single-cell RNA-seq. Science. 2017 Mar 31;355(6332).PubMed PMID: 28360267; PubMed Central PMCID: PMC5519096.
  • Puram SV, Tirosh I, et al. Single-Cell Transcriptomic Analysis of Primary and Metastatic Tumor Ecosystems in Head and Neck Cancer. Cell. 2017 Dec 14;171(7):1611-1624.e24. PubMed PMID: 29198524; PubMed Central PMCID: PMC5878932.

本文分享自微信公众号 - 单细胞天地(sc-ngs),作者:徐洲更

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 你想了解的国家自然基金单细胞项目统计分析

    上次爬取了2009-2019年度单细胞项目的项目-想知道单细胞国自然基金有哪些,由于上次只有爬取的代码没有对项目类型进行分析,今天补起。

    生信技能树jimmy
  • 你的单细胞分群数量太少可能就是因为你测的细胞数量不够

    不过我感兴趣的并不是他们做的单细胞资源整理,尽管他们收集了超过500个单细胞转录组研究的数据,我感兴趣的是他们文末的一个补充结论:

    生信技能树jimmy
  • 单细胞测序揭示皮肤伤口中成纤维细胞的异质性

    不知不觉在单细胞转录组领域做知识分析也快两年了,很幸运聚集了五个小伙伴携手共进,我们承诺不间断更新5个月,把我们这两年的学习成果全部掏出来给大家,包括5个栏目:

    生信技能树jimmy
  • Linux入门

      Linux目录结构,可以看成是一种树形结构。其中最顶端使用 “/”表示,称为根目录。由于Linux是开放源代码的,不同的公司会根据Linux的核心代码进行修...

    用户6641876
  • Linux系统的用户和用户组管理

    用户在系统中是分角色的,在Linux系统中,由于角色的不同,权限和所完成的任务也不同; 值得注意的是用户的角色是通过UID和GID识别的; 特别是UID,在运维...

    剑行者
  • 2018年移动应用程序开发将会迈进一步

    根据最新的Gartner报告显示,全球最大的200家公司将会在2018年全部使用智能应用程序,并利用大数据分析来重塑客户体验战略。这个文章将会给大家介绍移动应用...

    人工智能的秘密
  • Linux下squid代理缓存服务环境部署

    代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。 Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并...

    洗尽了浮华
  • 010.Kibana开启监控功能

    Elasticsearch在6.x版本之后,已经将x-pack插件的功能免费开放了,当然一些高级功能还是需要收费的,所以开启Elasticsearch的监控不再...

    CoderJed
  • TS 如何进行完整性检查

    在 TypeScript 中,never 类型表示的是那些永不存在的值的类型。 例如, never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭...

    semlinker
  • 腾讯内部产品课:细分用户画像

    用户1756920

扫码关注云+社区

领取腾讯云代金券