R进行超几何分布计算

超几何分布是统计学中的一种离散分布,它描述了由有限个物件中抽出n个物件,成功抽出指定种类的物件的个数。 也是生物信息学中常用的一种统计分布模型。我们在GO,KEGG的富集分析时就采用的是这个模型。 其数学表达式如下:

f(k;n,m,N)={{{m \choose k}{{N-m} \choose {n-k}}} \over {N \choose n}}.

其中:
N: 总样本数
m: 总样本中“特定类别”的数量
n: 从总样本中随机抽取的数量
k: 抽取样本中属于“特定类别”的数量
但是我们做统计模型时,统计不是分布概率,而是累积概率,所以计算的p_value 值计算公式为:

对应的R代码实现为:
1-phyper(k-1,m, N-m, n)

富集分析中的超几何分布概率p值等计算

choose(5,2) # 排列组合数
gamma(5) # 阶乘数

#我们通过一次分析,从100个总基因(其中位于A通路的有20个)中筛到了10个差异基因,其中位于A通路的基因有2个,不位于A中的有8个
#问:1、出现该情况的概率是多少?
#2、该抽样过程是否是随机情况?
#1、该情况的概率:

choose(20,2)*choose(80,8)/choose(100,10)
#[1] 0.3181706

#2、该情况是否为随机的:

1 - phyper(q=2,m=20,n=80,10)1-phyper(k-1,m, N-m, n)

结论:

phyper(q=2,m=20,n=80,k=10)
##### 等价于
choose(20,0)*choose(80,10)/choose(100,10)+choose(20,1)*choose(80,9)/choose(100,10)+choose(20,2)*choose(80,8)/choose(100,10)

实战示例:

yy = read.table('/nfs2/igenebook/old/paotongmerip_AJMeR2191122028_20200506/MeRIP/06.GOKEGG/BB_IP_3_vs_BB_input_3_KEGGEnrich_enrich_filt.txt',header = T,sep = '\t')
yy[1:4,1:6]
xx<-data.frame(a=str_split(yy$GeneRatio,"\\/",simplify = T)[,1],b=str_split(yy$GeneRatio,"\\/",simplify = T)[,2],c=str_split(yy$BgRatio,"\\/",simplify = T)[,1],d=str_split(yy$BgRatio,"\\/",simplify = T)[,2],p=yy$pvalue,p.adj=yy$p.adjust)xx<-apply(xx,2,as.numeric)
xx<-as.data.frame(xx)
#注意!!!我这里使用的是q-1 ,同时设置了lower.tail=F
xx$p.diy<-apply(xx,1,function(a){phyper(a[1]-1,a[3],a[4]-a[3],a[2],lower.tail = F)})
xx$p.adj.diy=p.adjust(xx$p.diy,"BH")head(xx)注:
phyper(q=131,m=268,n=7662-268,k=1781,lower.tail = F)
## 等价于
1-phyper(q=131,m=268,n=7662-268,k=1781)

详解富集分析超几何分布检验相关推荐

  1. x264 代码重点详解 详细分析

    eg mplayer x264 代码重点详解 详细分析 分类: ffmpeg 2012-02-06 09:19 4229人阅读 评论(1) 收藏 举报 h.264codecflv优化initializ ...

  2. 安卓通知栏管理详解及分析 NotificationListenerService

    NotificationListenerService 安卓通知栏管理详解及分析 一. 方法概述 在api 18前可以通过辅助功能'AccessibilityEvent.TYPE_NOTIFICATI ...

  3. mysql之explain详解(分析索引最佳使用)

    mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...

  4. JAVA中Explain注解用法,mysql之explain详解(分析索引最佳使用)

    mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...

  5. xvid 详解 代码分析 编译等

    1.   Xvid参数详解 众所周知,Mencoder以其极高的压缩速率和不错的画质赢得了很多朋友的认同! 原来用Mencoder压缩Xvid的AVI都是使用Xvid编码器的默认设置,现在我来给大家冲 ...

  6. 2023上半年软件设计师-试题详解与分析

    目录 前言 上午题 计算机组成原理 信息安全 计算机相关法律 软件设计 语言处理 操作系统 软件工程 软件测试 面向对象编程 程序设计语言 数据库 数据结构与算法 计算机网络 计算机专业英语 下午题 ...

  7. MySQL Explain详解,分析语句为何运行慢

    MySQL Explain详解 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语 ...

  8. 分布式一致性算法-paxos详解与分析

    前言 在Paxos算法面前,其他分布式一致性算法都是渣渣,都是残次品.Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品. ...

  9. c语言冒泡排序详解(分析每一步,附代码)

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小.首字母从Z到A)错误就把他们交换过来.走访元素 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记6 图像处理(六)图像金字塔与图片尺寸缩放
  2. with as python_python - with as的用法
  3. 能在不同的深度学习框架之间转换模型?微软的MMdnn做到了
  4. 从零开始学习jQuery (六) AJAX快餐【转】
  5. layui token 过期 重新登陆
  6. Spark性能优化:对RDD持久化或CheckPoint操作
  7. Springboot项目部署到外部Tomcat
  8. Android 自定义View(三)
  9. csdn编辑器公式中插入空格
  10. s7edge 无法连接计算机,s7-200,CPU224CN无法连接到电脑-工业支持中心-西门子中国...
  11. (Python)批量创建文件夹
  12. 【机械】如何用SOLIDWORKS进行ArtCam雕刻机排版
  13. DelphiIE插件开发
  14. myEclipse10破解及过期处理
  15. [linux]linux mint zsh安装和配置
  16. 如何彻底关闭Win10自动更新,Win10永久关闭自动更新的方法
  17. Swing-文本的绘制(设置字体)
  18. plcst语言编程教程_PLC ST语言编程之我的心得-专业自动化论坛-中国工控网论坛...
  19. 【nest】bull的基本使用
  20. 关于 腾讯云CentOS8.2重置恢复到自定义镜像后,第三方软件登陆提示需要密钥 的解决方法

热门文章

  1. 测试入门-badboy(1)
  2. linux下循环读取目录文件,Linux 文件目录树的遍历
  3. 空洞卷积dilated conv
  4. Arduino基础学习-声音信号输出
  5. 怎么在bios中禁用独显
  6. 大赚近900亿美元 巴菲特最新重仓股曝光
  7. 联想服务器控制口登录地址_常用服务器管理口IP及账号密码(欢迎补充)
  8. 投资组合管理matlab,《投资组合管理》投资-教材-组合分析.pdf
  9. ADS8688 驱动记录(ATmega128)
  10. 高中会考 计算机网络技术考试,2020年高中信息技术会考真题5附带答案已排版可打印共计20套...