PAINTOR教程

写在前面:本来呢,最近一段时间懒于写教程了,但是这个软件的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文件如下:

噔噔噔~这就是目前我们做好的文件,当然我只是放了locus1,后面每个locus都得有这些文件哦。
3.Annotation matrix file(生成.annotation文件)

这一步就要用到我们最开始下载的注释文件啦,你下载全了吗?记得一定要核对一下大小哦。下载完解压后长这样:

从这里选择跟你研究相关的注释文件,可以从Annotation_Paths(这是所有注释的汇总文件)文件中选择他们的路径,制作成你自己的annotation_list。像这样:
记得前面要根据你自己的工作路径把它路径加全哦。
然后根据你选择好的注释,就开始生成.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

以上都是基于同一组个体,如果有两组人还要改一下某些文件。看官网吧。

你可能感兴趣的:(PAINTOR教程)