inferCNV学习笔记

InferCNV是一个由broad研究所开发的,利用单细胞转录组数据分析肿瘤细胞拷贝数变异(CNV)的工具。基本思路是在整个基因组范围内,通过计算肿瘤细胞关于参考的“正常”细胞的相对表达,利用滑窗思想对邻近的基因相对表达,计算拷贝数。

1.安装infercnv的r包

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

infercnv依赖一个包rjags需要安装外部的JAGS。
网址:https://sourceforge.net/projects/mcmc-jags/;根据提示下载安装即可。
否则,安装infercnv的时候会提示如下错误:

错误: package or namespace load failed for ‘infercnv’:
 loadNamespace()里算'rjags'时.onLoad失败了,详细内容:
  调用: fun(libname, pkgname)
  错误: Failed to locate any version of JAGS version 4

The rjags package is just an interface to the JAGS library
Make sure you have installed JAGS-4.x.y.exe (for any x >=0, y>=0) from
http://www.sourceforge.net/projects/mcmc-jags/files

2.整体推测流程

infercnv推测流程

3.使用

infercnv需要三个输入文件

1. 表达矩阵文件(包括正常参考细胞和肿瘤细胞)
2. 细胞注释文件(细胞名称和细胞标签)
3. 基因位点数据(行名为基因,三列分别是染色体号、起始位置、终止位置)
该文件的染色体顺序决定了最终热图的染色体顺序;如果输出的图,染色体位置是颠倒的,一般是这个文件中,染色体位置排序有问题。

>library(infercnv)#加载包
>#导入数据
>count.matrix=readRDS("tumor_and_ref_count.Rds")
>class(count.matrix)#数据格式为"dgCMatrix", "matrix", "data.frame"
[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"

> load("data/gene.loc.RData")#基因位点数据;矩阵或者数据框
> head(gene.loc)
          chr start  stop
DDX11L1     1 11869 14409
WASH7P      1 14404 29570
MIR6859-1   1 17369 17436
MIR1302-2   1 29554 31109
FAM138A     1 34554 36081
OR4G4P      1 52473 53312
> class(gene.loc)
[1] "data.frame"

>cell.anno<-readRDS("all_cell_barcode.Rds")#细胞注释数据;矩阵或者数据框
> head(cell.anno)
                   cluster
AAACCTGCAAGTGGATA Tumor_1
AAACCTGGGGGCGCTA Tumor_1
AAACGGGCTAGCGTG Tumor_1
AAACGGTTAATCCTCG Tumor_1
AAACGAAAGTGTCTAC Tumor_1
AAACGGGTCGCACCTG Tumor_1
在导入计算所需要的数据后,我们就可以推测CNV了
#创建一个infercnv对象
infercnv_obj <- CreateInfercnvObject(raw_counts_matrix=count.matrix,gene_order_file=gene.loc,
                                     annotations_file=cell.anno,
                                     ref_group_names=c("Oligodendrocyte","Macrophage","T-cell"),
                                     delim = "\t",max_cells_per_group = NULL,
                                     min_max_counts_per_cell = c(100, +Inf),
                                     chr_exclude = c("chrX", "chrY", "chrM"))

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)

所需要关注的参数: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)

4.重要结果文件

运行infercnv会输出以下文件

  1. infercnv.png
    降噪之后生成的最终热图
  1. infercnv.preliminary.~开头的文件:初步的infercnv 滑窗结果,未经过denoise或HMM。
    • 如infercnv.preliminary.png:初步的infercnv 滑窗CNV值热图(denoise之前)。
  1. infercnv.~开头的文件:最终结果输出的文件
    • infercnv.observations.txt:denoise之后的'tumor cell'CNV矩阵,用于可视化
    • infercnv.references.txt : denoise之后的'normal cell'CNV矩阵。
    • infercnv.observation_groupings.txt : 肿瘤细胞聚类结果文件,里面包括每个肿瘤细胞、及其所属的cluster。
    • infercnv.observations_dendrogram.txt : 肿瘤细胞的聚类结果树状图文件,与热图的聚类结果是对应的。是newick formatted 的格式,如:“(A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F”。
    • infercnv_obj”文件:是经过每一个处理步骤后生成的infercnv对象文件
  1. HMM开头的文件
    • HMM_CNV_predictions.*.pred_cnv_regions.dat: 样本的拷贝数变异状态
      • 如果使用i6,则结果文件中有6个状态,分别是

        • State 1: 0x: complete loss
        • State 2: 0.5x: loss of one copy
        • State 3: 1x: neutral
        • State 4: 1.5x: addition of one copy
        • State 5: 2x: addition of two copies
        • State 6: 3x: essentially a placeholder for >2x copies but modeled as 3x
      • 如果使用i3,则结果文件出现三个状态: del/neutral/amp

  • HMM_CNV_predictions.*.cell_groupings tumor subclusters和cell的对应关系
    只有analysis_mode = "subclusters"模式下才会生成,这个模式挺慢,但肿瘤异质性和克隆进化都是在这种模式下做的
cell_group_name                         cell
malignant_MGH36.malignant_MGH36_s1      MGH36_P3_E06
malignant_MGH36.malignant_MGH36_s1      MGH36_P10_E07
  • HMM_CNV_predictions.*.pred_cnv_genes.dat
    每一个group(第一列), 每一个CNV片段(第二列)上面每一个基因(第四列)的CNV状态(第三列),文件中基因这一列是唯一的。
    该文件可以查询感兴趣基因的CNV状态
cell_group_name gene_region_name        state   gene    chr     start   end
malignant_MGH36.malignant_MGH36_s1      chr1-region_2   2       ACOT7   chr1    6281253 6296032
malignant_MGH36.malignant_MGH36_s1      chr1-region_2   2       NOL9    chr1    6324329 6454451

5.加载infercnv输出的object文件

#一般我们会使用readRDS来读取inferCNV的输出文件
final_object <- readRDS("./infercnvResult/run.final.infercnv_obj")

6.其他函数的使用

> library(RColorBrewer)
#每一步都会输出_obj文件,可以话不同步骤下的cnv图
> infercnv::plot_cnv(infercnv_obj, #上两步得到的infercnv对象
                   plot_chr_scale = T, #画染色体全长,默认只画出(分析用到的)基因
                   out_dir = "/result/infercnv/",#输出地址
                   output_filename = "infercnv",#输出文件的名字
                   output_format = "pdf", #保存为pdf文件
                   custom_color_pal =  color.palette(c("#8DD3C7","white","#BC80BD"), c(2, 2))) #改颜色

你可能感兴趣的:(inferCNV学习笔记)