一文读懂InferCNV:Broad研究所单细胞CNV推断工具完全指南
2026/8/23 12:48:16 网站建设 项目流程

一文读懂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 对象

准备三个输入文件即可:

  1. 原始表达矩阵(基因 × 细胞的 count 矩阵,支持.gz压缩)
  2. 细胞注释文件(每个细胞属于哪个分组)
  3. 基因染色体位置文件(每个基因的 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

新手避坑清单

  1. 先跑小样本预览CreateInfercnvObject()支持max_cells_per_group参数,每组只抽 50 个细胞快速试跑,再放大到全量数据
  2. 平台决定 cutoff:Smart-seq2 用 1,10x Genomics 用 0.1(官方 example/run.R 注释原话)
  3. 默认排除性染色体chrX/chrY/chrM默认不参与分析,多细胞类型混合样本建议留意
  4. 内存与时间:热图绘制开销大,大样本可用sample方法降采样绘图(infercnv_sampling.R),分析本身仍用全量数据
  5. 结果可复现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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询