写在前面:本来呢,最近一段时间懒于写教程了,但是这个软件的manual对于初学者真的不友好啊,一狠心我决定写一篇,而且市面上我没搜到太多相关的中文教程,只看到一篇https://mp.weixin.qq.com/s/iOO5UFRJL2fZmilzBMIGuQ
,还是很不错的!感谢原作者!以此为基础,我会再增添一些新手可能会遇到的一些问题的详细流程,比如写个小循环啊之类的吧,使这个软件能够更好地为大家服务!如果有不对的地方还请大家指正。
下面开始喽~
————————————————————————————
软件介绍
PAINTOR为fine-mapping的一种方法。
参考综述:https://www.ncbi.nlm.nih.gov/pubmed/29844615
PAINTOR参考文献:https://www.ncbi.nlm.nih.gov/pubmed/?term=Improved+methods+for+multi-trait+fine+mapping+of+pleiotropic+risk+loci
软件官网:https://github.com/gkichaev/PAINTOR_V3.0
软件manual:https://github.com/gkichaev/PAINTOR_V3.0/wiki/1.-Introduction
基本上就是上述参考资料了。我们开始吧~
简单来说,做完GWAS后,可能会得到很多snps。但这么多的信号位点不代表他们都是影响表型的决定性位点,有一些可能是连锁带来的,因此我们就需要一些工具去判断哪些才是影响表型的关键位点。PAINTOR就是做zhe个事情的,帮你找出那个真正的snp,你就可以做后续分析啦。
————————————————————————————
安装软件
git clone https://github.com/gkichaev/PAINTOR_V3.0.git
cd PAINTOR_V3.0
bash install.sh
测试一下是否安装成功:
/PAINTOR -input SampleData/input.files -in SampleData/ -out SampleData/ -Zhead Zscore -LDname ld -enumerate 2 -annotations DHS
此时会在SampleData里生成.results文件,说明跑成功了。
为了节省时间,注释文件的下载最好在这步就进行,因为6.7G,很慢,有可能还下不全。注释文件下载地址:https://ucla.box.com/s/x47apvgv51au1rlmuat8m4zdjhcniv2d
注意:此软件的注释版本都是hg19
接下来就正式开始我们自己的喽~
————————————————————————————
准备输入文件(包括3类文件)
对于每个独立snp,都需要三个文件,文件分隔符均为空格。高亮的就是我们最终需要的三个输入文件,有多少个locus就对应有3个这样的文件。
locus是我们手动制作的,当然把snp分到不同的locus组时可能用到plink和/或python;
.ld文件是根据.snp和.bin文件通过plink和R得来的;
.annotation是需要python脚本跑出来的。
了解了总体我们就开始一个个制作。
1.Locus File(生成locus、locus.snp文件):
从你的gwas summary中得到的位点信息,包括CHR、BP、SNP、Z-score四列。一般提取上下50kb左右,或者按照p值筛选,对于多个种群,可以有多个Z-score。
z-score不是OR值或beta值,而是带方向的。可以beta/se得到,或者有的meta之后直接有z-score可以用。
至于locus的分法,manual也没有详细说明,可以根据别的数据分好的locus去对应自己的summary数据的snp。
也可以根据自己的原始数据用plink分locus,代码如下。
plink --bfile filename --blocks
会出来[plink.blocks]文件,就是我们需要的,一行代表一个locus组,我们只要把gwas summary中snp对应到这些组里就可以。一个locus一个文件。每个locus文件内是这样:
同时记得还要制作一个locus.snp文件,里面只放这个locus中包含的snp名称,排成一列,为下面的文件做准备。也是有多少个locus就做多少个文件。
2.LD Matrix File(生成Locus.ld文件):
N×N矩阵,snp之间的r2,如果有自己的数据,可以用plink进行计算,如果没有自己的数据,可以用千人基因组1000G进行计算。
for num in {1..100} #比如有100个locus文件
do
plink
--bfile filename #原始基因文件
--a1-allele filename.bim 6 2
#同样是上面文件的bim格式,6代表A1所在列,2代表snp所在列
--extract Locus${num}.snp
#此为新建文件,包含上面locus file中的全部snp
--r bin4
--out Locus${num}.snp_LD
done
这步结束后每个locus都会产生一个.bin文件。
别忘了我们是要生成locus1.ld文件的,所以现在来做矩阵喽,用的上面提到的推文中的命令,R运行,我弄了个小循环,毕竟我们要做100个文件呢(上面假设100个locus):
for(i in 1:100){
t=readBin(paste("Locus",i,".snp_LD.ld.bin",sep = ""),what="numeric",n=20000000,size=4)
a=sqrt(length(t))
t2=matrix(t,a,a)
write.table(t2,paste("Locus",i,".ld",sep = ""),col.names=F,row.names=F,quote=F,sep=" ")}
生成的.ld文件如下:
3.Annotation matrix file(生成.annotation文件)
这一步就要用到我们最开始下载的注释文件啦,你下载全了吗?记得一定要核对一下大小哦。下载完解压后长这样:然后根据你选择好的注释,就开始生成.annotation文件啦,又是个循环:
conda activate test_py2 #如果你电脑里是python3,记得要写这句转成python2
for num in {1..100}
do python AnnotateLocus.py
--input annotation_list #这个文件是我们刚制作好的,你筛选好的注释路径及名称
--locus Locus${num}
--out Locus${num}.annotations
--chr CHR --pos POS #你的loucs文件中chr和pos的表头,这个应该是统一的
done
所有输入文件都制作完成,太不容易了。如图:
运行PAINTOR程序
./PAINTOR -input input.file -Zhead ZSCORE.P1 -LDname LD1 -in RunDirectory/ -out OutDirectory/ -enumerate 3 -annotations Coding,DHS
input是新建的文件,里边为所有你的locus的名称,排成一列。
解读结果文件
对于结果文件,我们重点关注后缀为.results的文件,该文件包含Posterior_Prob列,即后验概率,为我们感兴趣的结果。
下面给个示例:4个SNP位点的结果文件:结果解读:Posterior_Prob就是我们要的结果,Posterior_Prob值越大,说明这个位点影响表型的可能性越大 ,如示例结果给出的rs3的Posterior_Prob值为0.98,说明该位点影响表型的可能性比较高,后面就能针对性的对这个位点进行后续研究,比如功能验证等。
over
以上都是基于同一组个体,如果有两组人还要改一下某些文件。看官网吧。