跳转至

STARsolo — 单细胞RNA-seq高速比对与定量工具


一句话说明

STARsolo 是内置于 STAR 比对器的单细胞数据处理模块——把10x Chromium等平台的FASTQ数据处理成"基因-细胞计数矩阵",结果和 CellRanger 高度一致,但速度更快,不需要额外安装软件,是 CellRanger 的优秀开源替代。


安装与配置

# STAR(内含STARsolo)安装
# 方法1:conda安装(推荐,最新版STAR ≥ 2.7.11)
conda create -n starsolo python=3.9
conda activate starsolo
conda install -c bioconda star   # 安装最新STAR(包含STARsolo)

# 验证安装
STAR --version    # 应显示 2.7.11a 或更新版本

# 方法2:下载预编译二进制
wget https://github.com/alexdobin/STAR/releases/download/2.7.11b/STAR_2.7.11b.zip
unzip STAR_2.7.11b.zip
./STAR_2.7.11b/Linux_x86_64/STAR --version

# 构建STAR基因组索引(首次使用必须,约30分钟)
STAR \
    --runMode genomeGenerate \         # 基因组构建模式
    --genomeDir /data/STAR_genome_hg38 \  # 索引输出目录(需提前创建)
    --genomeFastaFiles hg38.fasta \    # 参考基因组
    --sjdbGTFfile gencode.v47.gtf \   # 基因注释GTF(用最新版)
    --runThreadN 16                    # 线程数

# 下载白名单(cell barcode白名单,10x提供)
# 10x v3白名单(约600万个barcode)
wget https://github.com/10XGenomics/cellranger/raw/main/lib/python/cellranger/barcodes/3M-february-2018.txt.gz
gunzip 3M-february-2018.txt.gz   # 解压为TXT文件

核心用法

10x Chromium v3数据(最常用)

# 标准10x v3单细胞3'分析
STAR \
    --soloType CB_UMI_Simple \         # 单细胞类型:barcode+UMI简单模式
    --soloCBwhitelist 3M-february-2018.txt \  # 10x v3 barcode白名单
    --soloCBstart 1 --soloCBlen 16 \   # barcode在R1的位置(1-16bp)
    --soloUMIstart 17 --soloUMIlen 12 \  # UMI在R1的位置(17-28bp)
    --genomeDir /data/STAR_genome_hg38 \  # 基因组索引目录
    --readFilesIn R2.fastq.gz R1.fastq.gz \  # 注意:R2在前(cDNA),R1在后(barcode+UMI)
    --readFilesCommand zcat \          # FASTQ.GZ文件解压命令
    --outSAMtype BAM SortedByCoordinate \  # 输出排序BAM
    --outSAMattributes NH HI nM AS CR UR CB UB GX GN sS sQ sM \  # SAM属性
    --runThreadN 16 \                  # 线程数
    --outFileNamePrefix starsolo_out/  # 输出目录前缀

10x Chromium v2数据

# 10x v2参数(barcode长度16bp,UMI 10bp)
STAR \
    --soloType CB_UMI_Simple \
    --soloCBwhitelist 737K-august-2016.txt \  # v2白名单
    --soloCBstart 1 --soloCBlen 16 \
    --soloUMIstart 17 --soloUMIlen 10 \       # v2 UMI是10bp(非12bp)
    --genomeDir /data/STAR_genome_hg38 \
    --readFilesIn R2.fastq.gz R1.fastq.gz \
    --readFilesCommand zcat \
    --outSAMtype BAM SortedByCoordinate \
    --runThreadN 16 \
    --outFileNamePrefix starsolo_v2_out/

同时输出RNA velocity所需的剪接/未剪接计数

STAR \
    --soloType CB_UMI_Simple \
    --soloCBwhitelist 3M-february-2018.txt \
    --soloCBstart 1 --soloCBlen 16 \
    --soloUMIstart 17 --soloUMIlen 12 \
    --soloFeatures Gene Velocyto \     # 同时输出Gene计数和RNA velocity所需数据
    --soloCellFilter EmptyDrops_CR \   # 使用EmptyDrops算法过滤空液滴(类似CellRanger)
    --genomeDir /data/STAR_genome_hg38 \
    --readFilesIn R2.fastq.gz R1.fastq.gz \
    --readFilesCommand zcat \
    --outSAMtype None \                # 不输出BAM(只要矩阵,节省空间)
    --runThreadN 16 \
    --outFileNamePrefix starsolo_velocity_out/

参数详解

参数说明常用值
--soloType单细胞数据类型CB_UMI_Simple(10x/Drop-seq)、SmartSeq
--soloCBwhitelistbarcode白名单文件3M-february-2018.txt(10x v3)
--soloCBlenbarcode长度16(10x v2/v3)
--soloUMIlenUMI长度12(v3)、10(v2)
--soloFeatures输出特征类型Gene(默认)、Velocyto(RNA velocity)
--soloCellFilter细胞过滤方法EmptyDrops_CR(推荐,类似CellRanger)
--soloUMIfilteringUMI过滤方法MultiGeneUMI_CR(多基因UMI去除)
--soloCBmatchWLtype白名单匹配方式1MM_multi_pseudocounts(类CellRanger)
--readFilesIn输入FASTQ顺序R2(cDNA)在前,R1(barcode)在后

实战案例

# 完整10x v3分析流程

GENOME_DIR="/data/STAR_genome_hg38"
WHITELIST="/data/3M-february-2018.txt"
# FASTQ文件(可以是多lane)
R1_FASTQ="sample_S1_L001_R1_001.fastq.gz"
R2_FASTQ="sample_S1_L001_R2_001.fastq.gz"

# 1. 运行STARsolo(推荐参数,类CellRanger效果)
STAR \
    --soloType CB_UMI_Simple \
    --soloCBwhitelist $WHITELIST \
    --soloCBstart 1 --soloCBlen 16 \
    --soloUMIstart 17 --soloUMIlen 12 \
    --soloCBmatchWLtype 1MM_multi_pseudocounts \
    --soloUMIfiltering MultiGeneUMI_CR \
    --soloUMIdedup 1MM_CR \
    --soloCellFilter EmptyDrops_CR \
    --soloFeatures Gene Velocyto \
    --clipAdapterType CellRanger4 \
    --outFilterScoreMin 30 \
    --genomeDir $GENOME_DIR \
    --readFilesIn $R2_FASTQ $R1_FASTQ \
    --readFilesCommand zcat \
    --outSAMtype BAM SortedByCoordinate \
    --outSAMattributes NH HI nM AS CR UR CB UB GX GN sS sQ sM \
    --runThreadN 24 \
    --outFileNamePrefix starsolo_results/

# 2. 查看输出结构
ls starsolo_results/Solo.out/Gene/
# raw/      - 未过滤矩阵(所有barcode)
# filtered/ - 过滤后矩阵(推测的真实细胞)
#   barcodes.tsv   - 细胞barcode
#   features.tsv   - 基因列表
#   matrix.mtx     - 稀疏计数矩阵

# 3. 用R/Seurat读取(与CellRanger输出兼容)
# 在R中:
# library(Seurat)
# counts <- Read10X("starsolo_results/Solo.out/Gene/filtered/")
# seurat_obj <- CreateSeuratObject(counts, project="my_project")

# 4. 统计映射率
grep "Uniquely mapped reads %" starsolo_results/Log.final.out
grep "Number of input reads" starsolo_results/Log.final.out

常见报错与解决

报错1:FATAL INPUT FILE ERROR: the total length of all sequences exceeds maximum limit - 原因:大基因组超过STAR默认限制(2GB) - 解决:构建索引时添加--genomeSAindexNbases 13(对小基因组)或增大--limitGenomeGenerateRAM

报错2:barcode识别率很低(<50%细胞有效barcode) - 原因:白名单版本与数据不匹配(v2用了v3白名单),或--soloCBlen设置错误 - 解决:10x v2用737K-august-2016.txt(16bp barcode,10bp UMI);v3用3M-february-2018.txt(16bp barcode,12bp UMI)

报错3:读入FASTQ顺序错误导致UMI识别率很低 - 原因:STARsolo要求--readFilesIn中R2(cDNA)在前,R1(barcode)在后(与常规RNA-seq相反) - 解决:确认顺序为--readFilesIn R2.fastq.gz R1.fastq.gz


速查表

命令/参数说明
--soloType CB_UMI_Simple10x Chromium数据类型
10x v3 barcode白名单3M-february-2018.txt(UMI 12bp)
10x v2 barcode白名单737K-august-2016.txt(UMI 10bp)
--readFilesIn R2 R1注意R2(cDNA)在前!
--soloCellFilter EmptyDrops_CR细胞过滤(推荐,类CellRanger)
--soloFeatures Gene Velocyto同时输出RNA velocity数据
Solo.out/Gene/filtered/过滤后矩阵目录(Seurat输入)
Solo.out/Gene/raw/未过滤原始矩阵
Log.final.out比对统计报告