inferCNV

作者: 夕颜00 | 来源:发表于2021-10-15 17:40 被阅读0次

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

基本思路是在整个基因组范围内,通过计算肿瘤细胞关于参考的“正常”细胞的相对表达,利用滑窗思想对邻近的基因相对表达,计算拷贝数。

软件安装

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

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

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

安装R包

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

测试安装

library(infercnv)

infercnv_obj = CreateInfercnvObject(raw_counts_matrix=system.file("extdata", "oligodendroglioma_expression_downsampled.counts.matrix.gz", package = "infercnv"),
                                    annotations_file=system.file("extdata", "oligodendroglioma_annotations_downsampled.txt", package = "infercnv"),
                                    delim="\t",
                                    gene_order_file=system.file("extdata", "gencode_downsampled.EXAMPLE_ONLY_DONT_REUSE.txt", package = "infercnv"),
                                    ref_group_names=c("Microglia/Macrophage","Oligodendrocytes (non-malignant)")) 

infercnv_obj = infercnv::run(infercnv_obj,
                             cutoff=1, # cutoff=1 works well for Smart-seq2, and cutoff=0.1 works well for 10x Genomics
                             out_dir=tempfile(), 
                             cluster_by_groups=TRUE, 
                             denoise=TRUE,
                             HMM=TRUE)

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

软件使用

准备输入文件

需要准备3个输入数据

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

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

MGH54_P16_F12 MGH54_P12_C10 MGH54_P11_C11 MGH54_P15_D06 MGH54_P16_A03 ...
A2M 0 0 0 0 0 ...
A4GALT 0 0 0 0 0 ...
AAAS 0 37 30 21 0 ...
AACS 0 0 0 0 2 ...
AADAT 0 0 0 0 0 ...
... ... ... ... ... ... ...

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

MGH54_P2_C12    Microglia/Macrophage
MGH36_P6_F03    Microglia/Macrophage
MGH54_P16_F12   Oligodendrocytes (non-malignant)
MGH54_P12_C10   Oligodendrocytes (non-malignant)
MGH36_P1_B02    malignant_MGH36
MGH36_P1_H10    malignant_MGH36

第三个是基因位置信息文件,命名为"geneOrderingFile.txt"。一共四列,第一列对应第一个文件的行名,其余三列则是基因的位置。:基因名不能有重复,
该文件的染色体顺序决定了最终热图的染色体顺序;如果输出的图,染色体位置是颠倒的,一般是这个文件中,染色体位置排序有问题。

WASH7P  chr1    14363   29806
LINC00115       chr1    761586  762902
NOC2L   chr1    879584  894689
MIR200A chr1    1103243 1103332
SDF4    chr1    1152288 1167411
UBE2J2  chr1    1189289 1209265

两步法

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

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

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

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

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

# perform infercnv operations to reveal cnv signal
infercnv_obj = infercnv::run(infercnv_obj,
                             cutoff=1,  # use 1 for smart-seq, 0.1 for 10x-genomics
                             out_dir="output_dir",  # 输出文件夹
                             cluster_by_groups=T,   # 聚类
                             denoise=T, #去噪
                             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格式,展示细胞间的层次关系.

所需要关注的参数:CreateInfercnvObject

细胞表达谱

@param raw_counts_matrix    
#基因位点参考文件:
@param gene_order_file  
包含基因组中每个染色体上每个基因的位置的数据文件。
#细胞注释文件
@param annotations_file 
细胞的描述,指示细胞的类型分类

#细胞注释文件中正常参考细胞的类型names
@param ref_group_names  

@param delim    
输入文件中使用的分隔符;默认为"\t"

@param max_cells_per_group  
每组要使用的最大单元格数。Default=NULL,使用在annotations_file中定义的所有单元格
随机测试代码的时候可以设置,如设置max_cells_per_group=50,以获得更快速的计算。

@param min_max_counts_per_cell  
参考默认即可,不需要额外设置

@param chr_exclude  
Default = c('chrX', 'chrY', 'chrM')
参考基因组注释中应排除在分析之外的染色体列表。

所需要关注的参数:infercnv::run

输入输出

@param infercnv_obj 
使用原始count数据填充的infercnv对象
@param cutoff   
对于Smart-seq最优cutoff=1对于10X数据,最优 cutoff=0.1        
@param min_cells_per_gene   
最低数量的参考细胞需要表达测量包括相应的基因。默认为3
@param out_dir  
输出文件的地址,必须提供

@param no_plot  
是否输出图像。默认为输出,相反,生成所有非图像输出作为运行的一部分(default: FALSE)

@param no_prelim_plot   
不输出初始的图像(default: FALSE)

@param output_format    
输出图像的格式。
选择:"png", "pdf" and NA.  (default: "png")
NA意味着只写文本输出而不生成图形本身。

@param useRaster    
是否使用栅格化绘制热图。只有当它产生错误时才禁用它,因为它比不使用它快得多 (default: TRUE)

@param up_to_step   
运行步骤的数目;(default: 100 >> 23 steps currently in the process)

滑窗参数

@param window_length    
滑窗的长度,必须事奇数,默认为101(最好遵循默认)

@param smooth_method    
可以使用的滑窗方法: c(runmeans,pyramidinal,coordinates) 默认: pyramidinal

滑窗前表达谱的处理

@param max_centered_threshold   
**限定相对表达值分布范围**,确定肿瘤细胞基于参考细胞计算完相对表达值之后的最大值、最小值界限,(default: 3)。
 - 传入参数为“数字型”,则-1乘以该值,如果传入3,则范围被设定为[-3, 3]。
 - 传入参数为”auto” 根据细胞间的平均值分布来自动识别边界。
 - 如果为NA 则关闭该功能。
@param scale_data   
默认为FALSE,如果参考细胞和需要推测的细胞不是一种类型的细胞则需要scale

聚类设置

@param num_ref_groups   
是否对参考细胞进行分组的组别数目,默认为NULL,建议不设置组别数,在你具有确定的正常参考细胞的情况下

@param ref_subtract_use_mean_bounds 
分别确定每个ref组的平均值,然后移除平均值范围内的强度(默认值:TRUE)否则,使用组间平均值。

@param cluster_by_groups    
如果观察结果是根据组来定义的(例如。患者),每一组细胞将单独聚在一起。(default=FALSE,改为使用k_obs_groups设置)

@param cluster_references   
是否在参考细胞中也引用聚类

@param k_obs_groups 
默认为1,根据拷贝数重新聚类的组数

@param hclust_method    
用于细胞分层聚类的方法 ,可选"ward.D", "ward.D2", "single", "complete", "average", "mcquitty", "median", "centroid". default("ward.D2")

基于肿瘤亚簇的下游分析

@param HMM  
当设置为True时,运行HMM预测CNV级别(默认为FALSE)
@param HMM_transition_prob  
HMM中的跃迁概率,默认为1e-6
@param HMM_report_by    
选择:c("subcluster", "consensus", "cell") default: subcluster
注意,report 的执行完全独立于HMM预测。因此,您可以预测子集群,但获得每个cell级别的报告(更大的输出)。

@param HMM_type 
HMM的模型类型;default:i6
选择: (i6 or i3): 
i6: infercnv 6个状态模型(0, 0.5, 1, 1.5, 2, >2) 
i3: infercnv3个状态的模型(del, neutral, amp) 基于正常细胞和HMM_i3_pval配置

@param HMM_i3_pval  
i3状态的p值overlop (default: 0.05)

@param HMM_i3_use_KS    
boolean: 使用KS统计检验估计扩增/缺失分布的均值 (default=TRUE)

肿瘤亚聚类

@param analysis_mode    
选择:("samples","subclusters","cells")
用于图像过滤或HMM预测的分组水平。
default: samples (更快,但是subclusters是更理想的)

@param tumor_subcluster_partition_method    
肿瘤亚簇的定义方法;
选择:('random_trees', 'qnorm')
default:random_trees,慢但最好
qnorm: 根据tumor_subcluster_pval定义的分位数定义树的高度

@param tumor_subcluster_pval    
定义显著肿瘤亚簇的最大p值(默认值:0.1)

去噪参数

@param denoise  
如果为真,根据下面的选项开始去噪
@param noise_filter 
Values +- from the reference cell mean will be set to zero (whitening effect) default(NA, instead will use sd_amplifier below.

sd_amplifier    
Noise is defined as mean(reference_cells) +- sdev(reference_cells) * sd_amplifier default: 1.5

noise_logistic  
use the noise_filter or sd_amplifier based threshold (whichever is invoked) as the midpoint in a logistic model for downscaling values close to the mean. (default: FALSE)

离群修剪

@param outlier_method_bound 
用于边界离群值的方法。
default: "average_bound"
如果设置,将优先使用outlier_lower_bounda和outlier_upper_bound。
@param outlier_lower_bound  
下界以下的异常值将被设置为这个值。
@param outlier_upper_bound  
这个上界上的异常值将被设置为这个值。

其他:大多数忽略即可,采用默认

@param final_scale_limits   
输出的最终热图的比例限制。
default: "auto".
或者选择:"low","high"
@param final_center_val 
输出的最终热图的中心值。
@param debug    
如果为true,则输出调试级别的日志。default: FALSE.
@param num_threads  
并行阶段采用的核数。允许的情况下可以尽量采用多个核,使计算速度更快 (default: 4)
@param lot_steps    
如果为真,保存infercnv objects并在中间步骤绘制数据。
@param resume_mode  
尽可能利用预计算和存储的infercnv对象。(default = TRUE)
@param png_res  
图像的分辨率
@param plot_probabilities   
绘制后验概率的选项(default: TRUE)
@param save_rds 
是否将当前步骤对象结果保存为.rds文件 (default: TRUE)
@param save_final_rds   
是否将最终对象结果保存为.rds文件(default: TRUE)
@param diagnostics  
选择在运行贝叶斯模型后创建诊断图 (default: FALSE)

结果图的解释

得到的quickstart.pdf文件:
图中的数值是"Residual expression values",可以简单理解为基因表达值的另一种形式;


image.png
  • 正常细胞的表达值绘制在顶部热图中,肿瘤细胞绘制在底部热图中
  • 基因在整个染色体上从左到右排列。
  • 有效地从肿瘤细胞表达数据中减去正常细胞表达数据以产生差异
  • 其中染色体区域扩增显示为红色块,而染色体区域缺失显示为蓝色块

<meta charset="utf-8">

画图

infercnv包也包含了画图函数plot_cnv,这个知道的人不多,

library(RColorBrewer)
infercnv::plot_cnv(infercnv_obj, #上两步得到的infercnv对象
                   plot_chr_scale = T, #画染色体全长,默认只画出(分析用到的)基因
                   output_filename = "better_plot",output_format = "pdf", #保存为pdf文件
                   custom_color_pal =  color.palette(c("#8DD3C7","white","#BC80BD"), c(2, 2))) #改颜色

画图

infercnv包也包含了画图函数plot_cnv,

library(RColorBrewer)
infercnv::plot_cnv(infercnv_obj, #上两步得到的infercnv对象
                   plot_chr_scale = T, #画染色体全长,默认只画出(分析用到的)基因
                   output_filename = "better_plot",output_format = "pdf", #保存为pdf文件
                   custom_color_pal =  color.palette(c("#8DD3C7","white","#BC80BD"), c(2, 2))) #改颜色

image

转载来自:
作者:TOP生物信息
链接:https://www.jianshu.com/p/c01f56bf031f
作者:Geekero
链接:https://www.jianshu.com/p/82fdb69d6083
作者:被格格巫抓到的蓝精灵
链接:https://www.jianshu.com/p/6b44e511f641
作者:xuzhougeng
链接:https://www.jianshu.com/p/cf15feeb4870

参考资料

相关文章

网友评论

    本文标题:inferCNV

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