CropGS-Hub:用于主要作物基因组预测的基因型和表型资源综合数据库
这个网站主要提供的功能有:
- 该数据库提供了包括玉米、水稻、小米、陆地棉、大豆、鹰嘴豆、油菜、小米这些物种的基因型SNP和表型文件下载。
- 可以用户提交SNP文件,预测表型。SNP表型需要由SNPGT创建。
- 用户上传SNPGT创建的基因型文件,和表型文件,使用网站在线调用贝叶斯模型、LightGBM、GBLUP、rrBLUP模型进行模型训练,然后即可获得通过自己的基因型的训练得到的模型。
要求上传的训练模型的时候SNP的数量不能超过5万行,样本数不超过1000个。 - 还针对玉米和水稻提供了杂交设计平台,要求输入的亲本数量不超过50个。
作者开发的SNPGT工具提供了win和linux版。
- Windows https://github.com/Min-Zer0/WinSNPGT
- Linux https://github.com/JessieChen7/LinSNPGT
实现的功能是从下机测序数据到基因型获取这个功能。
要输入基因型SNP文件对表型进行预测时
需要的基因型(测试集)格式如下:
#CHROM POS Line1 line2 ...
1 1077 T T ...
1 12127 G G ...
... ... ... ... ...
10 1299332 T A ...
10 1299513 G G ...
第1列是染色体编号,第2列是SNP的物理位置,第三列开始即为样本在该位置的碱基类型。
要训练自己的模型时
需要提供的(训练集)基因型文件的格式如下:
#CHROM POS REF ALT Sample001 Sample002 Sample003 ...
1 8077 A T A A A ...
1 9233 T C T T T ...
1 12911 C T C C C ...
1 28126 T C C T T ...
1 44681 C T T C C ...
1 44693 T G G T T ...
... ... ... ... ... ... ... ...
第1列染色体编号,第2列snp物理位置,第3列参考基因组的碱基,第4列是变异的碱基,第5列开始是样本在该位置的碱基类型。
需要提供的表型文件的格式如下:
LINE Plant_height Panicle_length ...
Sample001 139.333 26.178 ...
Sample002 128.889 29.420 ...
Sample003 106.426 27.567 ...
训练完成后,使用的测试集和上面的测试集的基因型格式是一样的。
基因型数据应采用代表四个核苷酸的碱基“A”、“G”、“C”和“T”的形式。杂合基因型应以“H”表示,未知或缺失基因型应以“.”表示。
注意:一定要注意基因型的参考基因组是否一致,如果你的SNP和数据库的参考基因组不一致,有2种方法解决。
- 使用作者数据库的参考基因组文件(https://github.com/JessieChen7/LinSNPGT),使用SNPGT对你的测序文件从头分析获得基因型文件。
- 使用你自己的基因型和表型,从头训练你自己的模型。只不过基因型数量限制为5万个snp,样本数量限制为1000个。如果你的SNP或样本数量超过阈值,则只能使用方法1。
限制样本数和SNP数,一方面是为了降低服务器运算开销,另一方面是因为规模足够大之后,这里提供的6种建模方法可能已经不能获得最优的预测结果了,此时可能就需要深度学习的模型了。
下面以棉花为例,使用LinSNPGT来进行实验。
LinSNPGT依赖的软件列表如下:
- Python3
- bowtie2
- samtools
- java8
- seqtk (SNPGT-bulid依赖此软件)
使用作者提供的基因组参考文件,进行分型
把下载的基因组参考压缩文件tar.gz放入01.Reference_Genome文件夹中,把你的下机数据修改为test1_1.fastq.gz
和test1_2.fastq.gz
这种格式。
SNPGT.config的内容如下
#=================== Software Path =======================#
Java_Path=./jdk/bin/java
Bowtie2_Path=bowtie2
Samtools_Path=samtools
#=================== LinSNPGT Config =======================#
* [Project]
Project_Name=Cotton
* [Species and Dataset]
RefDataSet_File=Cotton_1245_Inbred.tar.gz
* [Running LinSNPGT Thread]
Thread_Count=24
* [Samples_list]
> ===========================================
> |sample | Read1 | Read2 |
> -------------------------------------------
| Line1 | test1_1.fastq.gz | test1_2.fastq.gz |
| Line2 | test2_1.fastq.gz | test2_2.fastq.gz |
注意这个config文件里,最后的样本名这块,样本格式必须是gz压缩文件,
>|sample|samplename_1.fastq.gz|samplename_2.fastq.gz|
修改SNPGT.config这个配置文件后,运行python3 SNPGT.py
即可。
使用SNPGT利用自己的基因组文件,进行基因分型,获取基因型文件
python SNPGT-build.py -F path_to/Rice.fa -B path_to/Rice_378_Inbred.bim -S Rice -N 378_Inbre
SNPGT-build.py参数如下:
-F FASTA
参考基因组文件
-B BIM
SNP的bim文件,使用plink获得
-S SPECIES
物种名称
-N STRAIN
指定群体的名称
-L BINLEN
这是要提取的SNP上下游的总长度,默认是400,即上下游各200bp,可以根据基因组大小和染色体的重复情况修改这个长度
--JavaPath JAVA8PATH
java8的路径
--SamtoolsPath SAMTOOLSPATH
samtools的路径
--SeqtkPath SEQTKPATH
seqtk的路径
--Bowtie2Path BOWTIE2PATH
bowtie2的路径
运行SNPGT-build.py或者SNPGT.py都需要在安装目录运行,否则会报各种各样的错误。
注意群体名称这块,最好不要有超过1个下划线。如果还有下划线可能会报错。
SNPGT的原理是根据SNP位点提取染色体上下游各200bp的片段,组成短片段,然后使用bowtie2把原始测序进行比对到提取的短序列上,后续使用gatk3.8 call SNP,这个算法比直接使用全基因组call SNP会快很多。但是也是有代价的,准确率并不是100%。
从图中的20 Fold验证可以看出准确率依然高达99.68%,但是时间快了20.07倍。所以不用再call全基因组了。