EHH(Extended Haplotype Homozygosity)、iHS(Integrated Haplotype Score) 和 XP-EHH(Cross Population Extended Haplotype Homozogysity)是常用的基于 haplotype 分析基因组受选择情况的方法。其中,EHH 和 iHS 是检测一个群体中的选择信号,而 XP-EHH 是在两个群体中进行比较。
Hapbin 是一个 C++ 写的工具,可以计算 EHH、iHS 和 XP-EHH。类似工具还有 selscan、rehh 等,而 hapbin 的操作更为方便,速度也非常快。下面简单介绍一下它的使用方法。
编译
Hapbin 需要从源码编译成可执行文件:
git clone https://github.com/evotools/hapbin.git
cd hapbin/build/
cmake ../src/
make
编译成功后,把 build
目录加在环境变量配置文件 .bash_profile
或 .bashrc
中即可:
export PATH=/shiyanhe/softwares/hapbin/build:$PATH
编译过程依赖 GCC 4.7 以上版本,如果上面的编译失败,需要安装新版本的 GCC 再重新编译:
# 在 Ubuntu 上安装 GCC
sudo apt-get update
sudo apt-get install git cmake libcr-dev mpich libmpich-dev
# 在 CentOS 7 上安装 GCC
sudo yum install cmake git gcc-c++
输入文件
需要两类输入文件:
hap files (–hap): IMPUTE2 的 HAP / LEGEND / SAMPLE 格式中的 hap 文件,一行代表一个SNP,一列代表一个haplotype。如果是 haps haplotype 文件,可以用 SHAPEIT 转换格式:shapeit -convert --input-haps gwas.phased --output-ref gwas.phased.hap gwas.phased.leg gwas.phased.sam
。如果是 vcf 格式,可以用 vcftools 转换格式:vcftools --gzvcf genotypes.vcf.gz --IMPUTE
。
map files (–map): 跟 plink 的 ped/map 格式的 map 文件一样,顺序需要与 hap 文件的 SNP 顺序对应。
注意,不同染色体的 hap 和 map 文件需要分开。另外,如果是在两个群体中计算 XP-EHH,hap 文件需要按群体分开来存放。
运行
计算 EHH:
ehhbin --hap [.hap file] --map [.map file] --locus [locus] --out [output prefix]
计算 iHS:
ihsbin --hap [.hap file] --map [.map file] --out [output prefix]
计算 XP-EHH:
xpehhbin --hapA [Population A .hap file]] --hapB [Population B .hap file]] --map [.map file] --out [output prefix]
例子,计算 A 和 B 两个群体 1 号染色体的 XP-EHH:
xpehhbin --hapA popA_chr1.hap --hapB popB_chr1.hap --map chr1.map --out results_chr1
计算时也是分染色体进行。如果要跑全基因组,写个循环脚本批量跑即可。