宏基因组 - (1)基因预测与基因相对丰度的计算

-3.仅作笔记使用

我所用到的所有脚本可以+Q 840842906索

简单介绍一下方向也可以,说不定以后能互相帮忙~

注明来意,请实名  学校+名字

-2.两组样品,目的是通过宏基因组找到两组间的差异以及差异的成因

-1.原理

0. Megahit/SPAdes组装

1.基因预测

1.1 软件安装 - metagenemark/prodigal

参考:https://www.jianshu.com/p/b8d0cd39bb67    ---  genemark

          http://wap.sciencenet.cn/blog-2379401-1085480.html      ---    https://github.com/hyattpd/Prodigal

1.2

genemark参考:https://www.sohu.com/a/207036304_99908466

for i in {B2A,B3A......}          (下面会省略,$i的意思即中括号内的内容)

do

prodigal -a $i/$i.pro.fa -d $i/$i.gene.fa -f gff -g 11 -i $i/$i.fasta -p meta -s $i/$i.stat_Potential.gene -m -q

done

-i是输入文件即组装好的contig,这里不同的文章会过滤掉不同长度的contig,过滤掉不同长度的预测结果的CDS,可以自行查阅文献

我这里以两篇学位论文为例:  (当然我没有混组装,我是每个样本组装一次,预测一次, 然后把所有样本的预测结果cat到一起

[1]和凤平. 东北虎肠道微生物的宏基因组学研究[D].东北林业大学,2019.DOI:10.27009/d.cnki.gdblu.2019.000031.
[1]林红梅. 西北太平洋表层浮游微生物群落的宏基因组学研究[D].山东大学,2020.DOI:10.27272/d.cnki.gshdu.2020.003334.


1.3 然后需要给预测的基因重命名,过滤长度

java -ea -Xmx34677m -Xms34677m -cp /data/01/user164/software/bbmap/current/ jgi.RenameReads in=test.fa out=out.fa ow=t prefix=X minscaf=100 ignorejunk

prefix=$i.gene就是把基因重命名为 B2A.gene.1  B2A.gene.2 

minscaf=100即过滤掉长度小于100      in=即输入文件  out=即输出文件

1.4  把所有样品,重命名/长度过滤后的gene.fa  cat到一起


2.CD-Hit去冗余

cd-hit -i input.fa -o out.fa -c 0.95 -d 0 -aL 0.9 -uL 0.05 -aS 0.9 -T 80 -M 15000

用了-T 80,上了学校的超算, 一下午完事;;之前用的-T 14,在集群上很慢要一个周

参数的解释https://www.sohu.com/a/207036304_99908466, 个人感觉参数可以跟着上面照抄


3.相对丰度的计算和长度标准化

3.1 ref : https://www.jianshu.com/p/a28c1729168e?ivk_sa=1024320u  这个链接里面相对丰度的计算是用的SOAP,但是我没有找到SOAP相关的任何信息,所以用的bwa mem,包括还有Salmon、bowtie2+bbmap也可以做相同的东西

bwa mem -p 去完冗余的结果 样品1.1.fq.gz 样品1.2.fq.gz > 样品1.sam

得到 每个基因在样品1上的比对情况

3.2

grep -v ^@ $i.aln.sam | cut -f 3 | sort | uniq-c | awk ‘BEGIN{ FS=“ ”;OFS=“,” }{print $2,$1}’ | awk ‘BEGIN{ FS=“,”;OFS=“,”}{ if ($2 > 2) print $1,$2;else print $1,“0”}’ > $i.count.csv    #获取到每个gene比对到的reads数量,比对数小于等于2的直接标0, 接着进行长度标准化

最后结果长这样,第二列就是比对上的reads数


3.3 ref : https://www.jianshu.com/p/a28c1729168e?ivk_sa=1024320u  这个链接里面相对丰度的计算是用的SOAP,但是我没有找到SOAP相关的任何信息,所以用的bwa mem

参考自12年的Nature:qin2012,doi:10.1038/nature11450

然后还需要获取非冗余基因集(即CDHIT的结果)每个gene的长度:

bioawk -c fastx ‘{print $name, length($seq)}‘ 去冗余的结果 | tr “\t” “,” > gene.length.csv      第一列是基因名/序列名,第二列是该序列长度



然后获取gene.count.csv中每个gene的长度

大体上就是用gene.count.csv的第一列和gene.length,csv的第一列匹配,匹配得上,就输出gene.count.csv的每一列(基因名,count)和gene.length,csv的第二列(基因长度)

如果匹配不上,就输出gene.count.csv的第一列, 该基因的count为0,长度

python jiyinfengdu.py $i.count.csv $i > $i.tmp

大体上就是得到这么一个文件,这些基因在一个样本上比对上的reads数和该基因的长度

现在再根据上面那个标准化的公式来算就很简单了,很多方法都能实现


第一列是基因名,第二列这个基因在这个样品中的相对丰度




3.4:再将每个样本的数据合到一块即可

paste B2A.tmp B3A.tmp B4A.tmp > end.tsv

end.tsv


后续就可以进行可视化、功能注释等

待续







用到的脚本

jiyinfengdu.py




2022.4更新

关于基因相对丰度的计算,又发现了一些其他的方法 (宏基因组的定量还没有一个很好很权威的方法

本文所用方法已经是12年的了(虽然才看到几篇文章还在用)

1.MOCAT2  (16年发在Bioinformatics)

好就好在方便很多,组装预测丰度一条龙全包了

2.Wen, C., Zheng, Z., Shao, T., Liu, L., Xie, Z., Le Chatelier, E., ... & Li, H. (2017). Quantitative metagenomics reveals unique gut microbiome biomarkers in ankylosing spondylitis. Genome biology

这篇发的好一点,也给出了一个方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容