原标题:#源代码#超几何分布算法介绍及python下的实现代码

超几何分布是统计学上一种离散概率分布。它描述了由有限个物件中抽出n个物件,成功抽出指定种类的物件的次数(不归还)。

在产品质量的不放回抽检中,若N件产品中有M件次品,抽检n件时所得次品数X=k

则P(X=k)=C(M k)·C(N-M n-k)/C(N n),C(a b)为古典概型的组合形式,a为下限,b为上限。此时我们称随机变量X服从超几何分布(hypergeometric distribution)

1)超几何分布的模型是不放回抽样

2)超几何分布中的参数是M,N,n

上述超几何分布记作X~H(n,M,N)。

产品抽样检查中经常遇到一类,假定在N件产品中有M件不合格品,即不合格率p=M/N.产品中随机抽n件做检查,发现X件是不合格品, 可知X的概率函数为P(X=k)=C(k,M)*C(n-k,N-M)/C(M,N),k=0,1,2,...通常称这个随机变量X服从超几何分布。这种抽样检查方法等于无放回抽样。数学上不难证明,当M=Np时,n-无穷,limC(k,M)*C(n-k,N-M)/C(M,N)=B(n,p) (二项分布)因此,在实际应用时,只要N>=10n,可用二项分布近似描述不合格品个数。也就是已经知道某个事件的发生概率,判断从中取出一个小样本,该事件以某一个机率出现的概率问题。

在实际应用中,超几何分布的原理经常被用在基因集功能富集的过程中,即我们已知调控某一功能的基因集,我们想知道interest基因集是否和这一功能显著相关,那么简单的理解就是看interest基因集和功能基因集的重合度有多高,并且这个重合度是否有显著意义,这里就借助了超几何分布的算法。我们举个例子:

利用超几何分布的原理推断每个基因集中的目标基因(miRNA靶基因)的比例是否与整个基因组中目标基因(miRNA靶基因)的比例相同。包括2个原假设:①基因是否目标基因(miRNA靶基因);②基因是否属于的功能基因集(如pathway基因),如表:

miRNA靶基因

非miRNA靶基因

合计

通路基因集

M

非通路基因集

N-M

合计

K

N-K

N(所有miRNA靶基因个数)

注示:N表示全基因组中基因总数;M表示功能基因集中的基因个数,K表示miRNA靶基因数目.。超几何分布得分表示k个miRNA靶基因中至少有x个被功能基因集注释的概率:

通过p值我们就可以评价某一miRNA所调控的靶基因是否与相应功能通路显著相关。

在R语言中dhyper四个参数的含义分别如下:

x: the number of white balls drawn without replacement from an urn which contains both black and white balls.

m: the number of white balls in the urn

n: the number of black balls in the urn

k: number of balls drawn from the urn

在scipy中stats.hypergeom.pmf (cdf, sf)等大多数均可接受4个参数,但是与dhyper的四个参数不一样,了解它们的差异才能让我们更好地去掌握和应用。

有以下2乘2列联表

=========

a=2 b=23

c=5 d=30

=========

1. Probability mass function (pmf)

求观测到次2乘2列联表的精确概率?为明确2乘2列联表中a,b,c,d意义,先将其映射为上述提到的x,m,n,k:

x=a x=2

m=a+b m=2+23=25

n=c+d n=5+30

k=a+c k=2+5=7

在R语言中:

>dhyper(x, m, n, k)

[1] 0.2521695

在Python的Scipy中:

from scipy import stats

>>>stats.hypergeom.pmf(a, a+b+c+d, a+b, a+c)

0.25216948468971595

>>>stats.hypergeom.pmf(x, m+n, m, k)

0.25216948468971595

2. Cumulative distribution fuction (cdf)

Scipy中的stats.hypergeom.cdf(x, m+n, m, k)相当于R中的phyper(x, m, n, k)

>phyper(x, m, n, k)

0.3746518

>>>stats.hypergeom.cdf(x, m+n, m, k)

0.37465180582472224

Scipy中的stats.hypergeom.sf(x, m+n, m, k)相当于R中的phyper(x, m, n, k, lower.tail=FALSE)

>phyper(x, m, n, k, lower.tail=FALSE)

[1] 0.6253482

>>>stats.hypergeom.sf(x, m+n, m, k)

0.62534819417527776

3.求cdf的反函数在某一个点的值

>qhyper(0.95, m, n, k)

[1] 5

>>>stats.hypergeom.ppf(0.95, m+n, m, k)

5.0

4.从超几何分布中产生一系列的随机变量

例如产生6个随机变量

>rhyper(6, m, n, k)

>>>np.random.hypergeometric(k, m+n, m, 6)

__________________________________

日期

时间

Day1

午餐

茶歇

Day2

08:30-09:30

异质性的定义、来源、检验方法;如何正确分析和处理异质性

09:30-09:40

茶歇

茶歇

责任编辑:

python比较两个列表的重合度_#源代码#超几何分布算法介绍及python下的实现代码...相关推荐

  1. python判断两个列表是否相同_如何检查两个元组列表是否相同

    @joce已经提供了an excellent answer(我建议接受这一条,因为它更简洁.更直接地回答了您的问题),但我想在您最初的帖子中提到这一部分:The list may have a len ...

  2. python列表去重函数_对python中两种列表元素去重函数性能的比较方法

    测试函数: 第一种:list的set函数 第二种:{}.fromkeys().keys() 测试代码: #!/usr/bin/python #-*- coding:utf-8 -*- import t ...

  3. python两个list取交集_使用 Python 获取两个列表的交集、并集、差集的常用方法 | Jin''''s Blog...

    在数据处理中经常需要使用 Python 来获取两个列表的交集,并集和差集.在 Python 中实现的方法有很多,我平时只使用一两种我所熟悉的,但效率不一定最高,也不一定最优美,所以这次想把常用的方法都 ...

  4. Python中将两个列表数据zip起来并遍历(Iterating through two lists in parallel)

    Python中将两个列表数据zip起来并遍历(Iterating through two lists in parallel) 目录 Python中将两个列表数据zip起来并遍历(Iterating ...

  5. Python中将两个列表(list)数据zip起来

    Python中将两个列表(list)数据zip起来 目录 Python中将两个列表(list)数据zip起来

  6. python 判断两个列表间是否具有包含关系以及获取子列表在父列表中的索引

    python 判断两个列表间是否具有包含关系以及获取子列表在父列表中的索引 import operator def get_sub_list_index(parent_list, sub_list): ...

  7. Python合并两个列表,使两个列表拼接起来

    Python合并两个列表,使两个列表拼接起来 #Python合并两个列表# 法一: #Python合并两个列表,相加是拼接 list1=[1,2,3] list2=[4,5,6,7] list3=li ...

  8. Python将两个列表合并成一个列表

    Python将两个列表/数组合并成一个列表/数组 extend方法 >>>c1 = ["Red","Green","Blue&quo ...

  9. SLIC算法介绍与Python实现

    SLIC(simple linear iterative clustering)算法介绍与Python实现 本文转载自:https://blog.csdn.net/shinian1987/articl ...

最新文章

  1. MyEclipse断点调试
  2. 中国研究的超级系统计算机,[公告]超级系统恢复--学习电脑 Book 3 V1.1
  3. Linux7安装系统服务,linux系统安装及初始服务优化-centos7.4
  4. Ubuntu 配置防火墙端口
  5. 走近webpack(3)--图片的处理
  6. Deep-Clustering-for-Unsupervised-Learning-of-Visual-Features
  7. sql server 群集_SQL Server 2014 –安装群集实例–分步(3/3)
  8. 小白都能看懂的numpy与pandas中axis解释
  9. 微计算机原理及应用视频,微机原理及应用(上海交通大学)
  10. chrome强烈推荐安装Octotree插件
  11. 360 n5 com.android.sc,360N5官方稳定版刷机包(最新系统刷机固件升级包V3.0稳定版)...
  12. [软件测试]QQ表情收藏测试用例
  13. 使用JavaScript开发IE浏览器本地插件实例
  14. fgo服务器维护检测脚本,fgo脚本工具游戏蜂窝简单实例
  15. linux测试dns配置文件,Linux系统中如何查看和修改DNS配置
  16. CPU设计——RISC-V指令集
  17. NLP 实战(11): CSDN Daily,兼谈技术写作的问题
  18. H5:使用video标签在页面中插入视频
  19. AI遮天传 ML-回归分析入门
  20. exp-00003 错误

热门文章

  1. php判断检测一个数组里有没有重复的值
  2. OverMail 超越邮件
  3. 二、yii的入口与app应用实例(Yii::app())
  4. nrpe的安装和配置(转)
  5. Mysql的master,slave的配置
  6. C++ explicit禁止单参构造函数隐式调用
  7. spring boot ---- jpa连接和操作mysql数据库
  8. 安装了多个php版本,如何编译扩展
  9. 10.28-11.1-广州软件所-实习工作日记
  10. cin.ignore()函数的使用