跳转至

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-strandeddUTP 链特异性
--fr-stranded正义链特异性
--genomebam --gtf输出基因组坐标 BAM
abundance.tsv定量结果(文本格式)
abundance.h5定量结果(HDF5 格式,含自举)
-t N设置线程数