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.整体推测流程
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会输出以下文件
- infercnv.png
- infercnv.preliminary.~开头的文件:初步的infercnv 滑窗结果,未经过denoise或HMM。
- 如infercnv.preliminary.png:初步的infercnv 滑窗CNV值热图(denoise之前)。
- 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对象文件
- 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))) #改颜色