超几何分布检验(hypergeometric test)以及R中实现

超几何分布检验常用来对venn图两个圈overlap的显著性进行检验
设总共有29个人,其中11个吸烟者,18个非吸烟者,现从中随机抽取16个样本(在此实验中对应着肺癌病人),有10个是吸烟者,这样的事件是否显著?用venn图表示为:
image.png

用R语言计算:
p-value=phyper(10-1, 11, 18, 16, lower.tail=F)=0.003135274
可以看出此结果跟我们在2中手动算出来的结果相同,为单侧检验。
设总共有29个人,其中16个癌症患者,13个正常人,现从中随机选出11个人(对应着所有抽烟的人),有10个是癌症患者,这样的事件是否显著?用venn图表示为

image.png

(左边的圈为抽样出来的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是否显著:

image.png

假设总共的基因个数为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


```css
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替代

。

结合前面例子进行类比分析:
![image.png](https://img-blog.csdnimg.cn/f03defc02b9c493cb6f90c4bc24950a6.png)

算出来结果如下:> phyper(264,3005,16995,805,lower.tail = F)
[1] 9.86227e-39
和前面不一样,怀疑是总数20000可能不是真实值。

```handlebars
另外一个例子
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个富集与否?

image.png

> 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

————————————————

原文链接:https://blog.csdn.net/linkequa/java/article/details/86491665

链接:https://www.jianshu.com/p/4925b1c74963

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
当我们想要测试一个给定的类别是否富集在一个测试集时,通常可以使用几何分布来进行检验几何分布是一种离散概率分布,它描述了从一个有限种群随机抽取固定数量的样本,其包含有一个特定类别的样本的数量的分布。在这种情况下,我们可以使用几何分布来计算在一个测试集观察到给定类别的数量的概率,假设该测试集是从一个更大的总体随机抽取的。 以下是一个使用Python计算几何分布调整P值的示例代码,假设我们有一个2x2列联表,其包含了我们想要测试的类别和另一个类别在两个不同的组的数量: ```python from scipy.stats import hypergeom # 填写2x2列联表 a = 15 # 在测试组属于我们想要测试的类别的样本数量 b = 85 # 在测试组不属于我们想要测试的类别的样本数量 c = 5 # 在对照组属于我们想要测试的类别的样本数量 d = 95 # 在对照组不属于我们想要测试的类别的样本数量 # 计算几何分布调整P值 M = a + b + c + d # 总体大小 N = a + c # 属于我们想要测试的类别的样本总数 n = a + b # 在测试组的样本总数 k = min(a, c) # 在测试组属于我们想要测试的类别的样本数量的最小值 p_value = hypergeom.sf(k-1, M, N, n) # 计算单尾P值 adjusted_p_value = p_value * 2 # 双尾P值 = 单尾P值 * 2 print(f"Adjusted P value: {adjusted_p_value:.4f}") ``` 在上面的代码,我们使用了`scipy.stats`库的`hypergeom`函数来计算几何分布的P值。我们首先定义了2x2列联表每个单元格的计数,然后使用这些计数计算几何分布调整P值。具体而言,我们计算了属于我们想要测试的类别的样本数量的最小值,然后使用`hypergeom.sf()`函数计算在给定总体大小、属于我们想要测试的类别的样本总数、在测试组的样本总数和计算出的最小值下,观察到给定数量或更少的属于我们想要测试的类别的样本的概率。最后,我们将计算出的单尾P值乘以2以计算双尾P值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信小博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值