【基于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){
  # 更新概率分布R
  R <- R %*% Q
  # 将新的概率分布添加到Prob矩阵中
  Prob <- rbind(Prob,R)
  # 代数计数器加1
  g <- 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")

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW透视变换

透视变换概述源程序在www.bjcyck.com下载 透视变换是一种几何变换&#xff0c;用于对图像进行扭曲&#xff0c;使其看起来从不同角度拍摄。这在计算机视觉和图像处理领域非常重要&#xff0c;例如在投影校正和图像配准中。LabVIEW提供了强大的图像处理工具&#xff0c;利用其V…

java生成json格式文件(包含缩进等格式)

生成json文件的同时保留原json格式&#xff0c;拥有良好的格式&#xff08;如缩进等&#xff09;&#xff0c;提供友善阅读支持。 pom.xml依赖增加&#xff1a; <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactI…

LabVIEW在图像处理中的应用

abVIEW作为一种图形化编程环境&#xff0c;不仅在数据采集和仪器控制领域表现出色&#xff0c;还在图像处理方面具有强大的功能。借助其Vision Development Module&#xff0c;LabVIEW提供了丰富的图像处理工具&#xff0c;广泛应用于工业检测、医学影像、自动化控制等多个领域…

Linux防火墙使用(firewalld与iptables)

防火墙概述 防火墙是一种由硬件和软件组合而成&#xff0c;在内部网和外部网之间、专有网和公共网之间构造的保护屏障&#xff0c;用以保护用户资料和信息安全的一种技术 防火墙作用在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题&#xff0c;从而实现…

Java | Leetcode Java题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; class Solution {int[][] dirs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};public List<String> findWords(char[][] board, String[] words) {Trie trie new Trie();for (String word : words) {trie.insert(word);}Set<String> a…

Apache Seata Mac下的Seata Demo环境搭建

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Mac下的Seata Demo环境搭建&#xff08;AT模式&#xff09; 前言 最近因为工作需要&#xf…

探讨3D沉浸式在线会议系统的研发 - Meta演示的元宇宙虚拟化身多人对话场景,Web端现在也可以实现了 !

要实现一个元宇宙多人会议系统&#xff0c;关键技术有&#xff1a; 1. 3D虚拟空间的构建&#xff08;含光影特效、虚拟现实和增强现实&#xff09; 2. 3D虚拟化身的构建&#xff08;含动画、表情、语音&#xff09; 3. 多人角色管理 4. 会话控制和信息同步 5. 语音合成 6…

免费的鼠标连点器电脑版教程!官方正版!专业鼠标连点器用户分享教程!2024最新

电脑技术的不断发展&#xff0c;许多用户在日常工作和娱乐中&#xff0c;需要用到各种辅助工具来提升效率或简化操作&#xff0c;而电脑办公中&#xff0c;鼠标连点器作为一种能够模拟鼠标点击的软件&#xff0c;受到了广大用户的青睐。本文将为大家介绍一款官方正版的免费鼠标…

对接海康sdk-linux下复制jar包中resource目录的文件夹

背景 在集成海康sdk时,需要将一些组件放到项目中作为静态资源,并且海康的sdk初始化也需要加载这些静态资源,在windows下,使用一些File路径的方式是可以正确加载的,但是在linux上就会加载失败。 首先我是将海康的sdk组件放到resource下的,并且按照windows和linux设置了两…

考虑数据库粒度的设计-提升效率

目录 概要 场景 设计思路 小结 概要 公开的资料显示&#xff0c;数据库粒度是&#xff1a;“在数据库领域&#xff0c;特别是数据仓库的设计中&#xff0c;粒度是一个核心概念&#xff0c;它直接影响到数据分析的准确性和存储效率。粒度的设定涉及到数据的详细程度和精度&…

CH11_JS的多重循环

第11章&#xff1a;Javascript的多重循环 本章目标 掌握二重循环的使用 掌握二重循环的控制语句的使用 课程回顾 循环控制有那几种方式 讲解内容 1. 回顾练习 需求说明 某次程序大赛&#xff0c;AI2101班有4名学员参加&#xff0c;学员的成绩由用户输入&#xff0c;计算…

文件系统技术架构分析

一文读懂&#xff1a;什么是文件系统 &#xff0c;有哪几类&#xff1f; ▉ 什么是文件系统&#xff1f; 技术大拿眉头皱了皱&#xff0c;忍住快要爆发的情绪。解释到&#xff1a; 数据以二进制形式存储于介质&#xff0c;但高低电平含义难解。文件系统揭秘这些二进制背后的意…

【踩坑】修复pyinstaller报错 No module named pkg_resources.extern

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 报错如下&#xff1a; 修复方法&#xff1a; pip install --upgrade setuptools pippyinstaller -F -w main.py --hidden-importpkg_resources.py2_wa…

前端位置布局汇总

HTML中脱离文档流的元素有&#xff1a; position: absolute - 元素相对于最近的已定位&#xff08;非 static&#xff09;祖先元素定位。 position: fixed - 元素相对于浏览器窗口定位。 float: left 或 float: right - 元素向左或向右浮动&#xff0c;周围的内容会环绕它。 …

认识流式处理框架Apache Flink

目录 一、Apache Flink 的基础概念 1.1 Apache Flink是什么&#xff1f; 1.2 Flink的定义 二、Apache Flink 的发展史 2.1 Flink前身Stratosphere 2.2 Flink发展时间线及重大变更 三、Flink核心特性 3.1 批流一体化 3.2 同时支持高吞吐、低延迟、高性能 3.3 支持事件时…

探索Linux:开源世界的无限可能

Linux是一款开源操作系统&#xff0c;它的起源可以追溯到上世纪90年代初。这个故事始于一个名叫Linus Torvalds的芬兰大学生&#xff0c;他在1983年开始编写一个用于个人电脑的操作系统内核。在他的努力下&#xff0c;Linux逐渐发展成为一个稳定而强大的操作系统。 然而&#…

分数的表示和运算方法fractions.Fraction()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 分数的表示和运算方法 fractions.Fraction() 选择题 以下代码三次输出的结果分别是&#xff1f; from fractions import Fraction a Fraction(1, 4) print(【显示】a ,a) b Fraction(1, 2…

网络基础:BGP协议

BGP&#xff08;边界网关协议&#xff0c;Border Gateway Protocol&#xff09;是一种用于在不同自治系统&#xff08;Autonomous Systems&#xff0c;AS&#xff09;之间交换路由信息的路径向量协议。BGP是互联网的核心路由协议之一&#xff0c;负责管理和维护互联网范围内的路…

为企业知识库选模型?全球AI大模型知识库RAG场景基准测试排名

大语言模型常见基准测试 大家对于AI模型理解和推理能力的的基准测试一定非常熟悉了&#xff0c;比如MMLU&#xff08;大规模多任务语言理解&#xff09;、GPQA&#xff08;研究生级别知识问答&#xff09;、GSMSK&#xff08;研究生数学知识考察&#xff09;、MATH&#xff08…

WordPress作品设计素材图片站资讯文章教程uigreat主题

主题介绍 uigreat主题是一款wordpress作品主题&#xff0c;发布设计作品素材文章&#xff0c;适合作品展示、设计等站点使用等&#xff0c;这款主题都非常合适。 1、自适应设计&#xff0c;PC、平板、手机等均可正常浏览&#xff1b; 2、图片缩略图可自定义高度&#xff0c;主…