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 |
--soloCBwhitelist | barcode白名单文件 | 3M-february-2018.txt(10x v3) |
--soloCBlen | barcode长度 | 16(10x v2/v3) |
--soloUMIlen | UMI长度 | 12(v3)、10(v2) |
--soloFeatures | 输出特征类型 | Gene(默认)、Velocyto(RNA velocity) |
--soloCellFilter | 细胞过滤方法 | EmptyDrops_CR(推荐,类似CellRanger) |
--soloUMIfiltering | UMI过滤方法 | 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_Simple | 10x 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 | 比对统计报告 |