【基于R语言群体遗传学】-8-代际及时间推移对于变异的影响

上一篇博客,我们学习了在非选择下,以二项分布模拟遗传漂变的过程:【基于R语言群体遗传学】-7-遗传变异(genetic variation)-CSDN博客

那么我们之前有在代际之间去模拟,那么我们就想知道,遗传变异随着时间的推移,会发生什么样的变化,我们今天进行探讨:


遗传漂变的基准实证研究之一是由早期遗传学对于果蝇的研究提供的。在五十年代,彼得·布里进行了一个令人惊讶的费力实验,让超过100个小型果蝇群体独立进化,这些果蝇具有突变眼色表型,持续了二十代。他以50%的频率开始计算每组16只果蝇,携带两个bw(“棕色”)等位基因,这使纯合子个体呈现出鲜艳的红橙色眼睛,而杂合子个体则可以通过明显较浅的橙色眼睛来区分。不携带bw75等位基因(bw/bw纯合子)的果蝇会表现出白色眼睛。为了保持种群大小不变,每一代都从上一代的后代中随机抽取一组新的16只果蝇,作为下一代的父母。通过观察眼睛颜色,布里统计了超过100个重复实验中bw75拷贝数随时间的变化,而且整个过程做了两次!

在我们查看布里的数据之前,让我们首先以一种新的方式可视化我们之前的模拟,以便我们可以更容易地进行比较,然后再使用我们模拟的数据和布里的数据可视化进行比较:

# 设置群体大小
N <- 16# 可能的等位基因数量范围(从0到2倍群体大小)
possible <- 0:(2*N)# 初始化一个矩阵x,用于存储概率值,初始时所有概率为0
x <- matrix(c(rep(0,2*N+1)), ncol=2*N+1, byrow=T)# 在矩阵x的中心位置(即N+1的位置)设置概率为1,代表起始状态
x[N+1] <- 1# 初始化一个空向量P,用于存储二项分布的概率
P <- NULL # 计算每个可能的等位基因数量的二项分布概率,并存储在P中
for(i in possible){P <- c(P,dbinom(possible, size=2*N, prob=i/(2*N)))
}# 将P转换为矩阵Q,每行对应一个可能的等位基因数量的所有概率
Q <- matrix(P, ncol=2*N+1, byrow=T)# 计算初始状态下的概率分布R
R <- x %*% Q # 将初始概率分布赋值给Prob
Prob <- R# 初始化代数计数器g
g <- rep(1,ncol(R))# 循环直到达到第19代
while(g[1]<19){# 更新概率分布RR <- R %*% Q# 将新的概率分布添加到Prob矩阵中Prob <- rbind(Prob,R)# 代数计数器加1g <- g+1
}  # 使用persp函数绘制概率分布的三维图
persp(x = 1:g[1], # 代数范围y = possible, # 可能的等位基因数量z = Prob, # 概率矩阵theta = 60, phi = 20, # 视图旋转角度xlab = 'Generations', ylab = 'Number of alleles', # x轴和y轴标签zlab = 'Probability', # z轴标签shade = 0.3 # 表面阴影强度
)# 加载popgenr包中的果蝇数据集
library('popgenr')
data(fly)# 使用相同的参数绘制实际观测数据的图
persp(x = 1:g[1],y = possible,z = fly[-1,], theta = 60, phi = 20,xlab = 'Generations', ylab = 'Number of alleles',zlab = 'Observations', # z轴标签改为'Observations'shade = 0.3
)

观察这两个图,我们应该看到bw75等位基因的行为与我们假设的A等位基因的二项式抽样模型非常相似。在模拟和实验结束时,我们看到最高峰出现在最左侧的“灭绝”状态(零个A/bw75等位基因)和最右侧的“固定”状态(与位点一样多的A/bw75等位基因)。这表明,如果没有其他力量作用于单个等位基因,随着时间的推移,每一个新的变体要么消失,要么不再是明显的变体,因为它成为了位点上的唯一等位基因。中央峰在广泛的概率范围内的衰减应该让人想起物理学中的热扩散(激发了中性理论的“扩散近似”);然而,频率为零和一的吸收边界最终是概率集中的地方。 那么为什么我们应该在种群内观察到任何水平的遗传变异呢?突变率当然是一个因素,但我们已经看到,新的变体几乎在出现时就很有可能消失。所以,让我们考虑一些原因,为什么看似中性的等位基因会在种群中持续存在。我们之前看到种群大小可以影响单个等位基因的固定和灭绝概率。让我们再次可视化这种效应,但这次同时观察多个不同的模拟。我们将根据种群大小和它们的起始频率,使用rbinom随机抽取每一代的等位基因数量:

我们分别对于10个的群体、100个群体及1000个群体进行模拟:

par(mfrow=c(2,2))
# 初始化等位基因频率
init_p <- 0.05# 设定模拟的代数
gen <- 100# 设定重复实验的次数
reps <- 10# 生成一系列颜色,用于区分不同的重复实验
colors <- rainbow(reps)# 设定群体大小
N <- 100# 创建一个空白的绘图区域,设置x轴和y轴的范围及标签
plot(x=NULL, y=NULL, xlim=c(1, gen), ylim=c(0,1),xlab="Generations", ylab="Allele frequency")# 对于每次重复实验
for(i in 1:reps){# 初始化等位基因频率p <- init_p# 对于每一代(除了第一代)for(j in 1:(gen-1)){# 使用二项分布模拟等位基因的传递a <- rbinom(n=1, size=2*N, prob=p[j])# 计算新的等位基因频率f <- a/(2*N)# 更新等位基因频率向量p <- c(p,f)}# 在图中画出这一重复实验的等位基因频率变化轨迹lines(x=1:gen, y=p, lwd=2, col=colors[i])
}

随着种群规模的增大,等位基因似乎会在更长的时间内持续存在。然而,也尝试改变这个模拟中的世代数(Gen)。生物体的世代时间可能有很大的不同:在我们人类漫长一代的时间里,你可能会看到几百代、几千代或更多的果蝇。如果你让它们运行1,000代,而不是100代,较大的种群与较小的种群相比如何?随着时间的推移,变异的丧失几乎是肯定的,但种群大小和世代时间等因素显著影响我们预期等位基因在种群中丧失的速度。 最后,这里有一个遗传漂变的模拟,它跟踪不同的轨迹,并在完成时对它们进行平均。你可以调整起始频率和种群大小,虽然个体轨迹遍布各处,但最终用粗黑线绘制的平均值基本保持不变。

# 初始化等位基因频率
init_p <- 0.25# 设定模拟的代数
gen <- 100# 设定重复实验的次数
reps <- 500# 生成一系列颜色,用于区分不同的重复实验
colors <- rainbow(reps)# 设定群体大小
N <- 100# 创建一个空白的绘图区域,设置x轴和y轴的范围及标签
plot(x=NULL, y=NULL, xlim=c(1, gen), ylim=c(0,1),xlab="Generations", ylab="Allele frequency")# 初始化一个空矩阵Freq,用于保存每次重复实验的等位基因频率
Freq <- NULL# 对于每次重复实验
for(i in 1:reps){# 初始化等位基因频率p <- init_p# 对于每一代(除了第一代)for(j in 1:(gen-1)){# 使用二项分布模拟等位基因的传递a <- rbinom(n=1, size=2*N, prob=p[j])# 计算新的等位基因频率f <- a/(2*N)# 更新等位基因频率向量p <- c(p,f)}# 将这次重复实验的等位基因频率保存到Freq矩阵中Freq <- rbind(Freq, p)# 在图中画出这一重复实验的等位基因频率变化轨迹lines(x=1:gen, y=p, lwd=2, col=colors[i])
}# 计算所有重复实验的平均等位基因频率,并在图中以黑色线条画出
lines(1:gen, colMeans(Freq), lwd=2, col="black")

下一篇博客我们将学习变异的量化,及群体规模的模拟。

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

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

相关文章

KVM虚机调整磁盘大小(注:需重启虚拟机)

1、将磁盘大小由15G调整为25G [rootkvm ~]# virsh domblklist kvm-client #显示虚拟机硬盘列表 [rootkvm ~]# qemu-img resize /var/lib/libvirt/images/tesk-disk.qcow2 10G #扩容 [rootkvm ~]# qemu-img info /var/lib/libvirt/images/test-disk.qcow2 #查看信息 注&…

奥威BI方案:多行业、多场景,只打高端局

奥威BI方案&#xff0c;确实以其卓越的性能和广泛的应用领域&#xff0c;在高端数据分析市场中占据了一席之地。以下是对奥威BI方案的详细解析。 奥威BI方案是一款针对多行业、多场景的全面数据分析解决方案&#xff0c;它结合了大数据、云计算等先进技术&#xff0c;为企业提…

看互联网大厂如何落地AI-Agent(3)

vivo一站式AI智能体构建平台的演进实践 引言 在AI技术的浪潮中&#xff0c;vivo互联网产品平台架构团队负责人张硕分享了vivo在构建一站式AI智能体平台方面的演进实践和深刻洞见。 背景与挑战 vivo面临的挑战包括创造商业价值、降低学习成本、合规性、以及LLM&#xff08;大…

hnust 1816: 算法10-9:简单选择排序

hnust 1816: 算法10-9&#xff1a;简单选择排序 题目描述 选择排序的基本思想是&#xff1a;每一趟比较过程中&#xff0c;在n-i1(i1,2,…,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录。 在多种选择排序中&#xff0c;最常用且形式最为简单的是简单选择排序。…

收银系统源码-收银台副屏广告

1. 功能描述 门店广告&#xff1a;双屏收银机&#xff0c;副屏广告&#xff0c;主屏和副屏同步&#xff0c;总部可统一控制广告位&#xff0c;也可以给门店开放权限&#xff0c;门店独立上传广告位&#xff1b; 2.适用场景 新店开业、门店周年庆、节假日门店活动宣传&#x…

【HICE】DNS反向解析

反向解析&#xff1a;IP ----> 主机名 1.更改主配置文件 2.:更改反向的信息 3.重启服务 4.测试解析是否成功

论文辅导 | 基于多尺度分解的LSTM⁃ARIMA锂电池寿命预测

辅导文章 模型描述 锂电池剩余使用寿命&#xff08;Remaining useful life&#xff0c;RUL&#xff09;预测是锂电池研究的一个重要方向&#xff0c;通过对RUL的准确预测&#xff0c;可以更好地管理和维护电池&#xff0c;延长电池使用寿命。为了能够准确预测锂电池的RUL&…

待研究课题记录

最近了解到两个新的有趣的节点&#xff0c;但是对于实际效果不是很确定&#xff0c;所以这里记录下&#xff0c;后续慢慢研究&#xff1a; 扰动注意力引导 Perturbed Attention Guidance GitHub - KU-CVLAB/Perturbed-Attention-Guidance: Official implementation of "…

CTS单测某个模块和测试项

1 &#xff0c;测试单个模块命令 run cts -m <模块名> 比如&#xff1a;run cts -m CtsUsbTests模块名可以从测试报告中看&#xff0c;如下&#xff1a; 2&#xff0c; 测试单个测试项 run cts -m <模块名> -t <test_name> 比如&#xff1a;run cts -m ru…

Linux程序地址空间

1. 进程地址空间 简单来说&#xff0c;就是从高地址往低地址&#xff0c;内存分区分别是&#xff1a; 内核空间&#xff1a;命令行参数argv和环境变量env等栈区&#xff1a;大部分局部变量&#xff0c;栈区内存往低处增长堆区&#xff1a;用于动态内存管理&#xff0c;堆区内存…

C # @逐字字符串

逐字字符串 代码 namespace TestAppConsole {class program{static void Main(string[] args){int a 0;int b 9;string c "2ui923i9023";//Console.Write(sizeof(int));string d "\t8282jjksk";string e "\t8282jjksk";Console.WriteLine(…

Java——继承(Inheritance)

一、继承简要介绍 1、继承是什么 在Java中&#xff0c;继承是一种面向对象编程的重要特性&#xff0c;它允许一个类&#xff08;子类或派生类&#xff09;继承另一个类&#xff08;父类或基类&#xff09;的属性和方法。继承的目的是实现代码的重用和设计的层次化。 子类通常…

LT8711GX 国产芯片 Type-C/DP1.4转HDMI2.1 用于加密狗 对接站

描述 LT8711GX是一款高性能的Type-C/DP1.4到HDMI2.1转换器&#xff0c;设计用于将USBType-C源或DP1.4源连接到HDMI2.1收发器。 该LT8711GX集成了一个符合DP1.4标准的接收器和一个符合HDMI2.1标准的发射器。此外&#xff0c;还包括一个CC控制器&#xff0c;用于CC通信&#xff0…

使用kali Linux启动盘轻松破解Windows电脑密码

破解分析文章仅限用于学习和研究目的&#xff1b;不得将上述内容用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。谢谢&#xff01;&#xff01; 效果展示&#xff1a; 使用kali Linux可以轻松破解Windows用户及密码 准备阶段&#xff1a; &#xff08…

ASP.NET Core 使用Log4net

1. Nuget安装log4net&#xff0c;图里的两个 2.项目根目录下添加log4net.config.添加下面的代码: <?xml version"1.0" encoding"utf-8"?> <configuration><!-- This section contains the log4net configuration settings --><log…

C语言之常用内存函数以及模拟实现

目录 前言 一、memcpy的使用和模拟实现 二、memmove的使用和模拟实现 三、memset的使用和模拟实现 四、memcmp的使用和模拟实现 总结 前言 本文主要讲述C语言中常用的内存函数&#xff1a;memcpy、memmove、memset、memcmp。内容不多&#xff0c;除了了解如何使用&#x…

细说MCU的ADC模块单通道连续采样的实现方法

目录 一、工程依赖的硬件及背景 二、设计目的 三、建立工程 1、配置GPIO 2、选择时钟源和Debug 3、配置ADC 4、配置系统时钟和ADC时钟 5、配置TIM3 6、配置串口 四、代码修改 1、重定义TIM3中断回调函数 2、启动ADC及重写其回调函数 3、定义用于存储转换结果的数…

一个pdf分割成多个pdf,一个pdf分成多个pdf

在数字化办公和学习中&#xff0c;pdf格式因其良好的兼容性和稳定性而受到广泛欢迎。但有时候&#xff0c;我们可能需要将一个大的pdf文件分割成多个小文件&#xff0c;以便于分享、打印或编辑。今天&#xff0c;我就来教大家几种简单有效的方法&#xff0c;让你轻松实现pdf文件…

基于Wireshark和TiWsPC(Wireshark Packet Converter)的Zigbee抓包

前言 介绍几种Zigbee抓包方式&#xff1a; 1. Ubiqua 使用教程网上非常多也非常清晰&#xff1b; 但是Ubiqua是收费软件&#xff0c;较贵&#xff1b; 我安装过了&#xff0c;费好多事&#xff0c;没安装成功。 2. Killerbee套件 https://github.com/riverloopsec/killerbe…

WACV2023论文速览域迁移Domain相关

Paper1 CellTranspose: Few-Shot Domain Adaptation for Cellular Instance Segmentation 摘要原文: Automated cellular instance segmentation is a process utilized for accelerating biological research for the past two decades, and recent advancements have produc…