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
想做超几何分布的同学,希望对你有用。。
在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:
k:
在scipy中stats.hypergeom.pmf (cdf, sf)等大多数均可接受4个参数,但是与dhyper的四个参数不一样,了解它们的差异才能让我们更好地去掌握和应用。
有以下2乘2列联表
=========
a=2
c=5
=========
(注:该例子来自【美】伯纳德.罗斯纳 著
1. Probability mass function (pmf)
求观测到次2乘2列联表的精确概率?为明确2乘2列联表中a,b,c,d意义,先将其映射为上述提到的x,m,n,k:
x=a
m=a+b
n=c+d
k=a+c
在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
前一篇:Perl 教程