rehh:单倍体单倍型群体间选择信号分析(基于selective sweep)

Python015

rehh:单倍体单倍型群体间选择信号分析(基于selective sweep),第1张

本文介绍的方法都是基于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")