在上一篇博文里我们解析了Rosalind中Independent Alleles一题。在题目背后,小编重新思考了一下题目的设定。Tom的家系如果在每代不能保证都是AaBb杂交产生的后代,而是从初代Tom一直自交,累计杂合率变化又会如何呢?这让我们联想到高中曾经学过的杂合子Aa自交后,各世代基因型频率,其中杂合子随代系k频率变化为1/2k。那么在不考虑AB连锁的情况下,双杂合体AaBb频率为1/4k


结合两个事件发生的概率,则在第k代家族至少有n个AaBb个体的概率为
P(X>=n)=1-[Cn2^k * (1/4k)n次方 *(1-(1/4k))2的k次方-n)]

在此之上我们可以进一步计算每一代中至少有一个杂合体的概率:即使用公式IndepAllGeneration,首位参数代表代数,次位参数代表至少几个杂合体。我们在上篇的代码中做出如下改进:

public class Independent_Alleles {public static void main(String[] args) {IndepAllGeneration(5,1);}public static void IndepAllGeneration(int k, int n) {//1.计算第k代杂合个体的比率.java实现乘方运算需要使用math APIdouble heter = Math.pow(0.25, k);//2.计算特定代数中杂合子的几何分布。排列运算为两个阶乘相除。需要求得最少N个个体为杂合的情况,则只需排除少于N个个体不为杂合即可:double rate = 0;for (int i = 0; i < n; i++) {double combinatorial = factorial(Math.pow(2, k)) / (factorial(Math.pow(2, k) - i) * factorial(i));rate += combinatorial * Math.pow(heter, i) * Math.pow(1-heter, Math.pow(2, k) - i);System.out.println("第"+k+"代累加后结果:");System.out.println("累加的非杂合概率为:"+rate);System.out.println("--------");}System.out.println("至少一个杂合体概率为:"+(float) (Math.round((1 - rate) * 1000)) / 1000);}public static double factorial(double n) {double sum = 1;for (int i = 2; i <= n; i++) {sum = sum * i;}return sum;}
}

通过调整参数k,我们可以得到不同代数的,并且反推其杂合个体出现的最小概率。


可见,到自交第四代,其家系中出现杂合的概率只有0.061,杂合体不出现的概率已经达到了90%以上。杂交衰退的程度非常大。这也能在一定程度上解释农业生产中杂种优势在自交下会迅速丢失。实际生产中计算杂种优势衰退要比本文复杂得多,需要综合考虑突变率,重组率和连锁不平衡率。本文仅作为参考,如有谬误欢迎指正!

Java计算连续自交杂合概率代系变化相关推荐

  1. JAVA 计算宝箱概率问题

    Java 计算宝箱概率问题 有一种宝箱,打开这个宝箱就能获得金币大礼包的概率是20%,现在你打开5个这样的宝箱,获得礼包的概率是多少? 这是概率学中比较简单和经典的一个问题,答案并不是 5 x 0.2 ...

  2. java中使用几率_Java中使用蒙特卡洛算法计算德州扑克成牌概率(二)- 计算牌面分值...

    德州扑克中比较重要的一个算法就是计算牌面的得分,不仅仅关乎概率计算的结果,同时也需要很高的性能.蒙特卡洛算法计算的次数越多结果越准确,因此算法的性能至关重要.下面是一个高性能的牌面java计算算法. ...

  3. HaploMerger2: 从高杂合二倍体基因组组装中重建单倍型

    本文只是按照自己的需求翻译了HaploMerger2提供的手册部分内容.HaploMerger2的帮助文档写的非常好,一定要花点时间去读啊! HaploMerger2的分析流程如下 重建单倍体组装中的 ...

  4. MySQL 计算连续涨跌

    [问题] Hello i'm trying to create a rally Up rally DOWN stock indicator. i have thre columns : Date    ...

  5. matlab第八章概率计算ppt,Matlab来解决概率统计学ppt

    PPT内容 这是一个关于Matlab来解决概率统计学ppt,主要介绍将利用Matlab来解决概率统计学中的概率分布.数字特征.参数估计以及假设检验等问题.欢迎点击下载哦. 本章将利用Matlab来解决 ...

  6. Java内存模型中的三个代

    http://developer.51cto.com/art/200909/153154.htm 本文介绍Java内存模型中的三个代:年轻代,终身代以及永久代.文中图示了各个代的默认排列.本文适用于J ...

  7. 概率论笔记2.2连续型随机变量及其概率密度函数

    2.2连续型随机变量及其概率密度函数 概率密度函数定义 前面讲了一个引例,这边简单说一下,其实就是用了一个简单的身高的例子,如果将身高的区间分成尽可能小的多组,那么画出来的频率密度图就会接近一条光滑的 ...

  8. Java计算两个字符串日期之间的天数差

    Java计算两个字符串日期之间的天数差 调用方法: public static void main(String[] args) throws ParseException {String a = & ...

  9. 炒股Java_基于java计算买卖股票的最佳时机

    这篇文章主要介绍了基于java计算买卖股票的最佳时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题: 可以将问题转化为如下图所示,即求多个累计 ...

最新文章

  1. idea java jni 调试_IntelliJ IDEA平台下JNI编程(一)—HelloWorld篇
  2. 路由网关--spring cloud zuul
  3. python3-matplotlib库简单入门
  4. 树莓派3_win10下使用远程桌面连接与树莓派通信(使用VNC实现连接后)
  5. MySQL 锁信息和事务
  6. python find函数_Python 速学!不懂怎么入门python的小白看这篇就够了!
  7. springcloud hystrix入门简介(二)
  8. 怎么测试本地网页在不同分辨率下电脑显示效果_4K商用超值利器 飞利浦272P7VPTKEB显示器评测...
  9. java 多线程任务队列_精简的java 线程池与任务队列
  10. CentOS7安装vmware tools时出现Searching for a valid kernel header path… The path “” is not valid错误
  11. 计算机轻量级硬件性能测试软件推荐
  12. Windows系统下载安装MinGW(包括32位和64位)
  13. 输入起止坐标,返回途径网格。
  14. django-haystack 对 多对多字段( ManyToManyField )进行索引
  15. SSDT表函数Hook原理
  16. selenium+python实现自动登陆QQ邮箱,并发送邮件
  17. 查看/修改git用户名密码
  18. 南京大学的计算机到底怎么样?
  19. 数学建模系列-预测模型(一)灰色预测模型
  20. base-package 详解

热门文章

  1. LeetCode/LintCode 题解丨一周爆刷双指针:寻找重复的数
  2. 大学英语综合教程二 Unit 3 课文内容英译中 中英翻译
  3. 7个因素决定大数据的复杂性
  4. 100个python算法超详细讲解:平分7筐鱼
  5. 什么是数据库的二级映像
  6. python10086查询系统_Python数字移动设备取证
  7. Python机器学习:逻辑回归008OvR与OvO
  8. nagiso中nsca的配置
  9. 学校计算机教室防火墙,学校网络及电脑教室建设方案
  10. 【Java二十周年】我的JAVA小时代