生物信息遗传学重测序下游分析

使用AdmixTools(admixr)做D-statistic

2021-04-17  本文已影响0人  DumplingLucky

ADMIXTOOLS是David Reich实验室开发的软件包,在群体遗传学中,用于计算和测试群体混合统计,验证杂交事件。R包admixr是实现ADMIXTOOLS的一种直接方法,它本质上是ADMIXTOOLS软件的接口,要在ADMIXTOOLS安装好的环境下运行。
admixr分析案例:


1. 安装ADMIXTOOLS

wget https://github.com/DReichLab/AdmixTools/archive/refs/heads/master.zip
unzip master.zip
cd AdmixTools-master/src/
make clobber
make all
make install
#可执行程序位于../bin路径下

2. 配置R环境

#为了确保R可以找到ADMIXTOOLS程序包,在R环境文件(.Renviron)中添加ADMIXTOOLS程序包的路径
PATH=<path to the location of ADMIXTOOLS programs>
#在R环境中
install.packages("admixr")
install.packages("tidyverse")
library(admixr)
library(tidyverse)

3. 产生输入文件

ADMIXTOOLS需要特征(eigenstrat)文件,要将vcf文件转换为eigenstrat。

(1)eigenstrat格式包含三种文件:

ind文件 - 指定每个样本的唯一名称,性别(可选-可以用“U”表示“undefined”)和样本标签;
snp文件 - 指定SNP,REF/ALT等位基因的位置;

ind.file
snp.file
geno.file
(2)转换方法
#vcf格式转换成eigenstrat格式,Joana脚本
sh convertVCFtoEigenstrat.sh test.vcf.gz
#这个脚本链接我还没有找到......随后更新

4. 实战分析

(1)输入文件准备
#使用admixr的download_data()方法下载测试数据
(prefix <- download_data(dirname = tempdir()))
[1] "/var/folders/t7/9gjtb6m92flbnp930618vt3r0000gn/T//RtmpveArl0/snps/snps"
list.files(path = dirname(prefix), pattern = basename(prefix), full.names = TRUE)
[1] "/var/folders/t7/9gjtb6m92flbnp930618vt3r0000gn/T//RtmpveArl0/snps/snps.geno"
[2] "/var/folders/t7/9gjtb6m92flbnp930618vt3r0000gn/T//RtmpveArl0/snps/snps.ind" 
[3] "/var/folders/t7/9gjtb6m92flbnp930618vt3r0000gn/T//RtmpveArl0/snps/snps.snp" 
(2)D统计

D统计(或称为ABBA-BABA检验)是检测杂交事件的简单方法。 比如W,X,Y,Z具有 ((W,X), Y), Z) 的系统发育关系,其中Z为外群,检测Y是否有向X的基因渗入。 ADMIXTOOLS中实现的用于计算D统计量的公式基于等位基因频率。

#确定W群体
pops <- c("French", "Sardinian", "Han", "Papuan", "Khomani_San", "Mbuti", "Dinka")
#D检验
result <- d(W = pops, X = "Yoruba", Y = "Vindija", Z = "Chimp", data = snps)
head(result)
W   X   Y   Z   D   stderr  Zscore  BABA    ABBA    nsnps
French  Yoruba  Vindija Chimp   0.0313  0.006933    4.510   15802   14844   487753
Sardinian   Yoruba  Vindija Chimp   0.0287  0.006792    4.222   15729   14852   487646
Han Yoruba  Vindija Chimp   0.0278  0.006609    4.199   15780   14928   487925
Papuan  Yoruba  Vindija Chimp   0.0457  0.006571    6.953   16131   14721   487694
(3)ggplot2绘制结果
ggplot(result, aes(fct_reorder(W, D), D, color = abs(Zscore) > 2)) +
  geom_point() +
  geom_hline(yintercept = 0, linetype = 2) +
  geom_errorbar(aes(ymin = D - 2 * stderr, ymax = D + 2 * stderr))

结果解读:非洲人的𝐷值与0并无显著差异,这意味着该数据中非洲人没有尼安德特人的基因渗入,与零假设相符。 另一方面,所有非洲人以外的人群拒绝零假设,这表明尼安德特人与当今非洲人以外人的祖先存在基因交流。

(4)其他检验方法

admixr也可以做f4,f4-ratio,f3检验等。

#f4
result <- f4(W = pops, X = "Yoruba", Y = "Vindija", Z = "Chimp", data = snps)
#f4-ratio
result <- f4ratio(X = pops, A = "Altai", B = "Vindija", C = "Yoruba", O = "Chimp", data = snps)
ggplot(result, aes(fct_reorder(X, alpha), alpha, color = abs(Zscore) > 2)) +
  geom_point() +
  geom_errorbar(aes(ymin = alpha - 2 * stderr, ymax = alpha + 2 * stderr)) +
  geom_hline(yintercept = 0, linetype = 2) +
  labs(y = "Neandertal ancestry proportion", x = "present-day individual")

结果解读:当今的非非洲人占尼安德特人血统的2-3%,巴布亚新几内亚人的尼安德特人血统比例更高-超过4%。 这与早期的研究相一致,早期的研究表明在当今的巴布亚人的祖先中还有其他的古混合事件。

#f3
pops <- c("French", "Sardinian", "Han", "Papuan", "Mbuti", "Dinka", "Yoruba")
result <- f3(A = pops, B = pops, C = "Khomani_San", data = snps)
#根据f3值对人口标签进行排序
ordered <- filter(result, A == "Mbuti", B != "Mbuti") %>% arrange(f3) %>% .[["B"]] %>% c("Mbuti")
#成对f3热图绘制
result %>% 
filter(A != B) %>%
  mutate(A = factor(A, levels = ordered),
         B = factor(B, levels = ordered)) %>%
  ggplot(aes(A, B)) + geom_tile(aes(fill = f3))

当我们基于成对的𝑓3统计值对热图标签进行排序时,展示出了已知的人口分化顺序(即Sar先分开,然后是Mbuti等)。
参考:
https://speciationgenomics.github.io/ADMIXTOOLS_admixr/
https://bodkan.net/admixr/articles/tutorial.html
上一篇下一篇

猜你喜欢

热点阅读