生信教程:ABBA-BABA分析之滑动窗口

news2024/12/22 22:16:37

简介

ABBA BABA 统计(也称为 D 统计)为偏离严格的分叉进化历史提供了简单而有力的检验。因此,它们经常用于使用基因组规模的 SNP 数据测试基因渗入。

虽然最初开发用于基因渗入的全基因组测试,但它们也可以应用于较小的窗口,从而可以探索基因渗入的基因组景观。

本次实践[1]中,我们将使用可用的软件执行基于窗口的 ABBA BABA 分析,然后在 R 中编写代码来绘制结果。我们将分析几个 Heliconius 蝴蝶种群的基因组数据。

工作流程

从多个个体的全基因组测序的基因型数据开始,我们将运行一个脚本来计算每条染色体上各个窗口中的混合比例的度量。然后我们将绘制图表来测试有关适应性基因渗入的假设。

数据集

我们将研究三个物种的多个种族:Heliconius melpomeneHeliconius timaretaHeliconius cydno。这些物种的分布范围部分重叠,人们认为它们在同源地区发生杂交。我们的样本集包括来自巴拿马和哥伦比亚安第斯山脉西坡的两对同域种群 H. melpomeneH. cydno。在哥伦比亚和秘鲁的安第斯山脉东坡,还有两对同域种群:H. melpomeneH. timareta。最后,有两个来自外群物种 Heliconius numata 的样本,这是进行 ABBA BABA 分析所必需的。

所有样本均使用深度全基因组测序进行测序,并使用标准流程为每个个体的基因组中每个位点获取基因型。数据经过过滤,仅保留双等位基因单核苷酸多态性 (SNP)。该数据集包括来自 18 号染色体的 SNP 数据,已知该染色体携带特别感兴趣的翅膀图案基因座。

假设

我们假设同域物种之间的杂交将导致 H. cydno 和来自西方的 H. melpomene 同域种族之间以及 H. timareta 和来自东部的 H. melpomene 相应的同域种族之间共享遗传变异。

然而,并非基因组的所有部分都会受到同样的影响。特别是,我们怀疑 18 号染色体上的翅膀图案基因 optix 受到了强烈的选择。 optix 的差异调节可以导致翅膀上红色色素沉着的不同分布,如在 H. melpomene 的不同亚种中所见,或者导致红色色素缺失,如在 H. cydno 中所见。

赫利科尼乌斯翅膀图案可以警告捕食者它们有毒。有些物种参与缪勒拟态,有毒物种进化得彼此相似,这有助于加强捕食者的学习。模仿可以通过相同翅膀图案上的独立收敛来实现,也可以通过适应性基因渗入来交换翅膀图案等位基因来实现。因此,我们预测不同物种的共模仿种群可能在 optix 附近显示出过多的基因渗入信号。

我们对具有不同翅膀图案的种群有着完全不同的期望。如果某个地区的捕食者认为最常见的本地图案有毒,那么拥有外来翅膀图案的代价将会很高。同样,任何具有中间翅膀图案的混合个体也将面临更高的捕食风险。因此,我们预测,在具有不同翅型的种群之间,optix附近的基因渗入程度应该会减少。

alt

量化整个基因组

简而言之,该检验使用三个群体和一个具有关系 (((P1,P2),P3),O) 的外群体,并调查 P2 和 P3 之间是否存在过多的共享变异(与 P1 和 P3 之间共享的变异相比) )。

这种过量可以用 D 统计量来表示,其范围从 -1 到 1,并且在无渗入的原假设下应等于 0。 D > 1 表示 P3 和 P2 之间可能存在基因渗入(或其他可能导致偏离严格的分叉物种历史的因素)。

该测试旨在用于全基因组规模。 D 统计量不太适合比较整个基因组的混合水平,因为它的绝对值取决于诸如有效种群大小等因素,而有效种群大小可能在整个基因组中有所不同。

其他教程中描述的 f 估计更好,因为它根据定义反映了混合比例,但它对小规模的随机误差高度敏感。因此,为此目的开发了一种称为 fd 的统计数据,该统计数据对于使用少量 SNP 引入的误差更加稳健。传统的 f 估计假设 P3 是供体群体,P2 是受者群体,而 fd 则在逐个地点的基础上推断供体。

选择人群

这些统计数据的解释很大程度上取决于所选人群。首先,该测试对从 P3 渗入 P2 最为敏感,而不是相反。

其次,fd 应被解释为 P3 和 P2 之间不与 P1 共享的过度共享变异的量化。如果 P1 和 P2 之间存在持续的基因流,则任何从 P3 到 P2 的基因渗入都会被低估。最后,我们只能量化比 P1 和 P2 之间的分裂更晚发生的渗入。

因此,如果我们想要量化整个基因组中发生的最大可检测量渗入,我们应该选择异域且与 P2 关系不太密切的 P1。不过,我们也可以通过测试这个特性来发挥我们的优势。如果我们选择与 P2 共享正在进行的基因流的 P1,那么测试将显示 P2 和 P3 共享 P1 不共享的基因组部分。这对于识别翅膀图案等位基因非常有用,因为这些通常是亚种在基因流中保持独特的唯一基因组区域。

实战

准备

打开终端窗口并导航到将运行练习并存储所有输入和输出数据文件的文件夹。现在创建一个名为“data”的子目录并下载本教程所需的数据文件

mkdir data

cd data

wget https://github.com/simonhmartin/tutorials/raw/master/ABBA_BABA_windows/data/hel92.DP8HET75MP9BIminVar2.chr18.geno.gz

wget https://github.com/simonhmartin/tutorials/raw/master/ABBA_BABA_windows/data/hel92.pop.txt

wget https://github.com/simonhmartin/tutorials/raw/master/ABBA_BABA_windows/data/chr18.LDhelmet_MLrho.w100.tsv

cd ..
  • 接下来,在 GitHub 上下载本教程所需的 python 脚本集合
wget https://github.com/simonhmartin/genomics_general/archive/master.zip
unzip master.zip

滑动窗口分析

  • 针对两个不同的情况运行分析 python 脚本。在这两种情况下,P1 都是全域性 H. melpomene melpomene (mel_mel)。 P2 和 P3 是我们期望共享基因的两个种群。在第一种情况下,我们量化了来自巴拿马的 H. melpomene rosina (mel_ros) 和 H. cydno chioneus (cyd_chi) 之间的基因渗入。在第二个例子中,我们量化了来自秘鲁的 H. melpomene amaryllis (mel_ama) 和 H. timareta thelxinoe (tim_txn) 之间的基因渗入。
python genomics_general-master/ABBABABAwindows.py \
-g data/hel92.DP8HET75MP9BIminVar2.chr18.geno.gz -f phased \
-o data/hel92.DP8HET75MP9BIminVar2.chr18.ABBABABA_mel_ros_chi_num.w25m250.csv.gz \
-P1 mel_mel -P2 mel_ros -P3 cyd_chi -O num \
--popsFile data/hel92.pop.txt -w 25000 -m 250 --T 2

python genomics_general-master/ABBABABAwindows.py \
-g data/hel92.DP8HET75MP9BIminVar2.chr18.geno.gz -f phased \
-o data/hel92.DP8HET75MP9BIminVar2.chr18.ABBABABA_mel_ama_txn_num.w25m250.csv.gz \
-P1 mel_mel -P2 mel_ama -P3 tim_txn -O num \
--popsFile data/hel92.pop.txt -w 25000 -m 250 --T 2

我们为脚本提供一个包含基因型数据 (-g) 的输入文件、一个输出文件 (-o)、内群体群体和外群体群体(-P1、-P2、-P3 和 -O)以及一个指定每个群体的文件示例位于(--popsFile)中。

我们还给出了窗口的参数。这些 ae“坐标”窗口,这意味着每个窗口相对于参考基因组的长度相同,但每个窗口的 SNP 数量可能不同。窗口大小 (-w) 将为 25,000 bp。 Windows 需要包含至少 (-m) 250 个 SNP 才能被视为有效。

最后,我们告诉脚本使用两个线程 (-T)。如果你有一个多核机器,你可以增加这个值,脚本会运行得更快。

  • 绘制窗口统计数据

我们需要将每个窗口统计文件加载到 R 中。我们将创建一个包含两个数据集的列表。首先输入输入文件的名称

AB_files <- c("data/hel92.DP8HET75MP9BIminVar2.chr18.ABBABABA_mel_ros_chi_num.w25m250.csv.gz",
                "data/hel92.DP8HET75MP9BIminVar2.chr18.ABBABABA_mel_ama_txn_num.w25m250.csv.gz")

AB_tables = lapply(AB_files, read.csv)

head(AB_tables[[1]])

当 D 为负数时,fd 毫无意义,因为它旨在仅在存在过量时量化 ABBA 相对于 BABA 的过量。因此,我们在 D 为负数的位置将所有 fd 值转换为 0。

for (x in 1:length(AB_tables)){
AB_tables[[x]]$fd = ifelse(AB_tables[[x]]$D < 00, AB_tables[[x]]$fd)
    }

然后,我们可以为我们分析的两种情况绘制染色体上的 fd 图。

par(mfrow=c(length(AB_tables), 1), mar = c(4,4,1,1))

for (x in 1:length(AB_tables)){
    plot(AB_tables[[x]]$mid, AB_tables[[x]]$fd,
    type = "l", xlim=c(0,17e6),ylim=c(0,1),ylab="Admixture Proportion",xlab="Position")
    rect(1000000,0,1250000,1, col = rgb(0,0,0,0.2), border=NA)
    }

这表明染色体渗入程度存在相当大的异质性。如果我们考虑 optix 周围的区域,我们就会看到 H. melpomene rosinaH. cydno chioneus 之间基因渗入减少的证据,正如我们预测的那样。相比之下,我们看到了 H. melpomene amaryllisH. timareta thelxinoe 之间基因渗入程度升高的证据,这表明它们共享的翅膀模式可能是适应性基因渗入的结果。鉴于这一证据,建议对 optix 周围区域进行系统发育,以测试 H. timareta 等位基因是否似乎“嵌套”在 H. melpomene 进化枝内。

基因渗入和重组率之间的关联

理论预测,如果存在许多选择基因渗入的“屏障位点”,我们应该会看到低重组区域基因渗入减少的趋势,因为中性基因渗入等位基因和有害基因之间的联系更强。我们可以通过检查重组率和整个染色体的 fd 之间的关系来检验这个假设。我们有一个先前生成的数据文件(已提供),给出了该染色体上 100 kb 窗口中估计的群体重组率。

现在我们将制作一个 100 kb 窗口的 fd 匹配数据集,这里仅使用显示渗入率最高的物种对:来自巴拿马的 H. melpomene rosinaH. cydno chioneus

python ~/Research/genomics_general/ABBABABAwindows.py \
-g data/hel92.DP8HET75MP9BIminVar2.chr18.geno.gz -f phased \
-o data/hel92.DP8HET75MP9BIminVar2.chr18.ABBABABA_mel_ros_chi_num.w100m1.csv.gz \
-P1 mel_mel -P2 mel_ros -P3 cyd_chi -O num \
--popsFile data/hel92.pop.txt -w 100000 -m 1000 --T 2

现在,回到 R 中,读入这个新数据文件。

AB_table_w100 <- read.csv("data/hel92.DP8HET75MP9BIminVar2.chr18.ABBABABA_mel_ros_chi_num.w100m1.csv.gz")

和之前一样,我们将 D 为负的窗口的所有 fd 值转换为 0。

AB_table_w100$fd = ifelse(AB_table_w100$D < 00, AB_table_w100$fd)

现在我们读取 100 kb 窗口的重组率表。这里,ML_rho 列给出了每个窗口的群体重组率的最大似然估计。

rec_table <- read.table("data/chr18.LDhelmet_MLrho.w100.tsv", header=T)
head(rec_table)

由于数据的噪声性质,我们想要比较不同重组率的 bin 中的 fd 值。我们将使用剪切函数将窗口分成三个具有低、中和高重组率的箱。

rec_bin <- cut(rec_table$ML_rho, 3)

最后,我们可以制作箱线图来比较这些箱之间推断的混合水平 (fd)。

boxplot(AB_table_w100$fd ~ rec_bin)

这证实了基因渗入水平确实随着重组率的增加而增加,这与大量屏障位点在全基因组范围内选择基因渗入的模型一致。

Reference

[1]

Source: https://github.com/simonhmartin/tutorials/blob/master/ABBA_BABA_windows/README.md

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt地铁智慧换乘系统浅学(四 )实现添加线路,添加站点,添加边 并且存储到本地txt文件

玩的就是添加 添加前的构思界面设计tabWidget添加线路界面添加站点界面添加边界面 代码实现添加线路思路连接槽函数槽函数 添加站点思路连接槽函数初始化combox槽函数更新容器函数 添加边思路槽函数 和代码 注意 添加前的构思 假设 现要添加一个线路 &#xff1a; 9号线 如果…

[H5动画制作系列 ]帧代码运行顺序测试

刚开始接触Animate CC&#xff08;过去叫&#xff1a;Flash&#xff09;,对于帧代码的执行顺序十分迷惑。所以,专门做一个简单代码顺序测试. 准备工作: 代码图层actions&#xff0c;第1帧和第10帧为关键帧。 背景图层bg&#xff0c;就一个字符串红色Test.界面如下: 代码测试步…

八个不可不知的SQL高级方法

结构化查询语言&#xff08;SQL&#xff09;是一种广泛使用的工具&#xff0c;用于管理和操作数据库。基本的SQL查询简单易学&#xff0c;但掌握高级SQL技术可以将您的数据分析和管理能力提升到新的高度。 高级SQL技术是指一系列功能和函数&#xff0c;使您能够对数据执行复杂…

Zero-Shot Learning by Harnessing Adversarial Samples 理论 代码解读

《Zero-Shot Learning by Harnessing Adversarial Samples》基于对抗样本的零样本学习 该论文要解决的问题&#xff1a; 减轻了传统图像增强技术中固有的语义失真问题。我们希望我们的实验研究将有助于理解单标签监督和语义属性监督在模型行为上的差异&#xff0c;并为开发更…

10.01

服务器 #include<myhead.h> //键盘输入事件 int keybord_events(fd_set readfds) {char buf[128] "";int sndfd -1; //从终端获取一个文件描述符&#xff0c;发送数据给该文件描述符对应的客户端bzero(buf, sizeof(buf));int res scanf("…

Junit的常用操作

注:本篇文章讲解的是junit5 目录 Juint是什么 Juint需要导入的依赖 Juint常用注解 Junit执行顺序 参数化 断言 测试套件 Juint是什么 Juint 是 Java 的一个单元测试框架. 也是回归测试框架. 使用 Junit 能让我们快速的完成单元测试。 注意&#xff1a;Junit 测试也是程序…

网络安全渗透测试工具之skipfish

网络安全渗透测试工具skipfish介绍 在数字化的时代,Web 应用程序安全成为了首要任务。想象一下,您是一位勇敢的安全冒险家,迎接着那些隐藏在 Web 应用程序中的未知风险。而在这个冒险之旅中,您需要一款强大的工具来帮助您发现漏洞,揭示弱点。而这个工具就是 Skipfish。 …

【Android】安卓手机系统内置应用安装失败解决方案

现有的闲置手机有个内置app可老旧了&#xff0c;没有开发者维护&#xff0c;于是问题不断&#xff0c;影响了体验&#xff0c;后来在网上查找发现有它的新版本&#xff0c;想要更新却没有自动更新&#xff08;后台服务断开了&#xff09;&#xff0c;有类似的想法可以来这里了解…

国庆创作周 组播《第十二课》

国庆创作周《第十二课》图解

实现单行/多行文本溢出

在日常开发展示页面&#xff0c;如果一段文本的数量过长&#xff0c;受制于元素宽度的因素&#xff0c;有可能不能完全显示&#xff0c;为了提高用户的使用体验&#xff0c;这个时候就需要我们把溢出的文本显示成省略号。 一. 单行文本溢出 即文本在一行内显示&#xff0c;超出…

Blued引流脚本

于多数人来说&#xff0c;引流都是一个比较困难的操作&#xff0c;因为流量不会听你的。所以任何人在网上做生意&#xff0c;或者开一个实体店&#xff0c;都会为流量而发愁&#xff0c;其实对于流量的吸引来说&#xff0c;我们越是刻意为之&#xff0c;可能所获得的效果也越不…

基于Java的在线听歌平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 介绍项目/ 需求分析

文章目录 一、消息队列是什么&#xff1f;二、需求分析结构解析功能解析规则解析绑定关系交换机类型消息应答 三、持久化存储四、网络通信提供的API复用TCP连接 五、消息队列概念图 一、消息队列是什么&#xff1f; 消息队列 (Message Queue, MQ)就是将阻塞队列这一数据结构提取…

国庆作业2

select实现服务器并发 代码&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\printf("%d\n",__LINE__);\perror(msg);\ }while(0)#define PORT 8888#define IP "192.168.1.5"int main(int argc, const char *argv[]) {//创建流式套接字…

格拉姆角场GAF将时序数据转换为图像并应用于东南大学轴承故障诊断(Python代码,CNN模型)

1.运行效果&#xff1a;格拉姆角场GAF将时序数据转换为图像并应用于东南大学轴承故障诊断&#xff08;Python代码&#xff0c;CNN模型&#xff09;_哔哩哔哩_bilibili 环境库 只要tensorflow版本大于等于2.4.0即可运行 2.GAF的内容 GAF是一种用于时间序列数据可视化和特征提…

崇州街子古镇中秋国庆热闹非凡

今天&#xff08;国庆节日&#xff09;下午约4点钟&#xff0c;笔者实在耐不住寂寞&#xff0c;走出寄居养老的成都市崇州街子古镇青城神韵小区&#xff0c;去到国家AAAA级旅游景区那古色古香的街子古镇街道&#xff0c;旨在要亲身感受一下今年这里过双节&#xff0c;气氛究竟会…

28294-2012 钢渣复合料 课堂随笔

声明 本文是学习GB-T 28294-2012 钢渣复合料. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了混凝土用钢渣复合料的术语和定义、原材料组成及要求、强度等级、技术要求、试验方 法、检验规则、包装、标识、运输与贮存。 本标准…

WinHex数据恢复方法(误删后没覆盖)

winhex永远滴神&#xff01;winhex永远滴神&#xff01;winhex永远滴神&#xff01; md&#xff0c;安卓手机插u盘&#xff0c;改个文件夹名竟然把整个文件夹搞没了&#xff01;于是我赶紧查怎么恢复&#xff0c;然后依次找到并试用了diskgenus&#xff08;410RMB&#xff09;、…

信息安全:使用程序编写基于密钥的加密方式

目录 前言RSA算法代码实现设计思路结果示意 Diffie-Hellman算法代码实现设计思路结果示意 前言 信息安全是计算机科学的一个重要分支&#xff0c;它涉及到保护信息的机密性、完整性和可用性。信息加密是信息安全的一种常用手段&#xff0c;它通过使用一些数学算法和密钥&#…

P1525 [NOIP2010 提高组] 关押罪犯(并查集)

[NOIP2010 提高组] 关押罪犯 题目描述 S 城现有两座监狱&#xff0c;一共关押着 N N N 名罪犯&#xff0c;编号分别为 1 − N 1-N 1−N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久&#xff0c;如果客观条件具备则随时可能爆发冲突。我们用“怨气值”&#x…