加载中…
个人资料
Krebs
Krebs
  • 博客等级:
  • 博客积分:0
  • 博客访问:131,350
  • 关注人气:95
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R 超几何分布

(2011-05-19 11:09:03)
标签:

r

超几何分布

杂谈

超几何分布在生物学中有重要应用,常被用来做各种富集分析,同时它和Fisher精确检验有着千丝万缕的联系,掌握超几何分布是编写Fisher精确检验的基础。
想做超几何分布的同学,希望对你有用。。
在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
=========
(注:该例子来自【美】伯纳德.罗斯纳 著  孙尚拱 译  《生物统计学基础》第五版) P355.
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)
原文地址:http://blog.sina.com.cn/s/blog_7948610e0100rzx1.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有