当前位置: 首页 > news >正文

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

简介

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 多平台发布

相关文章:

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

简介 ABBA BABA 统计&#xff08;也称为 D 统计&#xff09;为偏离严格的分叉进化历史提供了简单而有力的检验。因此&#xff0c;它们经常用于使用基因组规模的 SNP 数据测试基因渗入。 虽然最初开发用于基因渗入的全基因组测试&#xff0c;但它们也可以应用于较小的窗口&#…...

二分答案(求最大值的最小值||求最小值的最大值)

引入 二分答案要建立在二分查找的基础上&#xff0c;在此之前&#xff0c;要知道二分查找的三个模板 模板一 while(l<r) {int mid(lr)>>1;if(check(mid)) rmid;else lmid1; }模板二 while(l<r) {int midlr1>>1;if(check(mid)) lmid;else rmid-1; }模板三…...

思维模型 周期

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。周期是一个看似极为简单&#xff0c;但背后却蕴藏着大智慧的模型&#xff0c;了解周期&#xff0c;对于了解王朝更替&#xff0c;数学之美&#xff0c;经济运转等都有帮助。 1 周期的应用 …...

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

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

Python学习之索引与切片

Python学习之索引与切片 s “0abcdefghijklmnopqrstuvwxyz”&#xff0c;第一个元素‘0’&#xff0c;索引号为0&#xff0c;最后一个元素‘z’&#xff0c;索引号为26 1. s[0]获取索引号为0的元素 2. s[1:3]获取索引号为1的元素&#xff0c;直到但不包括索引号为3的元素。即…...

编程每日一练(多语言实现)基础篇:满足abcd=(ab+cd)^2的数 (增加Go语言实现)

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现3.4 JavaScript 语言实现3.5 Go 语言实现 一、实例描述 假设 abcd 是一个四位整数&#xff0c;将它分成两段&#xff0c;即 ab 和 cd&#xff0c;使之相加求和后再平方。求满…...

LeetCode 热题 HOT 100:回溯专题

LeetCode 热题 HOT 100&#xff1a;https://leetcode.cn/problem-list/2cktkvj/ 文章目录 17. 电话号码的字母组合22. 括号生成39. 组合总和46. 全排列补充&#xff1a;47. 全排列 II &#xff08;待优化)78. 子集79. 单词搜索124. 二叉树中的最大路径和200. 岛屿数量437. 路径…...

喝健康白酒 有益生心健康

中国的制酒史源远流长&#xff0c;酒渗透在中华五千年的文化中。酒与烟不同&#xff0c;烟对人体有百害而无一利&#xff0c;而对于酒&#xff0c;若掌握好饮酒的度&#xff0c;对人体有一定的养生作用&#xff0c;所以我们通常会说“戒烟限酒”。 据一些专家研究&#xff0c;…...

动态规划:两个数组的dp问题(C++)

动态规划&#xff1a;两个数组的dp问题 前言两个数组的dp问题1.最长公共子序列&#xff08;中等&#xff09;2.不同的子序列&#xff08;困难&#xff09;3.通配符匹配&#xff08;困难&#xff09;4.正则表达式&#xff08;困难&#xff09;5.交错字符串&#xff08;中等&…...

BASH shell脚本篇2——条件命令

这篇文章介绍下BASH shell中的条件相关的命令&#xff0c;包括&#xff1a;if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令&#xff0c;请参考&#xff1a;BASH shell脚本篇1——基本命令 1. If语句 if语句用于在顺序执行语句的流程中执行条…...

【图论C++】Floyd算法(多源最短路径长 及 完整路径)

>>>竞赛算法 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在算法竞赛学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff…...

小谈设计模式(11)—模板方法模式

小谈设计模式&#xff08;11&#xff09;—模板方法模式 专栏介绍专栏地址专栏介绍 模板方法模式角色分类抽象类&#xff08;Abstract Class&#xff09;具体子类&#xff08;Concrete Class&#xff09;抽象方法&#xff08;Abstract Method&#xff09;具体方法&#xff08;C…...

C#程序中很多ntdll.dll、clr.dll的线程

如下图 需要“右键工程——调试——取消勾选‘启用本地代码调试’”即可。...

低代码工作流程管理系统:提升企业运营效率的利器

业务运营状况是否良好&#xff0c;除了人员需要配合以外&#xff0c;真正发挥作用的是背后的工作流程。将重复的工作进行自动化处理&#xff0c;确保这些流程最终指向同一个目标、实现一致的运营结果。而设计和实施不佳的工作流程则产生相反的效果——导致处理时间延长、运营成…...

HIVE SQL regexp_extract和regexp_replace配合使用正则提取多个符合条件的值

《平凡的世界》评分不错&#xff0c;《巴黎圣母院》改变成的电影不错&#xff0c;还有<<1984>>也蛮好看。 如何使用regexp_extract&regexp_replace函数将以上文本中所有书籍名称都提取出来&#xff1f; select substr(regexp_replace(regexp_extract(regexp_…...

debian 安装matlab2022b报错解决方法与问题解决思路

报错 terminate called after throwing an instance of ‘std::runtime_error’ 在安装目录执行 ./bin/glnxa64/MATLABWindow通过执行以上命令发现是和libharfbuzz库有关。 该库在调用freetype库时&#xff0c;有方法找不到。 偿试remove freetype库&#xff0c;发现该库有大…...

Jenkins集成AppScan实现

一、Jenkins上安装插件 在Jenkins里安装以下插件 ibm-security-appscanstandard-scanner 二、打开AppScan 1、配置需要扫描的地址 配置需要扫描的地址 2、记录好要扫描的URL登录序列 记录好要扫描的URL登录序列 3、导出要扫描的URL登录序列设置 导出要扫描的URL登录序列设置 三…...

10.1 File类

前言&#xff1a; java.io包中的File类是唯一一个可以代表磁盘文件的对象&#xff0c;它定义了一些用于操作文件的方法。通过调用File类提供的各种方法&#xff0c;可以创建、删除或者重命名文件&#xff0c;判断硬盘上某个文件是否存在&#xff0c;查询文件最后修改时间&…...

[论文笔记]UNILM

引言 今天带来论文Unified Language Model Pre-training for Natural Language Understanding and Generation的笔记,论文标题是 统一预训练语言模型用于自然语言理解和生成。 本篇工作提出了一个新的统一预训练语言模型(Unifield pre-trained Language Model,UniLM),可以同…...

LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略

LLM之Colossal-LLaMA-2&#xff1a;Colossal-LLaMA-2的简介、安装、使用方法之详细攻略 导读&#xff1a;2023年9月25日&#xff0c;Colossal-AI团队推出了开源模型Colossal-LLaMA-2-7B-base。Colossal-LLaMA-2项目的技术细节&#xff0c;主要核心要点总结如下: >> 数据处…...

AI周报如何成为技术决策的精准导航仪

1. 项目概述&#xff1a;一份真正值得花时间读的AI周报&#xff0c;到底长什么样&#xff1f;我做技术类内容整理和分发已经十一年了&#xff0c;从2014年最早在知乎写“每周机器学习论文速览”&#xff0c;到后来运营三个垂直技术社群、给二十多家企业做AI落地咨询&#xff0c…...

工具调用优化:减少API延迟对Agent性能的影响

《工具调用优化全指南:彻底解决API延迟拖累大模型Agent性能的痛点》 副标题:从原理到落地,覆盖缓存、并行、调度、轻量化改造全链路可复现方案 第一部分:引言与基础 1.1 摘要/引言 你有没有遇到过这种场景:辛辛苦苦开发的智能Agent功能非常强大,能查订单、搜资料、算数…...

从零开始学AI Agent:软件工程视角下的企业数字化转型实践指南(收藏版)

本文从软件工程视角出发&#xff0c;探讨了AI Agent在企业数字化转型中的应用与构建。首先强调需求分析的重要性&#xff0c;指出应从业务问题出发判断Agent是否适用。接着&#xff0c;介绍了Agent的系统设计&#xff0c;包括任务编排、上下文管理、记忆存储和工具扩展四个核心…...

MT7628串口透传实战:手把手教你用ser2net把串口数据转发到TCP(含OpenWrt固件编译)

MT7628串口透传实战&#xff1a;从零构建网络化串口通信系统 在物联网和嵌入式开发领域&#xff0c;串口通信是最基础也是最常用的数据传输方式之一。MT7628作为一款广泛应用于路由器、智能家居设备的SoC芯片&#xff0c;其串口功能常被用于设备调试、传感器数据采集等场景。但…...

用Python复现黏菌算法SMA:从生物觅食到代码优化的完整实战

用Python复现黏菌算法SMA&#xff1a;从生物觅食到代码优化的完整实战 黏菌算法&#xff08;Slime Mould Algorithm, SMA&#xff09;作为一种新兴的智能优化算法&#xff0c;近年来在工程优化、机器学习参数调优等领域展现出独特优势。本文将带您从生物行为理解到Python实现&a…...

SX1255和AD9361的LO泄露实测对比:为什么你的无线模块EVM总是不达标?

SX1255与AD9361本振泄露实战分析&#xff1a;破解EVM不达标的三大关键策略 在调试LoRa模块或小型基站射频前端时&#xff0c;工程师们最常遇到的"幽灵问题"莫过于EVM指标莫名劣化。上周深夜&#xff0c;当我的频谱仪上再次出现那个熟悉的载波泄露尖峰时&#xff0c;我…...

Pulover‘s Macro Creator:你的数字助手,让电脑学会“自己工作“

Pulovers Macro Creator&#xff1a;你的数字助手&#xff0c;让电脑学会"自己工作" 【免费下载链接】PuloversMacroCreator Automation Utility - Recorder & Script Generator 项目地址: https://gitcode.com/gh_mirrors/pu/PuloversMacroCreator 你是否…...

Input Overlay 完整指南:实时显示键盘、游戏手柄和鼠标输入的终极工具

Input Overlay 完整指南&#xff1a;实时显示键盘、游戏手柄和鼠标输入的终极工具 【免费下载链接】input-overlay Show keyboard, gamepad and mouse input on stream 项目地址: https://gitcode.com/gh_mirrors/in/input-overlay Input Overlay 是一款功能强大的开源输…...

杀戮尖塔2绅士mod官方正版2026最新版pc免费下载(看到请立即转存 资源随时失效)手机版通用

下载链接 解压密码&#xff1a;www.kdacg.com 基于响应式状态机的高清动态 UI 组件设计与跨平台渲染优化实践 在当前的企业级前端与交互设计开发中&#xff0c;如何在高复杂度的业务逻辑下&#xff0c;实现高清、高性能且具备强即时反馈的多模态动态 UI 组件&#xff0c;一直…...

Deno_2.0全栈开发实战下一代JavaScript运行时完全指南

Deno 2.0全栈开发实战:下一代JavaScript运行时完全指南 📅 发布日期:2026-05-21 | 🏷️ 标签:Deno、TypeScript、全栈开发、Fresh框架、边缘计算 📖 阅读时间:约25分钟 | 💡 难度:中级到高级 前言:Deno 2.0——Node.js之父的"理想主义"终于落地 2018年…...