超几何分布检验常用来对venn图两个圈overlap的显著性进行检验
设总共有29个人,其中11个吸烟者,18个非吸烟者,现从中随机抽取16个样本(在此实验中对应着肺癌病人),有10个是吸烟者,这样的事件是否显著?用venn图表示为:
用R语言计算:
p-value=phyper(10-1, 11, 18, 16, lower.tail=F)=0.003135274
可以看出此结果跟我们在2中手动算出来的结果相同,为单侧检验。
设总共有29个人,其中16个癌症患者,13个正常人,现从中随机选出11个人(对应着所有抽烟的人),有10个是癌症患者,这样的事件是否显著?用venn图表示为
(左边的圈为抽样出来的11个样本,可以分为两类:癌症患者和非癌症患者)
p-value=phyper(10-1, 16, 13, 11, lower.tail=F)=0.003135274
转自:超几何分布检验(hypergeometric test)与费歇尔精确检验(fisher's exact test)
https://blog.csdn.net/linkequa/article/details/88189582
1,超几何分布的定义
总共有N件产品,其中M件次品,现在从中抽取n件做检查,抽到k件次品的概率分布服从超几何分布。
P(k,N,M,n)=((Mk))∗((N−Mn−k))(Nn),其中k=0,1,2,...MP(k,N,M,n)=((Mk))∗((N−Mn−k))(Nn),其中k=0,1,2,...M P(k, N, M, n) = \frac{\left(M \choose k \right)*\left(N-M \choose n-k \right)}{N \choose n},其中k = 0, 1, 2, ...MP(k,N,M,n)=(nN)((kM))∗((n−kN−M)),其中k=0,1,2,...M
2,超几何分布检验
给定一个超几何分布,算出比某个事件更极端的概率,可以称为超几何分布检验。
比如在两个圈的venn图中,想要计算overlap是否显著:
假设总共的基因个数为20000个,图中左边圈总数3005可以看成是次品的总个数,现从中抽取805个产品,需要计算得到次品个数大于等于265的概率。
思考过程:在次品个数是少数的情况下,overlap越高,从超几何分布来看,发生的概率越小。现在的overlap是265,可能会是过高的那种情况,那么现在计算overlap是265以及大于265的概率之和,如果这个概率很小,那就说明发生265这个事件不是随机的,进而就推出来了overlap为265是显著性高的一个事件。
注意:这里好像和GO分析实现方法不一样,GO考虑总数,这里只是看overlap是不是偶然。
3,fisher精确检验(Fisher exact-test)的原理基于超几何分布,实际就是超几何分布检验。
4,R包中实现
R中自带超几何分布的检验(stats包)
4.1 方法1
phyper(q-1, m, n, k, lower.tail=F) #备择假设为"more"的情况
Note:两种方法的参数如下:
q = the number of white balls drawn from the urn (without replacement)
q对应到抽样问题,为k
m = the number of white balls in the urn
m对应到抽样问题,为M
n = the number of black balls in the urn
n对应到抽样问题,为N-M
k = the number of balls drawn from the urn (sample size)
k对应到抽样问题,为n
Note: lower.tail使用的逻辑为: if TRUE (default), probabilities are P[X ≤ x], otherwise, P[X > x].
1, 当备择假设为"less"时,即关心左端的那一部分(overlap小的那一端),无论怎么设置lower.tail,q不用q-1替代;
2,当加上lower.tail=F参数时,备择假设为"more"时,即关心右端的那一部分(overlap大的那一端),无论怎么设置lower.tail,q必须用q-1替代。
结合前面例子进行类比分析:
算出来结果如下:> phyper(264,3005,16995,805,lower.tail = F)
[1] 9.86227e-39
和前面不一样,怀疑是总数20000可能不是真实值。
另外一个例子
R里面进行计算超几何分布的p值
a <- 2380
b <- 2313
inter <- 345
> phyper(inter-1, a, 20000-a, b, lower.tail = F)
[1] 2.098632e-06
这里的a为A数据集的基因数(数据较大的一方),b为B数据集的基因数(数据较小的一方),inter为两者交集的基因数。20000代表的是背景基因总数。
亚细胞定位的富集分析
比如总共30000个蛋白,修饰组鉴定稻7000个蛋白,有700个位于叶绿体,水稻中叶绿体蛋白总共有2000个,那么这500个富集与否?
> phyper(700-1, 6300, 30000-6300, 2000, lower.tail = F)
[1] 4.890653e-51
这里考虑的是:当加上lower.tail=F参数时,备择假设为"more"时,即关心右端的那一部分(overlap大的那一端),无论怎么设置lower.tail,q必须用q-1替代。所以为何700-1了。
作者:柳叶刀与小鼠标
链接:https://www.jianshu.com/p/f8be8e17c25f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
————————————————
版权声明:本文为CSDN博主「JasonKQLin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/linkequa/java/article/details/86491665