TransDecoder那一步最终得到了*.cds序列,之后就需要用到salmon进行下面操作
salmon

salmon介绍

Salmon是不基于比对计数而直接对基因进行定量的工具,适用于转录组、宏基因组等的分析。Salmon通过许多不同的创新来提高其准确性和速度,包括使用选择性比对(传统读取比对中的准确但快速计算的代理)以及大规模并行的随机折叠变分推理。

其优势是:

  1. 定量时考虑到不同样品中基因长度的改变(比如不同isoform的使用)
  2. 速度快、需要的计算资源和存储资源小
  3. 敏感性高,不会丢弃匹配到多个基因同源区域的reads
  4. 可以直接校正GC-bias
  5. 自动判断文库类型

使用Salmon

salmon有两种“操作模式”。首先,要求您为转录组建立索引,但随后需要直接处理读取。第二种模式仅要求您提供转录组的FASTA文件和包含一组比对的.sam.bam

准备转录组索引(mapping-based mode)

生成decoy-aware transcriptome的方法有两种:

  • 第一种方法是通过将你想要索引的注释转录本映射到生物体基因组的hard-masked version来计算一组诱饵序列。可以通过minimap2来实现或者使用generateDecoyTranscriptome.sh脚本来实现

  • 第二种是将生物的整个基因组用作诱饵序列。这可以通过将基因组连接到要索引的转录组的末端并填充decoys.txt染色体名称的文件。关于如何准备这种诱饵序列的详细说明可以在这里找到。

如果不使用预先计算的索引,则按以下方式运行salmon

1
salmon index -t transcripts.fa -i transcripts_index

定量(mapping-based mode)

以使用Salmon命令直接针对此索引来量化任何一组读取(say, paired-end reads in files reads1.fq and reads2.fq)quant:

1
salmon quant -i transcripts_index -l <LIBTYPE> -1 reads1.fq -2 reads2.fq --validateMappings -o transcripts_quant

如果使用的是单端测序reads,则将它们带有如下-r标记:

1
salmon quant -i transcripts_index -l <LIBTYPE> -r reads.fq --validateMappings -o transcripts_quant

向Salmon提供多个读取文件

建立索引

通过前面的trandecoder得到序列LXZ_30sample_longest.cds.fa

1
salmon index -t LXZ_30sample_longest.cds.fa -i LXZ_30sample_longest.cds.fa_index -p 20

通过教程(一)教程(二)的处理之后得到的序列为例:

1
2
3
4
5
LXZ_1_A_1.cor.p.fq.gz    LXZ_1_A_2.cor.p.fq.gz
LXZ_2_B_1.cor.p.fq.gz LXZ_2_B_2.cor.p.fq.gz
LXZ_3_C_1.cor.p.fq.gz LXZ_3_C_2.cor.p.fq.gz
LXZ_4_D_1.cor.p.fq.gz LXZ_4_D_2.cor.p.fq.gz
LXZ_5_E_1.cor.p.fq.gz LXZ_5_E_2.cor.p.fq.gz

整理样本信息表,命名为sampleFile,内容如下:

1
2
3
4
5
6
Samp    conditions    individual
LXZ_1_A LXZ_ 1_A
LXZ_2_B LXZ_ 2_B
LXZ_3_C LXZ_ 3_C
LXZ_4_D LXZ_ 4_D
LXZ_5_E LXZ_ 5_E

循环定量多个样品的表达量

采用for循环进行批量定量

1
for samp in `tail -n +2 sampleFile | cut -f 1`; do salmon quant -l A -1 ${samp}_1.cor.p.fq.gz -2 ${samp}_2.cor.p.fq.gz  -i /home/lixingze/data/salmon/test/LXZ_30samples_longest.cds.fa_index -o ${samp}/${samp}.salmon.count -p 20  >${samp}.salmon.log 2>&1; done &  

最后可以批量在每个样本下面生成对应名称的文件每个文件中的quant.sf即为定量结果,以下为示例:

1
2
3
4
5
6
7
Name    Length  EffectiveLength TPM     NumReads
Name1 13476 13184.752 22.536164 5948.000
Name2 12195 11903.752 0.000000 0.000
Name3 12174 11882.752 0.000000 0.000
Name4 10890 10598.752 0.000000 0.000
Name5 9384 9092.752 26.711841 4862.036

最后如果要将所有样品做成矩阵可以进行提取TPM那一列,最后合并

1
2
3
4
5
6
awk ‘ {print $4} ‘ quant.sf >quant.sf_extracted 
#表明提取第四列的内容`quant.sf_extracted`为输出文件可以自定义命名,提取完成之后合并的话,修改TPM名称为对应样本名称
awk ‘ {print $1} ‘ quant.sf >ID
#提取文档第一列ID名称
paste id quant.sf_extracted quant.sf_extracted > final_matrix
#将所有的提取文件合并在一起生成最终的矩阵,可通过WGCNA来进行共表达分析

最终处理完成!

整理Salmon定量文件用于DESeq2差异基因鉴定

此步骤参考生信宝典公众号相关内容,具体内容本文不在复述,有需要的可以访问此处
大致内容为:
找到Salmon的输出文件并压缩起来,用于下载到本地进行差异分析。

1
2
3
4
# 列出salmon的输出文件
find . -name quant.sf
# 这个压缩包下载解压到本地
zip quant.sf.zip `find . -name quant.sf`

./LXZ_1_A.salmon.count/quant.sf
./LXZ_2_B.salmon.count/quant.sf
./LXZ_3_C.salmon.count/quant.sf
./LXZ_4_D.salmon.count/quant.sf
./LXZ_5_E.salmon.count/quant.sf

生成辅助文件,指出每个样品对应的自己的quant.sf文件,便于导入tximport包。

1
2
3
4
5
# 生成一个两列文件方便R导入
# xargs接收上一步的输出,按批次提供给下游程序作为输入
# -i: 用{}表示传递的值
cut -f 1 sampleFile | xargs -i echo -e "{}\t{}/{}.salmon.count/quant.sf" >salmon.output
head salmon.output

重要选项说明

Salmon向用户提供了许多有用的可选命令行参数,通过salmon quant -h查看

-p/--threads

设置线程数,根据配置自行选择

--validateMappings

在将测序读段映射到转录组时启用选择性比对。这可以提高映射的敏感性和特异性,结果可以提高定量准确性。

--useEM

使用“标准” EM算法代替变量贝叶斯EM算法来优化丰度估计。

--seqBias

能够学习和纠正输入数据中特定于序列的偏差。默认情况下,Salmon使​​用从输入开始的1,000,000次读取来学习特定于序列的偏差参数。如果要更改从中学习模型的样本数,可以使用--numBiasSamples 参数。

-l A/--libType A

基于对齐方式的自动库类型检测,自动判断文库类型,尤其适用于链特异性文库.

--gcBias

校正测序片段GC含量,获得更准确的转录本定量结果

参考信息

如果有需要更详细的了解软件的具体内容请参照salmon官方文档,以及github。

点击前往Salmon官方文档 点击返回主页