跳转至

Hi-C 数据分析流程

一句话概述

Hi-C 是一种捕获染色质三维空间相互作用的测序技术,能揭示基因组的三维折叠结构,包括 TAD(拓扑关联域)和染色质环。


核心知识点表格

知识点说明
Hi-C基于邻近连接的染色质构象捕获技术,全基因组尺度
TAD(拓扑关联域)染色质自我互作频率高的区域,通常 200kb-2Mb,是基因调控的基本单元
A/B CompartmentA区室=活跃染色质(开放),B区室=沉默染色质(紧缩)
染色质环(Loop)两个基因组位点的直接物理接触,通常由 CTCF/Cohesin 介导
接触矩阵Hi-C 数据的核心表示,对称方阵记录任意两个基因组区域的接触频率
分辨率bin 的大小,常用 1kb、5kb、10kb、25kb、50kb、100kb
ICE 标准化迭代校正法,消除技术偏差(GC含量、可mappability、片段长度等)
HiC-Pro经典 Hi-C 数据处理流程,从 FASTQ 到接触矩阵
JuicerAiden Lab 开发的一站式 Hi-C 分析流程
cooltoolsOpen2C 生态的 Python 分析工具,2024年发表于 PLOS Comp Bio

白话解释原理

想象一下: DNA 在细胞核里不是一条直线,而是像毛线团一样折叠缠绕。有些看起来离得很远的基因,在3D空间中其实靠得很近。

Hi-C 做的事情就像是: 1. 先用"胶水"(甲醛)把空间中靠近的 DNA 片段粘在一起 2. 用"剪刀"(限制性内切酶)把 DNA 剪碎 3. 把粘在一起的断头重新"焊接"(连接) 4. 测序,看看哪些原本不相邻的片段被连在了一起 5. 连接频率越高 → 在3D空间中越近

最终得到一个"接触热图",像一张温度地图,颜色越深表示两个区域在空间中接触越频繁。


各步骤详解

第一步:Hi-C 数据预处理(HiC-Pro)

白话解释: HiC-Pro 是最经典的 Hi-C 数据处理工具,从原始 FASTQ 文件处理到接触矩阵。

# 1. 安装 HiC-Pro(推荐 conda)
conda create -n hicpro python=3.9   # 创建环境
conda activate hicpro               # 激活环境
conda install -c bioconda hicpro     # 安装HiC-Pro

# 2. 准备配置文件 config-hicpro.txt
cat > config-hicpro.txt << 'EOF'
# 基因组参考
BOWTIE2_IDX_PATH = /data/genome/bowtie2_index    # Bowtie2索引路径
REFERENCE_GENOME = hg38                            # 参考基因组名
GENOME_SIZE = /data/genome/chrom_hg38.sizes        # 染色体大小文件

# 限制性内切酶
LIGATION_SITE = AAGCTAGCTT                         # 连接位点序列(MboI)
GENOME_FRAGMENT = /data/genome/MboI_resfrag_hg38.bed  # 酶切位点文件

# 比对参数
BOWTIE2_GLOBAL_OPTIONS = --very-sensitive -L 30    # 全局比对参数
BOWTIE2_LOCAL_OPTIONS = --very-sensitive -L 20     # 局部比对参数

# 分辨率
BIN_SIZE = 5000 10000 40000 100000 500000 1000000  # 生成多个分辨率的矩阵

# 标准化
MAX_ITER = 100                                      # ICE迭代次数
FILTER_LOW_COUNT_PERC = 0.02                        # 过滤低计数bin百分比
FILTER_HIGH_COUNT_PERC = 0                          # 过滤高计数bin百分比
EPS = 0.1                                           # 收敛阈值
EOF

# 3. 准备输入数据目录结构
mkdir -p rawdata/sample1  # 创建数据目录
# 将 FASTQ 文件放入: rawdata/sample1/sample1_R1.fastq.gz, sample1_R2.fastq.gz

# 4. 运行 HiC-Pro
HiC-Pro \
    -i rawdata/ \                    # 输入目录
    -o results/ \                    # 输出目录
    -c config-hicpro.txt \           # 配置文件
    -p                               # 生成运行脚本

# 5. 提交任务(集群环境)
cd results/
bash HiCPro_step1.sh                 # 第一步:比对和配对
bash HiCPro_step2.sh                 # 第二步:构建矩阵和标准化

第二步:使用 Juicer 处理(一站式方案)

白话解释: Juicer 是 Aiden Lab 的工具,操作更简单,自动完成比对、过滤、矩阵构建和特征识别。

# 1. 安装 Juicer
git clone https://github.com/aidenlab/juicer.git  # 克隆Juicer代码
cd juicer/                                          # 进入目录

# 2. 准备参考文件
# 生成限制性内切酶位点文件
python misc/generate_site_positions.py \
    MboI \                    # 使用MboI酶
    hg38 \                    # 基因组版本
    /data/genome/hg38.fa      # 基因组FASTA文件

# 3. 准备目录结构(Juicer要求固定结构)
mkdir -p juicer_project/fastq  # 创建fastq目录
# 将FASTQ文件放入 fastq/ 目录

# 4. 运行 Juicer
bash scripts/juicer.sh \
    -d juicer_project/ \             # 项目目录
    -g hg38 \                        # 基因组
    -s MboI \                        # 限制性内切酶
    -z /data/genome/hg38.fa \        # 基因组FASTA
    -p /data/genome/hg38.chrom.sizes \  # 染色体大小
    -y restriction_sites/hg38_MboI.txt  # 酶切位点文件

# 5. 输出的 .hic 文件包含:
# - 多分辨率接触矩阵(自动生成 1kb 到 1Mb)
# - KR 标准化矩阵
# - 自动调用的 TAD(Arrowhead算法)和 Loop(HiCCUPS算法)

第三步:使用 Open2C 生态分析(Python,推荐新手)

白话解释: cooltools 是 Python 生态的 Hi-C 分析工具包,模块化设计,灵活且代码清晰。

# 安装 Open2C 工具链
# pip install cooler cooltools pairtools

import cooler       # Hi-C 数据格式处理
import cooltools    # Hi-C 分析工具
import numpy as np  # 数值计算
import matplotlib.pyplot as plt  # 绑图

# 1. 加载 .cool 文件(Hi-C 接触矩阵)
clr = cooler.Cooler("sample.mcool::resolutions/10000")  # 加载10kb分辨率
print(f"分辨率: {clr.binsize}")     # 打印分辨率
print(f"染色体: {clr.chromnames}")  # 打印染色体列表

# 2. 提取特定区域的接触矩阵
matrix = clr.matrix(balance=True).fetch("chr1:50000000-55000000")  # 提取chr1一段区域
# balance=True 使用 ICE 标准化后的数据

# 3. 可视化接触热图
plt.figure(figsize=(8, 8))              # 设置图片大小
plt.imshow(                              # 绘制热图
    np.log1p(matrix),                    # log转换使信号更均匀
    cmap="YlOrRd",                       # 黄-橙-红配色
    origin="upper"                       # 原点在左上角
)
plt.colorbar(label="log(contact)")       # 添加颜色条
plt.title("Hi-C Contact Map (chr1)")     # 标题
plt.savefig("contact_map.pdf")           # 保存图片

# 4. 计算 A/B Compartment(区室分析)
# 使用特征向量法
eigs = cooltools.eigs_cis(              # 计算顺式特征向量
    clr,                                 # cooler对象
    n_eigs=3,                            # 前3个特征向量
    phasing_track=gene_density           # 用基因密度定向
)
# eigs[0] > 0: A区室(活跃)
# eigs[0] < 0: B区室(沉默)

# 5. 计算 Insulation Score(TAD边界检测)
insulation = cooltools.insulation(       # 计算隔离分数
    clr,                                  # cooler对象
    window_bp=[100000, 200000, 500000],  # 窗口大小列表
    verbose=True                          # 显示进度
)
# insulation score 的局部最小值就是 TAD 边界

# 6. 寻找 TAD 边界
boundaries = insulation[insulation["is_boundary_100000"]].copy()  # 提取100kb窗口的边界
print(f"检测到 {len(boundaries)} 个 TAD 边界")  # 打印边界数量

第四步:Loop 检测

# 使用 Juicer 的 HiCCUPS 检测染色质环
java -jar juicer_tools.jar hiccups \
    --cpu \                              # 使用CPU(无GPU时)
    -r 5000,10000,25000 \               # 检测分辨率
    sample.hic \                         # 输入 .hic 文件
    loops_output/                        # 输出目录

# 输出文件: merged_loops.bedpe
# 包含: 环的两个锚点坐标、接触频率、显著性等信息

# 也可以使用 cooltools 检测 Loop
# python 代码:
# dots = cooltools.dots(clr, expected, max_loci_separation=10000000)

第五步:可视化

# 使用 HiCExplorer 可视化
# pip install hicexplorer

# 命令行绘制三角热图
# hicPlotMatrix \
#     --matrix sample_10kb.cool \     # 输入矩阵
#     --region chr1:50000000-55000000 \  # 区域
#     --log1p \                       # log转换
#     --colorMap YlOrRd \             # 颜色方案
#     --outFileName contact_triangle.pdf  # 输出文件

# 使用 pyGenomeTracks 绘制多轨道图
# 可以同时展示: Hi-C 热图 + TAD + Loop + ChIP-seq 信号 + 基因注释

常见报错与解决

报错原因解决方案
Low mapping rate (<30%)基因组版本不对或数据质量差确认参考基因组版本,检查 FastQC 质量
Low valid pairs ratio限制性内切酶位点文件错误确认酶切位点与实验方案一致
Memory error高分辨率矩阵太大降低分辨率,或使用 cooler 的 out-of-core 模式
No TADs detected分辨率太低或参数不合适使用 25-50kb 分辨率,调整 insulation window
Too many/few loopsHiCCUPS 参数需调整调整 FDR 阈值和局部背景窗口大小
ICE normalization failedbin 过滤过于严格放宽低计数过滤阈值

速查表

┌──────────────────────────────────────────────────────────┐
│                  Hi-C 数据分析速查                         │
├──────────────────────────────────────────────────────────┤
│ 三大处理流程:                                              │
│   HiC-Pro → allValidPairs → 稀疏矩阵                     │
│   Juicer → merged_nodups → .hic 文件                     │
│   distiller → .pairs → .cool/.mcool 文件                 │
│                                                          │
│ 常用分辨率:                                               │
│   A/B Compartment: 100kb-1Mb                             │
│   TAD: 10kb-50kb                                         │
│   Loop: 5kb-10kb                                         │
│                                                          │
│ 标准化方法:                                               │
│   ICE(迭代校正)— 最常用                                 │
│   KR(Knight-Ruiz)— Juicer 默认                         │
│   VC(Vanilla Coverage)— 简单列总和归一化                 │
│                                                          │
│ 特征检测:                                                 │
│   TAD: hicFindTADs / Insulation Score / Arrowhead        │
│   Loop: HiCCUPS / Fit-Hi-C / cooltools dots              │
│   A/B Compartment: 特征向量分解(PCA第一主成分)           │
│                                                          │
│ 可视化:                                                   │
│   Juicebox — .hic 文件交互式查看                          │
│   HiCExplorer — 命令行批量绘图                            │
│   pyGenomeTracks — 多轨道整合图                           │
│   HiGlass — 在线交互式浏览                                │
└──────────────────────────────────────────────────────────┘

面试高频问题

  1. 什么是 TAD?它在基因调控中有什么作用? 答:TAD(拓扑关联域)是基因组中自我互作频率高于与外部互作的结构域,大小通常为 200kb-2Mb。TAD 把基因和其调控元件(如增强子)限制在同一个"邻居"里,使得增强子只能调控同一 TAD 内的基因。TAD 边界通常富集 CTCF 和 Cohesin,边界的破坏可能导致增强子"越界"激活其他基因(如在某些肿瘤中看到的)。

  2. A/B Compartment 和 TAD 的区别? 答:A/B Compartment 是更大尺度的染色质区室划分(Mb级),A 区室对应活跃转录的开放染色质,B 区室对应沉默的紧缩染色质。TAD 是比 Compartment 更小的结构单元(百kb级),嵌套在 Compartment 内部。检测方法也不同:Compartment 用 PCA/特征向量法,TAD 用 insulation score 或方向性指数。

  3. Hi-C 数据为什么需要标准化?常用什么方法? 答:Hi-C 原始接触频率受多种技术偏差影响——GC含量、可比对性(mappability)、限制性内切酶位点密度等。ICE(Iterative Correction and Eigenvector decomposition)是最常用的标准化方法,通过迭代使每行/列的总和相等。KR(Knight-Ruiz)是另一种矩阵平衡方法。标准化后才能准确比较不同区域的接触频率。