超几何分布富集分析 GO,KEGG富集分析,循环Fisher‘s test

  • ID转换
  • GO
  • KEGG
    • 把KEGG里的geneid转回名称(readable table)
  • 超几何分布以及生成data frame
    • 生成用来循环fisher的table
  • 循环Fisher's test

这几天真的被这个超几何富集分析做的头大。原来单纯用找到的显著基因分析出来的pathway不一定是准确的,或者说不一定是具有显著性的。详细的原理推荐下面两个链接
https://www.jianshu.com/p/3d01a66e235b
https://blog.csdn.net/linkequa/article/details/88189582


这篇小记专注于使用clusterprofile包进行富集分析,再进行fisher’s 检验。btw,也吐槽一下大部分网站做出来的富集分析多多少少会有一些缺失或者滞后性,还是用最新的包跑一下比较严谨


ID转换

先导入需要用的包

library(clusterProfiler)
library(DOSE)
library(org.Hs.eg.db)
keytypes(org.Hs.eg.db) #可以转换的ID格式,如uniport,ENTERZID..

导入数据

#先导入全局蛋白list(234个蛋白)
olink<- read.csv('~/PD/string_protein_annotations.tsv', sep = "\t")
symbo<- olink$X.node #(提取蛋白名称,其实不单独提取成一个向量也没关系)


表格格式无所谓,要的只是那一列蛋白的名字

ids<- bitr(symbo, #使用olink$X.node 也可以fromType = "SYMBOL", #输入的格式toType = c("GENENAME","ENTREZID"), #想得到的格式OrgDb = 'org.Hs.eg.db')

接下来导入显著蛋白的名称数据,方法同上

olink.sig<- read.csv('~/PD/PD分期/olink_sig_original.csv', check.names = F)
#这个数据格式里列名是每个显著蛋白,大家根据自己的df来提取名称
symbo.sig<- colnames(olink.sig[6:36])
ids.sig<- bitr(symbo.sig, fromType = "SYMBOL", toType = c("GENENAME","ENTREZID"),OrgDb = 'org.Hs.eg.db')

GO

其实GO和KEGG都是差不多的过程

#全局蛋白GO
go.mf<- enrichGO(ids$ENTREZID, #使用转换后的ENTREZIDOrgDb = org.Hs.eg.db,keyType ='ENTREZID', ont = "MF",#MF/CC/BPpAdjustMethod = 'BH',pvalueCutoff = 0.01,qvalueCutoff = 0.05,readable = T #富集结果更好展示)
#显著蛋白GO
go.mf.sig<- enrichGO(ids.sig$ENTREZID, OrgDb = org.Hs.eg.db,keyType ='ENTREZID', ont = "MF",pAdjustMethod = 'BH',pvalueCutoff = 0.01,qvalueCutoff = 0.05,readable = T)             go.mf@result #查看GO富集的data frame

其实还可以点圈圈这里,也是富集结果的表格
富集分析的结果就是这个样子

KEGG

KEGG同理,但我看网上很多人会先进行这一步代码,不然会报错,但我没有跑也顺利得出结果了,不知道有没有聚聚知道原因

data(ids, package = "DOSE") #报错的朋友跑这行代码先试一下
kk<- enrichKEGG(ids$ENTREZID, organism = "hsa",#hsa = homo sapinekeyType = "kegg",pAdjustMethod = "BH",pvalueCutoff = 0.01,
)kk.sig<- enrichKEGG(ids.sig$ENTREZID, organism = "hsa",keyType = "kegg",pAdjustMethod = "BH",pvalueCutoff = 0.01,
)kk@result

KEGG富集结果

把KEGG里的geneid转回名称(readable table)

可以看到KEGG的和GO不一样的是geneIDs那一列。GO显示的是基因名称,而KEGG是基因ID,这时候不方便查看或者额外的分析。一行代码可以连带整张表将id转换为名称

y <- setReadable(kk, OrgDb = org.Hs.eg.db, keyType="ENTREZID")

超几何分布以及生成data frame

因为我找的是我的全局蛋白(234个)和我的差异蛋白(31个)之间的通路差异显著性,所以有需要的朋友将全局蛋白换成你所需要的(比如GO目前有注释的蛋白是18352个

总而言之,这个分析是在检验差异蛋白的通路是否真的具有显著性。

如果事先了解过超几何分布(话说这个名字真的翻译的太吓人),应该知道这大概是个venn diagram、交集并集的关系

不显著的gene 显著gene
在通路上的gene A B
不在通路上gene C D

这里我用KEGG的通路来当例子,就不做GO的了。我先用下图红框的通路举个例子
这一行Generatio.x是全局基因的比例,输入169个gene,在这条通路上的有32个; Gene ratio.y是显著基因的比例,输入31个gene,在通路上的有8个。

(可能有人注意到我输入的是200多个gene怎么少了那么多,其实KEGG已有注释的gene并不多,和GO库比起来少了一半还多,再加上很多gene的通路研究还处于未知,所以缺失的这个比例也是可以理解的 ,个人的理解,我也去KEGG网站单独搜了没注释到的gene id,的确是没有pathway机制)

N<- 169 #总共的基因
M<- 32 #在通路上的基因
n<- 20 #显著的基因
k<- 6 #在通路上且显著的基因a <- data.frame(gene.not.interest=c(M-k, N-M-n+k), gene.in.interest=c(k, n-k))
row.names(a) <- c("In_category", "not_in_category")
a
不显著的gene 显著gene
在通路上的gene 26 6
不在通路上gene 123 14

计算一下可以知道,这四个数字相加 = 169 (总共的基因),这样应该可以理解之前说的venn diagram的道理了

如果只有几条通路我们可以一个一个算,但很多通路的情况下怎么形成那么多table并且进行fisher或者卡方检验?
果然人类的进步原因之一是懒

R语言|clusterprofile超几何分布富集分析 GO,KEGG富集分析,循环Fisher‘s test相关推荐

  1. R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型、南非心脏病数据集(South African Heart Disease)

    R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型.南非心脏病数据集(South African Heart Disease) 目录

  2. R语言相关性计算及使用ggcorrplot包相关性分析热力图可视化分析实战

    R语言相关性计算及使用ggcorrplot包相关性分析热力图可视化分析实战 目录 R语言相关性计算及使用ggcorrplot包相关性分析热力图可视化分析实战

  3. R语言广义线性模型Logistic回归模型亚组分析及森林图绘制

    R语言广义线性模型Logistic回归模型亚组分析及森林图绘制 #Logistic回归案例 6 亚组分析森林图 library(forestplot) rs_forest <- read.csv ...

  4. R语言也可以进行ATAC数据的完整分析啦!

    欢迎关注"生信修炼手册"! 个人认为,R语言有两个强项,统计和绘图.在生物信息数据分析中,R语言更多时候是发挥一个科学计算和可视化的作用.当然,R语言的功能远不止于此,不仅可以作为 ...

  5. R语言关于心脏病相关问题的预测和分析

    简介 背景 心脏病由心脏结构受损或功能异常引起包括先天性心脏病和后天性心脏病,不同类型的心脏病表现不同,轻重不一. 本报告是基于R语言对心脏研究的机器学习/数据科学调查分析.更具体地说,我们的目标是在 ...

  6. 【视频】极值理论EVT与R语言应用:GPD模型火灾损失分布分析

    最近我们被客户要求撰写关于极值理论的研究报告,包括一些图形和统计输出.正态分布属于统计学里的知识,对于我们科研来说在数据处理时常常用到所以需要学习相关的知识. 正态分布在自然界中是一种最常见的分布.例 ...

  7. (生物信息学)R语言与统计学入门(二)——单因素方差分析

    上次说到t检验,是检验两组数据的均数差异,链接如下: (生物信息学)R语言与统计学入门(一)--t 检验_李京弦的博客-CSDN博客 这次我们来介绍一下单因素方差分析. 单因素方差分析: 方差分析(A ...

  8. R语言基础 | 方差分析(1):单因素方差分析

    专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 方差分析(Analysis of Variance, ANOVA)于1918年由Ronald Fisher(也是F分布的提出者)提 ...

  9. R语言实验---电商产品评论数据情感分析

    文章目录 前言 一.案例背景 二.代码 1.数据爬取 2.数据预处理 3.数据分析(情感倾向) 4.使用LDA模型进行主题分析 总结 前言 开篇碎碎念:R语言老师出的实验题,在原本代码的基础上进行修改 ...

最新文章

  1. ASP在中小企业中具有巨大的潜在市场
  2. 如果你没有考上985,没有考上211……
  3. java condition_死磕Java并发:J.U.C之Condition
  4. LeetCode119.杨辉三角II
  5. keras concatenate_Keras结合Keras后端搭建个性化神经网络模型
  6. Javascript与服务器同步时间
  7. python邮件发送_Python实现邮件发送
  8. html语言汇总,第三讲HTML语言全面介绍汇总.ppt
  9. Tensorflow:variable变量和变量空间
  10. 震惊!99%的人不知道的Linux权限问题细节
  11. GDAL建立GeoTIFF金字塔文件
  12. 人工智能+智能运维解决方案_人工智能驱动的解决方案可以提升您的项目管理水平
  13. 锐捷显示认证服务器不可用,win10系统下锐捷客户端认证失败的解决方法
  14. 使用禅道管理项目流程
  15. w3cschool数据库mysql教程_SQLite 简介 | w3cschool菜鸟教程
  16. STM32精英版(正点原子STM32F103ZET6开发板)学习篇1——新建库函数模版
  17. C语言---编译器、编辑器
  18. linux+qq+输入法下载官网,续:Linux下安装输入法和QQ软件
  19. 四十多岁的男人还适合重新创业吗?
  20. 如何给word文档方格打勾

热门文章

  1. 初学怕python画图工具pen以及初学个人感悟
  2. PowerBI-日期和时间函数-WEEKDAY\WEEKNUM
  3. 华为机试——翻译电话号码
  4. Android chrisbanes-PhotoView 使用案例
  5. 有关单元测试的 5 个建议【每日小技巧】
  6. pythonor和and的优先级_python中not、and、or的优先级与详细用法
  7. 美格智能助力映翰通与Teltonika Networks工业互联网产品加速落地,用连接构建智能工厂
  8. 计算机中丢失IDAP,certify_ldap.dll
  9. html5调用手电筒,HTML5的模拟手电筒照明效果
  10. 好记性不如烂笔头之 App widgets(二)