733. 微生物组生长速率估计GRiD(Growth Rate InDex)¶
一句话概述:通过分析宏基因组测序覆盖度的峰谷比(peak-to-trough ratio),无需培养就能估算肠道中每种细菌"长得有多快"——相当于给每个细菌装了一个"生长速度计"。
核心知识点速查表¶
| 概念 | 白话解释 | 关键工具 |
|---|---|---|
| PTR | Peak-to-Trough Ratio,复制起点vs终点的覆盖度比值 | iRep, GRiD |
| GRiD | Growth Rate InDex,改进版PTR,可用MAG | GRiD |
| iRep | 第一代工具,需要高完整度基因组 | iRep |
| DEMIC | 基于多样本的生长速率估计 | DEMIC |
| CoPTR | 2021年新工具,整合PTR+log2比率 | CoPTR |
| 复制起点(oriC) | 细菌DNA复制的起始位置 | Ori-Finder |
| 覆盖度梯度 | 正在复制的基因组,起点处覆盖度更高 | 基础概念 |
一、原理详解(白话版)¶
1.1 为什么覆盖度能反映生长速率?¶
细菌的DNA复制有一个特点: 1. 从复制起点(oriC)开始复制 2. 两个复制叉向两边移动 3. 最后在复制终点(ter)汇合
关键点:如果一个细菌正在快速分裂: - 复制起点附近的DNA已经复制了好几份 → 测序覆盖度高 - 复制终点附近的DNA还只有一份 → 测序覆盖度低
慢速生长的细菌:
oriC ████████████████████████████████ ter
覆盖度很均匀,PTR ≈ 1
快速生长的细菌:
oriC ████████████████████████████████ ter
████████████
████████
覆盖度呈梯度分布,PTR >> 1
1.2 GRiD vs iRep的区别¶
| 特性 | iRep | GRiD |
|---|---|---|
| 输入要求 | 需要高完整度MAG(>75%) | 可用不完整MAG或参考基因组 |
| 最低覆盖度 | ≥5x | ≥0.2x |
| 多基因组处理 | 手动逐个 | 批量处理+数据库模式 |
| 准确性 | 在高质量MAG上好 | 更稳健,支持低质量MAG |
| 速度 | 慢 | 快(支持多线程) |
二、GRiD安装与使用¶
2.1 安装¶
# 方法一:conda安装(推荐)
conda create -n growth python=3.8 # 创建专用环境
conda activate growth # 激活环境
conda install -c bioconda grid # 从bioconda安装GRiD
# 方法二:GitHub安装
git clone https://github.com/ohlab/GRiD.git # 克隆仓库
cd GRiD # 进入目录
bash setup.sh # 运行安装脚本
# 依赖检查
which bowtie2 # 检查bowtie2是否安装(比对工具)
which samtools # 检查samtools是否安装(BAM处理)
which bedtools # 检查bedtools是否安装(区间操作)
Rscript -e "library(dplyr)" # 检查R包是否可用
2.2 构建参考数据库¶
# ===== 模式一:使用参考基因组数据库 =====
# 适合有已知菌种的分析
# 准备参考基因组目录
mkdir -p grid_database/ # 创建数据库目录
# 将参考基因组fasta文件放入目录
cp reference_genomes/*.fna grid_database/ # 复制参考基因组文件
# 构建GRiD数据库
update_database.sh -d grid_database/ \ # 输入:参考基因组目录
-g grid_db # 输出:GRiD数据库前缀名
# ===== 模式二:使用MAG =====
# 适合没有参考基因组的未知菌种
# 直接用MAG作为参考
# MAG文件放在一个目录里即可
ls mags_directory/ # 确认MAG文件都在这个目录
# bin.1.fa bin.2.fa bin.3.fa ...
2.3 运行GRiD分析¶
# ===== 单样本模式 =====
grid single \
-r reads_R1.fastq.gz \ # 输入:正向reads(质控后的)
-e fastq \ # 输入文件格式
-d grid_db \ # 参考数据库路径
-o output_single/ \ # 输出目录
-n 8 # 使用8个线程加速
# ===== 多样本模式(推荐) =====
grid multiplex \
-r reads_directory/ \ # 输入:包含多个样本reads的目录
-e fastq \ # 输入文件格式
-d grid_db \ # 参考数据库路径
-o output_multi/ \ # 输出目录
-n 16 \ # 使用16个线程
-p # 输出每个样本的PDF图
# ===== 使用MAG的模式 =====
grid single \
-r reads_R1.fastq.gz \ # 输入:原始reads
-e fastq \ # 格式
-g mags_directory/ \ # 使用MAG目录替代参考数据库
-o output_mag/ \ # 输出目录
-n 8 # 线程数
2.4 结果解读¶
# GRiD输出文件结构
# output/
# ├── sample1.GRiD.txt # 主结果文件
# ├── sample1.GRiD.pdf # 覆盖度分布图
# └── sample1.GRiD.filtered.txt # 过滤后的可靠结果
# 查看结果
cat output_single/sample1.GRiD.txt
# Genome GRiD Coverage Species_heterogeneity
# Ecoli_K12 1.82 15.3 0.12
# Bfragilis 1.15 8.7 0.05
# Lactobacillus_r 2.34 22.1 0.08
# ===== 用Python可视化GRiD结果 =====
import pandas as pd # 导入数据处理包
import matplotlib.pyplot as plt # 导入绑图包
import seaborn as sns # 导入增强绑图包
import numpy as np # 导入数值计算包
# 读取多个样本的GRiD结果
import glob # 导入文件匹配模块
results = [] # 存储所有结果
for f in glob.glob("output_multi/*.GRiD.txt"): # 遍历所有结果文件
sample = f.split("/")[-1].replace(".GRiD.txt", "") # 提取样本名
df = pd.read_csv(f, sep="\t") # 读取结果表
df["Sample"] = sample # 添加样本名列
results.append(df) # 添加到结果列表
all_results = pd.concat(results) # 合并所有结果
# 过滤:只保留覆盖度>=1x且GRiD值合理的结果
filtered = all_results[
(all_results["Coverage"] >= 1) & # 覆盖度至少1x才可靠
(all_results["GRiD"] >= 1) & # GRiD值不能小于1(物理意义上不可能)
(all_results["GRiD"] <= 10) & # GRiD值太大通常不可靠
(all_results["Species_heterogeneity"] < 0.3) # 种内异质性太高说明不是纯菌
]
# 绘制生长速率热图
pivot = filtered.pivot_table(
index="Genome", # 行:菌种名
columns="Sample", # 列:样本名
values="GRiD", # 值:生长速率
aggfunc="mean" # 聚合:取平均
)
plt.figure(figsize=(14, 8)) # 设置画布
sns.heatmap(pivot, cmap="RdYlBu_r", center=1.5, # 绘制热图,红色=快速生长
annot=True, fmt=".2f", # 显示数值
vmin=1, vmax=4) # 设置色标范围
plt.title("Bacterial Growth Rates (GRiD) Across Samples") # 标题
plt.xlabel("Sample") # x轴标签
plt.ylabel("Bacterial Species") # y轴标签
plt.tight_layout() # 自动调整
plt.savefig("growth_rate_heatmap.png", dpi=300) # 保存图片
plt.show() # 显示
# 绘制分组箱线图(疾病vs健康)
# 假设样本名包含分组信息
filtered["Group"] = filtered["Sample"].apply(
lambda x: "T2D" if "T2D" in x else "Healthy" # 根据样本名判断分组
)
plt.figure(figsize=(10, 6))
top_species = filtered.groupby("Genome")["GRiD"].mean().nlargest(10).index # 取Top10菌种
plot_data = filtered[filtered["Genome"].isin(top_species)] # 筛选数据
sns.boxplot(data=plot_data, x="Genome", y="GRiD", hue="Group") # 绘制箱线图
plt.xticks(rotation=45, ha="right") # 旋转x轴标签
plt.ylabel("Growth Rate (GRiD)") # y轴标签
plt.title("Growth Rate Comparison: T2D vs Healthy") # 标题
plt.tight_layout()
plt.savefig("growth_rate_comparison.png", dpi=300) # 保存
plt.show()
三、替代工具:CoPTR¶
CoPTR是2021年发表的改进工具,整合了多种PTR方法的优点:
# 安装CoPTR
pip install coptr # 安装CoPTR
# 第一步:建立参考索引
coptr index \
reference_genomes/ \ # 输入:参考基因组目录
coptr_ref # 输出:索引前缀
# 第二步:比对reads到参考基因组
coptr extract \
sample.bam \ # 输入:比对好的BAM文件
coptr_ref \ # 参考索引
sample.pkl # 输出:提取的覆盖度信息
# 第三步:估算生长速率
coptr estimate \
extract_output/ \ # 输入:所有样本的pkl文件目录
coptr_results.csv # 输出:生长速率结果表
四、常见报错与解决¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
GRiD value < 1 | 覆盖度太低或基因组不完整 | 过滤Coverage<1x的结果 |
High species heterogeneity | 参考基因组包含多个近缘株 | 使用heterogeneity<0.3的结果 |
Bowtie2 index not found | 数据库未正确构建 | 重新运行update_database.sh |
No reads mapped | reads与参考基因组不匹配 | 检查物种是否在数据库中 |
R package not found | 缺少R依赖 | Rscript -e "install.packages('dplyr')" |
Memory error | 参考数据库太大 | 减少参考基因组数量或增加内存 |
五、面试高频问题¶
Q1: PTR方法的基本假设是什么?¶
A: 假设细菌基因组只有一个复制起点,且复制是双向的。因此正在复制的基因组中,越靠近复制起点的区域覆盖度越高。PTR = oriC覆盖度 / ter覆盖度。
Q2: GRiD值如何解读?¶
A: GRiD=1表示该菌不在复制(静止状态),GRiD=2表示平均每个细胞有2个复制叉,即正在活跃生长。通常GRiD>1.5认为是"活跃生长"。
Q3: 这个方法的局限性?¶
A: ①需要足够的测序深度(至少1x覆盖度);②不适用于多复制起点的古菌;③混合菌株会干扰结果;④不能区分"长得快但数量少"和"长得慢但数量多"。
六、速查表¶
# ===== GRiD速查 =====
# 安装
conda install -c bioconda grid
# 建库
update_database.sh -d genomes/ -g grid_db
# 运行(单样本)
grid single -r reads.fq.gz -e fastq -d grid_db -o output/ -n 8
# 运行(多样本)
grid multiplex -r reads_dir/ -e fastq -d grid_db -o output/ -n 16
# 结果过滤标准
# Coverage >= 1x
# GRiD >= 1 且 <= 10
# Species_heterogeneity < 0.3
# ===== CoPTR速查 =====
pip install coptr
coptr index ref_genomes/ coptr_ref
coptr extract sample.bam coptr_ref sample.pkl
coptr estimate extract_dir/ results.csv
# ===== 关键文献 =====
# GRiD: Emiola & Oh, 2018, Nature Communications
# iRep: Brown et al., 2016, Nature Biotechnology
# CoPTR: Kundu et al., 2022, Genome Biology