一文读懂InferCNV:Broad研究所单细胞CNV推断工具完全指南
【免费下载链接】infercnvInferring CNV from Single-Cell RNA-Seq项目地址: https://gitcode.com/gh_mirrors/in/infercnv
InferCNV是 Broad 研究所开发的经典生信工具,能够从单细胞 RNA-Seq 表达数据中推断细胞水平的拷贝数变异(CNV),即染色体的大规模扩增或缺失,帮助你在肿瘤样本中快速识别恶性细胞、比较克隆异质性,是癌症单细胞分析绕不开的基础工具。🧬
什么是 InferCNV?它解决什么问题
单细胞 RNA-Seq 测的是基因表达量,而不是 DNA 拷贝数。但有一个重要生物学事实:
基因组区域的拷贝数变化,往往带动区域内所有基因的表达量同步升高或降低。
InferCNV 正是利用这一点:
- 📊 把每个细胞的基因表达量按染色体位置排序
- 📉 与一组正常参考细胞的平均表达水平比较
- 🔥 输出经典的热图(heatmap):正常细胞呈均匀灰色,而发生染色体扩增/缺失的肿瘤细胞会显现出"整条染色体偏亮或偏暗"的斑块
这套方法源自 Patel 等人 2014 年发表在Science上的脑胶质瘤单细胞研究,随后被黑色素瘤转移、多种实体瘤的单细胞研究广泛采用。
⚠️重要提示:官方 README 中说明 InferCNV 目前已不再主动维护(源码见 README.md)。新项目可优先考虑 InferCNA、CopyKAT、Numbat 等后续工具;但 InferCNV 依然是理解这一分析范式的最佳入门工具,存量数据也仍可正常复现。
核心原理:三步读懂 CNV 推断流程
InferCNV 的完整流程由 run() 函数串起,逻辑上可拆成三段:
| 阶段 | 做什么 | 对应源码 |
|---|---|---|
| 1️⃣ 降噪与对比 | 用正常细胞做参考,对肿瘤细胞表达做归一化、平滑、去噪 | noise_reduction.R |
| 2️⃣ 肿瘤亚群聚类 | 用 Leiden 算法把基因型相似的肿瘤细胞分成亚克隆 | inferCNV_tumor_subclusters.R |
| 3️⃣ 状态推断 | 隐藏马尔可夫模型(HMM)+ 贝叶斯网络过滤,输出"扩增/缺失"状态及置信度 | inferCNV_HMM.R、inferCNV_BayesNet.R |
最终的infercnv.png热图就是分析结果的"门面":左侧参考细胞、右侧观测细胞,颜色条标注分组与亚克隆。
快速上手:从安装到第一张热图只需 3 步
步骤一:安装 infercnv 包
在 R 中通过 Bioconductor 一行安装(源码见 vignettes/inferCNV.Rmd):
BiocManager::install("infercnv")如需使用贝叶斯网络过滤步骤,系统还需要安装JAGS(依赖关系定义在 DESCRIPTION 中)。项目也提供了现成的 Docker 环境,免去繁琐依赖配置:
docker build -t infercnv docker/步骤二:创建 infercnv 对象
准备三个输入文件即可:
- 原始表达矩阵(基因 × 细胞的 count 矩阵,支持
.gz压缩) - 细胞注释文件(每个细胞属于哪个分组)
- 基因染色体位置文件(每个基因的 chr/start/stop)
包内自带一份小规模的少突胶质瘤示例数据,位于inst/extdata/目录,非常适合首次试跑。
infercnv_obj <- infercnv::CreateInfercnvObject( raw_counts_matrix = "counts.matrix.gz", annotations_file = "annotations.txt", gene_order_file = "gene_positions.txt", ref_group_names = c("Normal") # 指定正常参考细胞分组 )步骤三:一键运行 run()
官方示例脚本 example/run.R 展示了最典型的调用方式:
infercnv_obj <- infercnv::run( infercnv_obj, cutoff = 1, # 10x Genomics 数据建议 0.1 out_dir = "output_dir", analysis_mode = "subclusters", denoise = TRUE, HMM = TRUE )运行完成后,output_dir中会生成最终热图与各步骤中间结果。💡 小技巧:cutoff参数(表达值截断阈值)是新手最常调的第一个参数——10x 平台单细胞表达普遍偏低,建议从 0.1 开始尝试。
进阶功能:亚群聚类与 HMM 解读
肿瘤亚克隆(Tumor Subclusters)
同一个肿瘤样本里的癌细胞可能由多个基因型不同的克隆组成。InferCNV 默认使用Leiden 聚类(配合 PCA 与 K-近邻图)把肿瘤细胞分成亚克隆,热图颜色条会以不同颜色标出。
官方 README 特别提示:subclustering resolution(聚类分辨率)是最需要针对数据调整的选项,分辨率过高会把一个克隆过度拆分。新版默认设为
"auto",会随细胞数自动缩放。
想单独检查亚群划分效果,可用plot_subclusters()方法(见 man/plot_subclusters.Rd)。
HMM 与贝叶斯过滤
- HMM 模式:对每条染色体推断每个基因位置处于"无变异 / 扩增 / 缺失"状态,
i3HMM(inferCNV_i3HMM.R)等是不同粒度的推断模式 - 贝叶斯网络过滤:用 MCMC 采样估计正常状态的概率,过滤掉低置信度的变异调用(模型文件位于
inst/BUGS_Mixture_Model) - 还可通过 inferCNV_hidden_spike.R 中的"hidden spike"模拟数据,可视化评估工具在当前数据上的表现
与 Seurat 无缝衔接
如果你已经用 Seurat 做了单细胞分析,InferCNV 可以直接把结果写回去:
add_to_seurat():把 HMM 推断的 CNV 区域、子聚类信息作为元数据加进 Seurat 对象,实现"转录组 + 拷贝数"双维度分析(源码 seurat_interaction.R)- 文档见 man/add_to_seurat.Rd
这是它相比纯表达聚类最大的实用价值之一:同一个对象里同时看细胞类型和克隆结构。
项目结构速览
| 目录 | 作用 |
|---|---|
R/ | 核心功能:对象创建、run 流程、HMM、亚群聚类、Seurat 交互 |
scripts/ | 命令行入口inferCNV.R及大量探索/质控脚本(如 explorer_HMM_exec.R 不存在,实际为 explore_HMM_exec.R) |
example/ | 官方示例:run.R 主流程、run_test.R 快速测试,__alt_exec_modes/提供不同参数组合的参考 |
inst/extdata/ | 示例表达矩阵、细胞注释、基因位置文件 |
vignettes/ | 完整的 R Markdown 教程(inferCNV.Rmd),含安装与全流程 |
WDL/、docker/ | 大规模计算平台提交脚本与容器环境 |
tests/ | testthat 单元测试 |
需要浏览代码或自行编译时,可先拉取仓库:
git clone https://gitcode.com/gh_mirrors/in/infercnv新手避坑清单
- 先跑小样本预览:
CreateInfercnvObject()支持max_cells_per_group参数,每组只抽 50 个细胞快速试跑,再放大到全量数据 - 平台决定 cutoff:Smart-seq2 用 1,10x Genomics 用 0.1(官方 example/run.R 注释原话)
- 默认排除性染色体:
chrX/chrY/chrM默认不参与分析,多细胞类型混合样本建议留意 - 内存与时间:热图绘制开销大,大样本可用
sample方法降采样绘图(infercnv_sampling.R),分析本身仍用全量数据 - 结果可复现:
run()每步会保存 rds 备份,修改参数重跑时会自动跳过未变化的步骤,支持断点续跑
总结
InferCNV 用表达量沿基因组的波浪形态这一朴素而强大的信号,让"从单细胞 RNA-Seq 看染色体结构变异"成为可能。掌握它你收获的不只是一个工具,更是一整套"参考对比 → 平滑降噪 → 亚群聚类 → 状态推断"的肿瘤单细胞分析思维。🎯
建议学习路径:先跑通inst/extdata/示例数据 → 阅读 vignettes/inferCNV.Rmd → 对照 example/ 中的不同执行模式调整参数 → 最后接入自己的 Seurat 工作流。如果你的目标是全新项目,记得同时评估 InferCNA、CopyKAT、Numbat 等仍在积极维护的同类工具。
【免费下载链接】infercnvInferring CNV from Single-Cell RNA-Seq项目地址: https://gitcode.com/gh_mirrors/in/infercnv
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考