【基于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;为企业提…

LeetCode:3101. 交替子数组计数(Java 找规律)

目录 3101. 交替子数组计数 题目描述&#xff1a; 实现代码与解析&#xff1a; 简洁版&#xff1a; 原理思路&#xff1a; 3101. 交替子数组计数 题目描述&#xff1a; 给你一个二进制数组nums 。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况&#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;最常用且形式最为简单的是简单选择排序。…

FFmpeg常用命令手册

官方文档&#xff1a;ffmpeg Documentation 常规选项 -i input_url 输入文件或者输入流的路径 Main 选项 -f fmt (input/output) 强制指定输入或输出文件的格式&#xff0c; 常见的格式名称包括flv&#xff0c;mp4、hls、mpegts、avi、mov -c[:stream_specifier] codec (i…

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

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

【HICE】DNS反向解析

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

聊天服实现设计

聊天服拓扑关系 聊天服独立于游戏服&#xff0c;客户端直连聊天服客户端按 PlayerID 散列&#xff0c;连接聊天服有涉及扣道具才能发言的等&#xff08;必须依赖游戏服功能的&#xff09;&#xff0c;先走游戏服&#xff0c;其他均可以直接走聊天服 聊天频道 - 世界频道 客户…

论文辅导 | 基于多尺度分解的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 "…

默认导出(default)和命名导出

1.默认导出 优点&#xff1a; 简洁的导入语法&#xff1a; 导入时不需要使用花括号&#xff0c;可以直接重命名。单一职责&#xff1a; 模块导出一个主要功能或对象时&#xff0c;默认导出更符合逻辑。 适用场景&#xff1a; 模块只有一个导出&#xff1a; 如一个组件、一个…

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…

知名的以图叙事开源平台和工具

以图叙事是一种通过图表和图形来讲述故事或传达信息的方式&#xff0c;使复杂的数据更易于理解和更有吸引力。以下是一些知名的开源平台和工具&#xff0c;可以帮助你创建以图叙事的精彩内容&#xff1a; 1. StoryMapJS 描述: 一个简单的工具&#xff0c;用于创建由位置驱动的…

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

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

洪水灾害的数据分析与预测

洪水是暴雨、急剧融冰化雪、风暴潮等自然因素引起的江河湖泊水量迅速增加&#xff0c;或者水位迅猛上涨的一种自然现象&#xff0c;是自然灾害。洪水又称大水&#xff0c;是河流、海洋、湖泊等水体上涨超过一定水位&#xff0c;威胁有关地区的安全&#xff0c;甚至造成灾害的水…