本文介绍的方法都是基于Extended Haplotype Homozygosity (EHH)概念,由SABETI 等人在 2002年提出。简单来说,根据selective sweep的概念,一个位点周围的位点如果多样性越低,就越有可能是因为selective sweep留下的选择印迹。
这里有三篇介绍selective sweep的文章,讲得很好:
https://www.icode9.com/content-4-803828.html
https://www.plob.org/article/2345.html
https://www.jianshu.com/p/82719840ec4a
rehh tutorial:
https://cran.r-project.org/web/packages/rehh/vignettes/rehh.html#computing-ihs-rsb-and-xp-ehh
有很多衍生的统计量:EHH(Extended Haplotype Homozygosity)、iHS(Integrated Haplotype Score) 、XP-EHH(Cross Population Extended Haplotype Homozogysity)、RSB
rehh、selscan和hapbin都是基于EHH及其衍生概念的
Hapbin可以看这篇(但是hapbin无法处理缺失位点,不建议用):
使用Hapbin基于EHH、iHS、XP-EHH方法检测基因组中的选择信号
前提:染色体要有重组!Y和W染色体不能用这种方法
本文只写两个群体之间的单倍型选择信号检测,单个群体内部的不写,但是rehh也可以做,很方便
rehh是一个R包
第一列个体名,后面每一列一个SNP。跟reference一样的就是0,第一种不一样的就是1,第二种不一样的就是2,以此类推。比如ref是G,那假设SNPs中还有T和A两个等位基因,就分别标为1和2。缺失值可以用[NA]或者[.]。每个群体一个文件。
第一列SNP名称,随便起。第二列染色体名称。第三列染色体上的位点。第四列是major allele,一般就是0。第五列是minor allele,有一个1就填1,有1和2就填1,2。如图。两个群体用同一个文件就行。
注意,如果有好几条染色体,每条染色体要分别产生这两个文件,每条染色体分别跑。
可以用内置的graphic包来画,就是plot()和curve()也可以用ggplot2来画,后者更灵活.
graphic
# 先生成一组随机数
x <- rnorm(2000)
# 画频率直方图, 分30个bin
hist(x, freq = F, breaks = 30)
# 再画概率分布曲线
lines(density(x, bw=.5), col="red", lwd=2)
2.ggplot2
# 准备工作, 把x设成一个数据集
library(ggplot2)
data <- data.frame(x = x)
# 生成底层和直方图,概率线的图层
p <- ggplot(data, aes(x = x, y = ..density..))
p <- p + geom_histogram(fill = "navy")
p <- p + geom_density(colour = "green")