【基于R语言群体遗传学】-11-二倍体适应性进化

之前的博客,我们讨论了正选择在单倍体中的情况,可以先学习之前的博客:

群体遗传学_tRNA做科研的博客-CSDN博客


分子适应的经典观点是正选择。对于一个新的突变在进化意义上起作用,它必须在罕见时通过选择增加。之前例子中有选择系数s是负数,所以该等位基因有相对适应性损失,并且通常很快从种群中移除。这种类型的选择被称为负选择,虽然它乍看起来可能微不足道(迅速丢失的罕见突变对种群的一般或长期影响很小),但它是选择的一个非常重要的类别。

现在,让我们解决二倍体选择的问题。我们之前所有的选择示例都是基因选择:选择仅作用于单个等位基因。但是,由于二倍体有两个等位基因,它可以产生三种可能的基因型(AA、Aa、aa),每种基因型根据它们自己的选择系数可能有适应性优势或劣势:

sAA、sAa和saa

我们使用w = 1 + s来表示这三种基因型的相对适应性:

wAA、wAa和waa

因为我们处理的是基因型,我们可以通过将预期的基因型频率(根据哈代-温伯格方程)乘以它们的适应性来预测下一代中仅A等位基因的频率(p(t+1))。我们必须记住,杂合子只对我们感兴趣的等位基因贡献一半的频率,因此我们需要将预期的杂合子频率2p(1−p)除以2以得到p(1−p)。

现在我们可以引入优势的复杂性。我们在之前讨论血型时简要提到了这个概念;具体来说,当A和B等位基因与i等位基因在杂合子中配对时,它们仍然分别赋予A型和B型血。所以我们可以说A和B等位基因对i等位基因是显性的,而i等位基因对A和B等位基因都是隐性的。就像表型一样,我们可以认为适应性效应是彼此显性和隐性的。

假设A等位基因有一个10%的适应性优势。我们的纯合子适应性值相当简单:

wAA = 1.1和waa = 1

如果A等位基因的适应性优势是显性的,我们的杂合子适应性将与AA纯合子相同:

wAa = wAA = 1.1

如果是隐性的,则与aa纯合子相同:

wAa = waa = 1

然而,显性/隐性关系并不一定如此明确。你可能会观察到一种称为不完全显性的现象,其中杂合子的适应性介于两个纯合子之间。 在不完全显性的情况下,杂合子适应性是两个纯合子基因型适应性的确切平均值,我们将使用半显性(semidominance)这个词。这些显性程度预测了不同的进化轨迹。我们将使用相同的代码为所有三种适应性场景(隐性、显性和半显性)生成等位基因频率预测:

# 设置初始等位基因频率为 0.05
init_p <- 0.05# 定义模拟的代数为 400 代
gen <- 400# 定义三种不同的适应度场景:
# 隐性基因型的适应度值,纯合隐性基因型适应度为 1.1,杂合子适应度为 1
rec <- c(1.1, 1) 
# 显性基因型的适应度值,纯合和杂合适应度均为 1.1
dom <- c(1.1, 1.1) 
# 半显性基因型的适应度值,纯合子适应度为 1.1,杂合子适应度为 1.05
sem <- c(1.1, 1.05) # 创建一个矩阵,包含三个相同的初始等位基因频率
p <- matrix(c(init_p, init_p, init_p))# 将三种适应度场景组合成一个列表
w <- list(rec, dom, sem)# 定义一个函数 FitFreq,用于计算下一代的等位基因频率
FitFreq <- function(X, p){# 计算总适应度w_total <- X[1]*p^2 + X[2]*2*p*(1-p) + (1-p)^2# 根据适应度计算下一代的等位基因频率p_t <- (X[1]*p^2 + X[2]*p*(1-p)) / w_total# 返回计算出的下一代等位基因频率return(p_t)
}# 使用隐性基因型的适应度值和初始等位基因频率调用 FitFreq 函数
# 以计算在这些条件下下一代的等位基因频率
FitFreq(w[[1]], p[[1]])

我们得到:

我们对三种情况进行建模模拟:

# 循环从第1代到第399代(总共400代,减去初始的1代)
for(i in 1:(gen-1)){# 使用cbind函数将新计算的等位基因频率添加到矩阵p中# lapply函数遍历适应度场景列表w,并对每个场景应用FitFreq函数# seq_along(w)生成与w长度相同的序列,作为lapply的索引# function(j, y, n) {FitFreq(y[[j]], n[[j]])}是一个匿名函数,# 它接受索引j,并使用w和p的最新列来计算新的等位基因频率p <- cbind(p, lapply(seq_along(w),function(j, y, n) {FitFreq(y[[j]], n[[j]])},y=w, n=p[,ncol(p)]))
}# 绘制图形,设置x轴标签为"Generations",y轴标签为"Allele frequency"
# x轴范围设置为1到400代,y轴范围设置为0到1
plot(x=NULL, xlab="Generations", ylab="Allele frequency",xlim=c(1,gen), ylim=c(0, 1))# 定义颜色和线型
colors <- c("orange", "black", "cyan")
line <- c(1,2,4)# 循环遍历矩阵p的每一行(每种适应度场景)
for(i in 1:nrow(p)){# 绘制线条,表示每一代中该适应度场景下的等位基因频率变化# lwd设置线宽,lty设置线型,col设置颜色lines(1:gen, p[i,], lwd=2, lty=line[i], col=colors[i])
}# 添加图例,说明每条线代表的适应度场景
legend("bottomleft",legend=c("Recessive","Dominant","Semi-dominant"),inset=c(0,1), xpd=TRUE, bty="n",col=colors, lty = line, lwd=2)

我们可以看到,当基因频率罕见时,显性适应度效应在频率上的初始上升速度更快,但在高频率下固定的速度较慢;隐性适应度效应则相反,在很长一段时间内频率几乎没有增加,然后迅速上升到固定。半显性适应度效应似乎是在整体固定时间方面最有效的二倍体配置。然而,直接作用于单倍体基因型的基因选择仍然是最有效的选择形式。

半显性Logit预测

如果适应度效应是半显性的,那么通过logit变换(即取几率的自然对数)可以线性化预测的等位基因频率变化。在广泛的频率范围内,其他类型的显性在通过logit变换后几乎是线性的。

这使我们能够使用线性回归从等位基因频率数据中估计选择系数。让我们看看Fisher和Ford(1947)的真实时间等位基因频率测量结果,这些结果显示了猩红虎蛾(Callimorpha dominula)八代中等位基因频率的变化。

所讨论的等位基因(在89-90%的频率下相当常见)影响蛾的翅膀色素沉着,并可能由于捕食(花纹可能会暴露你)或配偶偏好和繁殖成功(某些颜色图案比其他颜色更具吸引力)或你能想到的任何其他选择故事而影响生存。我们可以看到常见的纯合子的翅膀是红色和黑色,带有黄色斑点,而较罕见的纯合子的斑点要少得多,翅膀通常更暗。此外,我们实际上可以看到,我们所测量的等位基因是不完全显性的,因此杂合子与两种纯合子都有区别,具有中间表型

# 加载 popgenr 包
library(popgenr)# 载入蛾类种群数据
data(moth)# 从数据中提取年份和等位基因频率
Years <- moth$Years
Freq <- moth$p# 计算等位基因频率的对数几率(logit 转换)
logit <- log(Freq/(1-Freq))# 绘制年份与对数几率的关系图
plot(Years, logit)# 进行线性回归分析,拟合年份与对数几率之间的关系
(linear <- lm(logit ~ Years))# 在图中添加线性回归线
abline(linear)

很明显等位基因的频率随着时间的推移而增加。回归最佳拟合线的斜率实际上被假定为大约等于携带一个等位基因副本的杂合子和携带两个副本的纯合子之间的适应度差异。在我们的输出中,我们看到斜率约为0.12;这为我们提供了杂合子的选择系数的估计值(s+− ≈ 0.12),如果我们假设半显性,那么我们就可以估计我们剩余的基因型适应度为w++ = 1.24,w+− = 1.12,和w−− = 1,其中“+”表示我们在数据中追踪的等位基因,“-”是导致较暗表型的较罕见等位基因。但这种方法本身并不能区分自然选择和遗传漂变。我们假设选择是我们等位基因频率变化的主要驱动力,但完全有可能漂变也在起作用。此外,这些测量并不是相互独立的——明年的等位基因频率取决于前一年的频率

一个非常灵活的测试数据集框架是在模型下生成模拟数据,在这个例子中是一个只有遗传漂变而没有选择的零模型,并观察观测结果在模拟结果的分布中的位置。让我们首先保存来自线性回归的平方相关系数,并将其作为描述我们的等位基因频率随时间变化的关键描述:

(obs_r <- summary(linear)$r.squared )
[1] 0.6551432

我们可以在漂变模型下模拟数千个数据集,并计算模拟数据集超过这个值的频率。我们甚至可以允许我们的种群大小和选择系数都发生变化,以估计s+−的可能值范围; 修改之前的遗传漂变代码,我们可以看到,如果实际上根本没有选择,只有漂变在起作用,我们有多频繁地看到相同或更大的r方值。种群大小在这里将发挥重要作用;我们已经看到,随着我们的种群规模变小,漂变的影响变得更加明显,并且很容易淹没选择的影响。因此,如果我们用小种群规模运行这个模拟,我们将放大漂变的影响。为了防止这种情况,我们可以说我们正在研究的种群至少有1000个个体。

# 设置初始等位基因频率
initp <- 0.908# 定义模拟的代数
gen <- 8# 创建一个向量,表示年份
Years <- c(1:gen)# 设置模拟重复的次数
reps <- 10000# 初始化计数器
count <- 0# 设置种群大小
N <- 1000# 开始模拟
for(i in 1:reps){# 重置等位基因频率p <- initp# 进行除第一代外的每一代的模拟for(j in 1:(gen-1)){# 使用二项分布模拟等位基因在下一代中的传递a <- rbinom(1, 2*N, p[j])# 更新等位基因频率p <- c(p, a/(2*N))}# 对等位基因频率进行对数几率转换logit <- log(p/(1-p))# 拟合线性回归模型reg <- lm(logit ~ Years)# 获取模拟得到的 r^2 值sim_r <- summary(reg)$r.squared# 如果模拟得到的 r^2 值大于等于观测到的 r^2 值(obs_r),则计数器加一if(obs_r <= sim_r){count = count + 1}
}# 计算满足条件的模拟次数占总模拟次数的比例
count / reps

从这个结果中,我们可以看到,由于漂变看到观测数据的概率大约是33%。这个比例足够高,以至于我们应该合理地对关于这个等位基因的任何选择故事持怀疑态度。在我们继续讨论其他形式的选择之前,关于这个数据集的最后一点是,早期采集的猩红虎蛾样本中,常见等位基因的频率甚至更高。所以,在某个时间点,人们实际上认为选择是在增加“-”等位基因的频率,而不是像我们在1939年到1946年看到的减少它。这应该强调在试图推断选择时应谨慎行事,因为除了用随机漂变解释变化外,选择压力(以及种群大小)也可能随时间波动

下一篇文章我们将考虑一种有意思的现象-杂合优势。

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

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

相关文章

linux下查看当前文件夹下目录的大小

通过这个命令可以查询当前文件夹下的大文件&#xff0c;便于释放磁盘 find . -maxdepth 1 -type d -exec du -sh {} \;

Centos7 安装老版本的chrome

查看自己linux是哪个centos版本 使用以下命令&#xff1a; cat /etc/centos-release我这里是centOS 7。然后在安装最新版的google-chrome时&#xff0c;总是会报错显示存在依赖环境的问题&#xff0c;使得无法安装成功chrome。 Package: google-chrome-stable (/google-chro…

以太坊学习笔记--智能合约效率问题

以太坊学习笔记day5 storage和memory https://solidity.readthedocs.io/en/v0.4.21/types.html#data-location Every complex type, i.e. arrays and structs, has an additional annotation, the “data location”, about whether it is stored in memory or in storage. De…

Jenkins 常用的 Linux 指令

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Leetcode—93. 复原 IP 地址【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—93. 复原 IP 地址 实现代码 class Solution { public:vector<string> restoreIpAddresses(string s) {vector<string> ans;vector<string> path;function<void(int)>dfs [&](int start) {if…

项目/代码规范与Apifox介绍使用

目录 目录 一、项目规范&#xff1a; &#xff08;一&#xff09;项目结构&#xff1a; &#xff08;二&#xff09;传送的数据对象体 二、代码规范&#xff1a; &#xff08;一&#xff09;数据库命名规范&#xff1a; &#xff08;二&#xff09;注释规范&#xff1a; …

【JSP+Servlet+Maven】——优质外卖订餐系统之概论部分

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

XLSX + LuckySheet + LuckyExcel + Web Worker实现前端的excel预览

文章目录 功能简介简单代码实现web worker 版本效果参考 功能简介 通过LuckyExcel的transformExcelToLucky方法&#xff0c; 我们可以把一个文件直接转成LuckySheet需要的json字符串&#xff0c; 之后我们就可以用LuckySheet预览excelLuckyExcel只能解析xlsx格式的excel文件&a…

别催了别催了,我这周肝快爆了。。

大家好&#xff0c;我是程序员鱼皮。每月一次&#xff0c;给大家分享一下最近一个月我的工作和生活情况。 哦不对&#xff0c;最近一个月&#xff0c;基本没有生活。。 上个月&#xff0c;我主要的重心放在了 3 件事上&#xff1a;产品、技术建设、自媒体。 6 月复盘 产品 …

不锈钢焊条A022

说明&#xff1a;A022是钛钙型药皮的不锈钢焊条。交直流两用&#xff0c;操作性能良好。熔敷金属有良好的耐热、耐腐蚀及抗裂性能。 用途&#xff1a;用于焊接尿素、合成纤维等设备及相同类型的不锈钢结构&#xff0c;也可用于焊后不能进行热处理的铬不锈钢以及复合钢和异种钢等…

kotlin 两个 list 怎么过滤重复数据

在 Kotlin 中&#xff0c;可以通过多种方式来过滤两个列表中的重复数据。下面是几种常见的方法&#xff1a; 方法 1: 使用 distinct 函数 如果你只想要两个列表中去重后的所有元素&#xff0c;可以使用 distinct 函数&#xff1a; val list1 listOf(1, 2, 3, 4, 5) val lis…

机器学习的遗忘——基于文章“Forgetting“ in Machine Learning and Beyond: A Survey

文章概要 这篇调查文章仅关注选择性遗忘&#xff0c;承认遗忘某些信息可以通过允许模型优先考虑和保留更重要或相关的信息&#xff0c;以及保护用户隐私&#xff0c;从而带来好处。选择性遗忘&#xff08;Selective forgetting&#xff09;涉及有选择地忽略无关或噪声数据。这…

128陷阱(超详细)

int x 128;int y 128;int n 127;int m 127;Integer d Integer.valueOf(x);Integer g Integer.valueOf(y);Integer z Integer.valueOf(n);Integer v Integer.valueOf(m);System.out.println(d g);System.out.println(z v); 思考一下他的结果是什么&#xff1f; 为什么…

快速搭建发卡独立站(完全免费)

本文介绍如何使用开源项目&#xff0c;零成本&#xff0c;无需服务器的方式搭建一套自己的数字商品/发卡独立站&#xff0c;不需要任何开发能力&#xff0c;即便是小白用户也能搭建。 感兴趣可直接查看开源项目地址&#x1f449; https://github.com/iDataRiver/theme-basic …

JavaScript基础笔记

前言 在JavaScript诞生的前几年&#xff0c;有人说: JavaScript是一门四不像的语言;JavaScript是一门没有规范的语言;JavaScript是一门兼容糟糕的语言;JavaScript是一门不精准的语言;JavaScript是一个半成品语言;JavaScript是一门糟糕的语言;JavaScript只是一个玩具胶水语言;…

基于java+ssm+jsp实现的网上购物系统(文末源码+lw+ppt)23-45

1 摘 要 本文首先实现了网上购物系统设计与实现管理技术的发展随后依照传统的软件开发流程&#xff0c;最先为系统挑选适用的言语和软件开发平台&#xff0c;依据需求分析开展控制模块制做和数据库查询构造设计&#xff0c;随后依据系统整体功能模块的设计&#xff0c;制作系…

掌上教务系统-计算机毕业设计源码84604

摘要 在数字化教育日益成为主流的今天&#xff0c;教务管理系统的智能化和便捷性显得尤为重要。为满足学校、教师、学生及家长对教务管理的高效需求&#xff0c;我们基于Spring Boot框架设计并实现了一款掌上教务系统。该系统不仅具备课程分类管理功能&#xff0c;使各类课程信…

Node.js介绍 , 安装与使用

1.Node.js 1 什么是Node.js 官网&#xff1a;https://nodejs.org/zh-cn/ 中文学习网&#xff1a;http://nodejs.cn/learn1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 2.前端的底层 html…

架构面试-分布式存储系统edits_log分段加锁与锁优化

文章目录 锁优化策略标志位修改等可见性场景优先使用volatile1. 标志位的修改2. 单例模式的双重检查锁定&#xff08;DCL&#xff09;3. 原子状态的更新注意事项 数值递增场景优先使用Atomic原子类1. AtomicInteger 和 AtomicLong2. 使用示例3. 性能优势4. 其他原子类注意事项 …

Java-Redis-Clickhouse-Jenkins-MybatisPlus-Zookeeper-vscode-Docker

文章目录 Clickhouse基础实操windows docker desktop 下载clickhousespringboot项目配置clickhouse Redis谈下你对Redis的了解&#xff1f;Redis一般都有哪些使用的场景&#xff1f;Redis有哪些常见的功能&#xff1f;Redis支持的数据类型有哪些&#xff1f;Redis为什么这么快…