Kallisto — 极速伪比对 RNA-seq 定量工具¶
一句话说明¶
Kallisto 利用伪比对(pseudoalignment)技术,仅判断读段来自哪个转录本而不计算具体位置,在普通电脑上几分钟就能完成一个样本的定量,是 Salmon 的主要竞品。
安装与配置¶
# 方法1:conda 安装(推荐)
conda install -c bioconda kallisto # 从 bioconda 安装
# 方法2:下载预编译版本
wget https://github.com/pachterlab/kallisto/releases/download/v0.51.1/kallisto_linux-v0.51.1.tar.gz
tar -xzf kallisto_linux-v0.51.1.tar.gz # 解压即用
# 验证安装
kallisto version # 当前最新 0.51.1(2024年)
特点¶
- 内存需求极低(人类转录组约 4GB)
- 单样本定量通常只需 2-5 分钟
- 支持自举(bootstrap)估计定量不确定性
核心用法¶
构建索引¶
# 构建转录本索引
kallisto index \
-i kallisto_index.idx \ # 索引输出文件名
transcripts.fa.gz # 转录本 FASTA 文件(Gencode/Ensembl)
基本定量¶
# 双端测序定量
kallisto quant \
-i kallisto_index.idx \ # 索引文件
-o quant_output \ # 输出目录
-t 16 \ # 16 线程
-b 100 \ # 100 次自举(用于下游 sleuth 差异分析)
R1.fq.gz R2.fq.gz # 双端 FASTQ 文件(不需要 -1 -2)
# 单端测序定量(必须提供片段长度信息)
kallisto quant \
-i kallisto_index.idx \
-o quant_se \
--single \ # 单端模式
-l 200 \ # 平均片段长度(需要从文库信息获取)
-s 20 \ # 片段长度标准差
-t 16 \
reads.fq.gz
进阶用法¶
# 批量处理多个样本
for sample in sample1 sample2 sample3; do
kallisto quant \
-i kallisto_index.idx \
-o quant_${sample} \
-t 8 \
-b 100 \
${sample}_R1.fq.gz ${sample}_R2.fq.gz
done
# 不做自举(快速模式,只看表达量不做差异分析)
kallisto quant \
-i kallisto_index.idx \
-o quick_quant \
-t 16 \
R1.fq.gz R2.fq.gz # 不加 -b 就不做自举
# 链特异性文库定量
kallisto quant \
-i kallisto_index.idx \
-o stranded_quant \
-t 16 \
--rf-stranded \ # dUTP 法链特异性(最常见)
R1.fq.gz R2.fq.gz
# 生成伪比对 BAM 文件(用于可视化)
kallisto quant \
-i kallisto_index.idx \
-o quant_with_bam \
-t 16 \
--genomebam \ # 输出基因组坐标的伪 BAM
--gtf genes.gtf \ # 需要 GTF 注释
--chromosomes chroms.tsv \ # 染色体长度文件
R1.fq.gz R2.fq.gz
# 查看输出结果
head quant_output/abundance.tsv
# 列:target_id | length | eff_length | est_counts | tpm
下游差异分析¶
# 方法1:用 sleuth(Kallisto 配套工具)
library(sleuth)
s2c <- data.frame(
sample = c("sample1", "sample2", "sample3", "sample4"),
condition = c("ctrl", "ctrl", "treat", "treat"),
path = c("quant_sample1", "quant_sample2", "quant_sample3", "quant_sample4")
)
so <- sleuth_prep(s2c, ~condition) # 准备数据(需要 bootstrap 结果)
so <- sleuth_fit(so) # 拟合模型
so <- sleuth_wt(so, "conditiontreat") # Wald 检验
# 方法2:用 tximport + DESeq2
library(tximport)
files <- file.path(paste0("quant_", samples), "abundance.h5")
txi <- tximport(files, type = "kallisto", txOut = TRUE)
常见问题与踩坑¶
问题1:单端测序不知道片段长度¶
原因:Kallisto 单端模式必须提供 -l(平均片段长度)和 -s(标准差)
解决:查文库质控报告(Bioanalyzer/TapeStation),或用 200 和 20 作为默认估计值
问题2:Kallisto vs Salmon 怎么选¶
对比:两者精度接近,Salmon 有 GC bias 校正;Kallisto 有配套 sleuth 差异分析
建议:用 DESeq2 做差异分析选 Salmon(tximeta 集成更好);用 sleuth 选 Kallisto
问题3:自举次数设多少¶
建议:用 sleuth 差异分析时至少 100 次(-b 100);不做差异分析可以不加 -b
问题4:定量结果中 est_counts 是小数¶
原因:Kallisto 使用 EM 算法分配多比对读段,结果可以是小数
解决:正常现象,DESeq2 和 sleuth 都能处理小数计数
速查卡片¶
| 命令/参数 | 用途 |
|---|---|
kallisto index -i idx.idx tx.fa | 构建转录本索引 |
kallisto quant -i idx -o out R1 R2 | 双端定量 |
--single -l 200 -s 20 | 单端模式(需提供片段长度) |
-b 100 | 做 100 次自举 |
--rf-stranded | dUTP 链特异性 |
--fr-stranded | 正义链特异性 |
--genomebam --gtf | 输出基因组坐标 BAM |
abundance.tsv | 定量结果(文本格式) |
abundance.h5 | 定量结果(HDF5 格式,含自举) |
-t N | 设置线程数 |