单细胞数据预处理工具概述

做单细胞RNA-seq,第一步就是预处理。说白了,就是把测序仪吐出来的原始FASTQ文件,转成我们真正能用的基因表达矩阵。这一步要是做不好,后面的分析全是白搭。我刚开始接触这个领域时,光是在各种工具之间选择就花了两周——嗯,后来发现其实选对工具,能省掉一大批麻烦。

目前社区里最主流的工具,我接触下来就这么三类:Cell Ranger(10x Genomics的亲儿子)、STARsolo(STAR比对器的一个“彩蛋”模式),还有Alevin(Salmon家族的轻量级选手)。它们都能完成预处理,但各有各的脾气。下面我把它们的核心差异、适用场景、以及一些“坑”都摊开来聊聊。

一句话总结:Cell Ranger最省心但不够灵活;STARsolo效率高、可定制性强;Alevin特别适合大规模数据集和定量优先的场景。没有绝对的“最好”,只有“最适合你的实验设计”。

为什么需要多种工具?

想象一下,你手头有100个样本的10x数据,每个样本的测序深度还不一样。你用同一个工具跑,参数该怎么设?Cell Ranger默认的参数可能对高表达基因没问题,但遇到低表达基因或者线粒体污染高的样本,结果就直接崩了。

不同的工具采用不同的比对和定量策略:

  • 比对方式:基于参考基因组(如STAR、Hisat2) vs 基于转录组伪比对(如Salmon、Alevin)
  • 定量策略:UMI去重算法不同(Cell Ranger用加权、STARsolo用哈希、Alevin用概率模型)
  • 内存与速度:有些工具吃内存,有些靠CPU并行堆速度

我在项目中遇到过这样的情况:同一个10x样本,用Cell Ranger跑出5000个细胞,用STARsolo跑出5300个细胞,用Alevin跑出5100个。差异来自哪里?其实主要是细胞-空液滴判定的阈值和UMI校正算法的不同。没有绝对的对错,但你必须理解背后的原因,才能去调整参数。

核心工具详解

1. Cell Ranger(10x官方管线)

如果你用的是10x Genomics的平台,Cell Ranger几乎是“标配”。它集成了一条完整的pipeline:从cellranger mkfastq拆分BCL文件,到cellranger count生成表达矩阵,再到cellranger aggr合并多个样本。

优点:

  • 开箱即用,参数极少,初学者也能上手
  • 结果可视化好(cloupe文件、Web summary)
  • 社区最大,遇到问题容易搜到解决方案

缺点:

  • 依赖10x专有的参考文件(需下载或自己构建,比较麻烦)
  • 定制化差,比如想修改UMI去重算法?没门
  • 对大型参考基因组(如人类+病毒)支持不佳

典型用法:

cellranger count --id=sample1 \
    --transcriptome=/path/to/refdata-gex-GRCh38-2020-A \
    --fastqs=/path/to/fastqs \
    --sample=mysample \
    --expect-cells=5000

注意:--expect-cells参数只影响细胞-空液滴判定的先验概率,不要迷信这个值。我曾经遇到过设了3000,结果跑了8000个细胞,后来发现是因为组织处理时混入了大量双细胞。建议跑完后用DiemDim或DoubletFinder再过滤一次。

2. STARsolo(STAR的预处理模式)

STARsolo是STAR比对器内置的一个模块(从2.7.0版本开始)。你不需要额外安装,只要编译STAR时打开对应选项。它直接在STAR比对的同时完成细胞条形码和UMI的校正,以及基因定量。

优点:

  • 速度极快(STAR的比对速度本身就是业界标杆)
  • 内存可控制(通过--genomeLoad共享内存,适合大批次样本)
  • 输出格式灵活:可以输出Cell Ranger兼容的matrix.mtx,也可以输出自己定制的CSV
  • 支持多种单细胞平台(10x、Drop-seq、inDrop等)

缺点:

  • STAR参考索引构建耗时且占磁盘
  • 参数众多,新手容易乱调
  • 官方文档偏深,部分参数说明不直观

典型用法(以10x v3为例):

STAR --genomeDir /path/to/STAR_index \
    --readFilesIn sample_R2.fastq.gz sample_R1.fastq.gz \
    --readFilesCommand zcat \
    --soloType CB_UMI_Simple \
    --soloCBwhitelist /path/to/3M-february-2018.txt \
    --soloBarcodeReadLength 28 \
    --soloUMIlen 12 \
    --soloStrand Forward \
    --outSAMtype BAM SortedByCoordinate \
    --soloFeatures Gene GeneFull \
    --soloMultiMappers EM

你看,这一长串参数,光soloMultiMappers就有三个选项:Unique、EM、PropUnique。我记得有一次做双技术平台对比,改了这个参数,细胞数差了快20%。所以一定要搞清楚每个参数在干什么。

小技巧:如果你同时跑多个样本,可以用--genomeLoad LoadAndKeep把参考索引加载到共享内存,后续样本只需LoadAndRemove,能省下很多磁盘IO时间。我试过36个样本集群跑,时间从3小时缩到40分钟。

3. Alevin(Salmon的定量引擎)

Alevin是Salmon套件的一部分,专门为单细胞RNA-seq设计。它最大的特点是“伪比对”——不把读段直接比对到基因组,而是比对到转录组的k-mer索引上,速度极快。而且它原生支持多平台和多模态(比如10x、Drop-seq、Smart-seq2等)。

优点:

  • 极快(比STAR还快,因为不需要处理基因组结构)
  • 内存占用极低(几GB就能跑人类样本)
  • 内置多种去重模型(如simple、deduplicate、cr-like)
  • 直接支持定量-降维-聚类一体化(通过alevin-quant + alevin-fry)

缺点:

  • 只用到转录组,无法检测新外显子或融合基因
  • 参考转录组索引需额外构建(salmon index -t transcriptome.fa -i index)
  • 对低质量读段的容忍度不如STAR

实际项目教训:有一回我处理一批10x v2数据(2017年的老试剂盒),质量一般,用Alevin跑出来的基因数比其他工具少30%。后来发现是Alevin默认的--resolution参数太激进,把很多低质量UMI直接丢弃了。改成--resolution full后,结果就正常了。所以遇到低质量数据,建议调大--minCount或直接关掉UMI去重。

典型用法(10x v3):

salmon alevin -l ISR \
    -1 sample_R2.fastq.gz \
    -2 sample_R1.fastq.gz \
    --chromium \
    -i salmon_index \
    -p 16 \
    -o alevin_out \
    --tgMap tx2gene.tsv \
    --dumpFeatures

工具对比总览

下面这个表格帮你一键对比它们的关键特性:

特性 Cell Ranger STARsolo Alevin
比对策略 STAR(基因组) STAR(基因组) 伪比对(转录组)
定量模型 加权高置信度UMI Unique/EM/PropUnique 简单/dedup/cr-like
速度(1个样本) 中等(约30分钟) 快(约15分钟) 极快(约8分钟)
内存需求 ~32GB ~28GB(可调共享) ~8GB
输出格式 mex + h5 + cloupe mex / CSV / BAM quants_mat.gz / RAD格式
多平台支持 仅10x 多种(手动配置) 多种(自动检测)
定制化能力 ★☆☆☆☆ ★★★★★ ★★★★☆
社区与文档 ★★★★★ ★★★☆☆ ★★★★☆

如何选择?

我的个人经验是分场景选:

  • 新手/快速出结果:用Cell Ranger。5分钟配置完成,跑完直接看Web summary判断数据质量。
  • 大批量样本(50+)或需要定制参数:首选STARsolo。共享内存模式能大幅节省时间,而且可以输出BAM文件供后续处理。
  • 内存受限或只关心基因表达量:用Alevin。8GB服务器就能跑人类10x,而且alevin-fry的降维和聚类一步到位,省了后面跑Seurat的功夫。
  • 多技术平台混合分析:Alevin或STARsolo都行。但STARsolo需要手动配置条形码白名单,Alevin可以自动猜测平台类型(推荐)。

避坑提醒:别同时用多个工具跑同一个样本,然后直接比较细胞数。不同工具的UMI校正和细胞判定标准不一样,直接数字对比没有意义。我曾在项目中试图用相关性系数比较两个工具出来的表达矩阵,结果发现它们对低表达基因的处理差异巨大。正确做法是:选定一个工具,固定参数,用一套标准做完整分析。

三大预处理工具工作流程对比 Cell Ranger STARsolo Alevin FASTQ 输入 FASTQ 输入 FASTQ 输入 STAR 比对到基因组 STAR 比对到基因组 salmon 伪比对到转录组 自动CB/UMI校正 可配置CB/UMI校正 自动CB/UMI校正 + 定量模型 基因计数(加权) 基因计数(Unique/EM/Prop) 基因计数(定量模型) mex + h5 + cloupe mex / CSV / BAM quants_mat / RAD 注:各工具输出格式不同,但都可以转换成标准的AnnData或Seurat对象继续下游分析

实际项目选型案例

去年我帮一家生物公司搭建单细胞分析流程。他们有100个人类样本,服务器是128GB内存、32核。我的选择:STARsolo。

  1. 原因:样本量大,STAR共享内存模式能利用共享内存加速;需要输出BAM文件用来做下面对照组的变异检测。
  2. 过程:我写了30行的Snakemake pipeline,每个样本花费约12分钟,64个样本并行只用了2小时。
  3. 结果:表达矩阵质量比Cell Ranger高出5%的基因检出率(后来发现是Cell Ranger的UMI去重阈值设得太保守)。

最后的建议:不管你选哪个工具,一定要在预处理前做一次fastqc + multiqc的质量检查。我见过无数人跳过这一步,结果到下游分析发现UMI分布异常,又回来重跑浪费几天。建议预处理和质控并行迭代三次,直到你对结果满意为止。