GEO生信数据挖掘(八)富集分析(GO 、KEGG、 GSEA 打包带走)

news2024/11/19 8:38:02

第六节,我们使用结核病基因数据,做了一个数据预处理的实操案例。例子中结核类型,包括结核,潜隐进展,对照和潜隐,四个类别。第七节延续上个数据,进行了差异分析。 本节对差异基因进行富集分析。

目录

数据展示

GO富集分析 -对基因名称映射基因ID

GO富集分析 -从org.Hs.eg.db库中去匹配基因

KEGG富集分析 (不详细讲了看注释)

GSEA 富集分析

更多复杂的图(关联网络图、八卦图 、弦图)


数据展示

差异基因计算完毕的指标如下图所示

差异基因筛选后表达矩阵

GO富集分析 -对基因名称映射基因ID

加载数据


#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#+&&&&&&&&&&&&&&&&&&加载数据&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
load( "DEG_TB_LTBI_step13.Rdata")
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+&&&&&&&&&&&&&&&&&&加载数据&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


library(clusterProfiler)
library(org.Hs.eg.db)

#增加基因名
all_diff$SYMBOL=rownames(all_diff)


#基因名称转换注释
gene_ids_DEG_TB_LTBI = bitr(geneID = rownames(dataset_TB_LTBI_DEG),fromType="SYMBOL",toType = c("ENTREZID","ENSEMBL","SYMBOL"),OrgDb = 'org.Hs.eg.db',drop =TRUE)

#合并 增加logFC 为后续GSEA富集分析所需数据准备
gene_ids_DEG_TB_LTBI <- merge(gene_ids_DEG_TB_LTBI,all_diff,by="SYMBOL")
 
#观察
dim(gene_ids_DEG_TB_LTBI)
head(gene_ids_DEG_TB_LTBI)

#获取基因ID ENSEMBL
gene_ENSEMBL <- gene_ids_DEG_TB_LTBI$ENSEMBL
gene_ENTREZID <- gene_ids_DEG_TB_LTBI$ENTREZID
gene_SYMBOL<- gene_ids_DEG_TB_LTBI$SYMBOL

经过映射,2813个差异基因得到2551个基因ID,下图为三种不同形式的基因名称,富集分析时,按需进行转换。

GO富集分析 -从org.Hs.eg.db库中去匹配基因

#Go富集分析,从库中去匹配
go <- enrichGO(gene_SYMBOL,OrgDb = org.Hs.eg.db, ont='ALL',pAdjustMethod = 'BH',pvalueCutoff = 0.05, qvalueCutoff = 0.2,keyType = 'SYMBOL')#进行GO富集,确定P值与Q值得卡值并使用BH方法对值进行调整。
#查看富集结果
dim(go)
#导出GO富集的结果
write.csv(go,file="go1.csv")

绘制气泡图

#绘制气泡图
pdf(file="15aGO富集分析step15.pdf", width = 9, height = 6)
dotplot(go,showCategory=20,label_format = 80)#气泡图
 dev.off()

三种不同类别的合并的气泡图(#CC细胞组件,MF分子功能,BP生物学过程)

pdf(file="15bGO富集分析三组step15.pdf", width = 9, height = 6)

#CC细胞组件,MF分子功能,BP生物学过程
goCC <- enrichGO(gene = gene_ENTREZID,  #基因列表(转换的ID)
               keyType = "ENTREZID",  #指定的基因ID类型,默认为ENTREZID
               OrgDb=org.Hs.eg.db,  #物种对应的org包
               ont = "CC",   #CC细胞组件,MF分子功能,BP生物学过程
               pvalueCutoff = 0.05,  #p值阈值
               pAdjustMethod = "fdr",  #多重假设检验校正方式
               minGSSize = 1,   #注释的最小基因集,默认为10
               maxGSSize = 500,  #注释的最大基因集,默认为500
               qvalueCutoff = 0.2,  #q值阈值
               readable = TRUE)  #基因ID转换为基因名

goBP <- enrichGO(gene_ENTREZID,OrgDb = org.Hs.eg.db, ont='BP',pAdjustMethod = 'BH',pvalueCutoff = 0.05, qvalueCutoff = 0.2,keyType = 'ENTREZID')

goMF <- enrichGO(gene_ENTREZID,OrgDb = org.Hs.eg.db, ont='MF',pAdjustMethod = 'BH',pvalueCutoff = 0.05, qvalueCutoff = 0.2,keyType = 'ENTREZID')
#通过ggplot2将BP、MF、CC途径的富集结果挑选前8条绘制在一张图上
barplot(go,label_format=100, split="ONTOLOGY")+ facet_grid(ONTOLOGY~.,scale="free")

dev.off()

KEGG富集分析 (不详细讲了看注释)



#+=================================================================
#============================================================
#+========KEGG富集分析 气泡图step16===================
#+==========================================
#+================================


#KEGG富集分析
pdf(file="16KEGG富集分析step16.pdf", width = 9, height = 6)
kegg<- enrichKEGG(gene = gene_ENTREZID,   #基因列表(ENTREZID ID: 54490,51144,31,3906) 
                  organism = "hsa",  #物种
                  keyType = "kegg",  #指定的基因ID类型,默认为kegg
                  minGSSize = 3, 
                  maxGSSize = 500,
                  pvalueCutoff = 0.05,  
                  pAdjustMethod = "fdr", # pAdjustMethod = 'BH'
                  qvalueCutoff = 0.02)
#观察
dim(kegg)
#绘制气泡图
dotplot(kegg)
dev.off()

#kegg 增加可读性,对基因ID 转基因名
kegg_enrich_results <- DOSE::setReadable(kegg, 
                                         OrgDb="org.Hs.eg.db", 
                                         keyType='ENTREZID') #ENTREZID to gene Symbol

#保存kegg结果
write.csv(kegg_enrich_results@result,'KEGG_gene_up_enrichresults.csv') 
#save(kegg_enrich_results, file ='KEGG_gene_up_enrichresults.Rdata')


##查看与选择所需通路
kegg_enrich_results@result$Description[1:10] #查看前10通路

###选择所需通路的ID号
i=1
select_pathway <- kegg_enrich_results@result$ID[i] #选择所需通路的ID号




#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#+&&&&&&&&&&&&&&&&&&数据保存&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
save(gene_ids_DEG_TB_LTBI,go,keggfile ="15_gene_ids_DEG_TB_LTBI.Rdata")
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+&&&&&&&&&&&&&&&&&&数据保存&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

GSEA 富集分析


#+=================================================================
#============================================================
#+========GSEA 富集分析 气泡图step17===================
#+==========================================
#+================================

# GSEA 分析
#需要把多个方法取并集
#该方法的输入需要基因和 logFC 排序后的结果
#不同方法 相同基因的的logFC值不一样,直接保留第一个重复基因


library(stringr)



## 去重  #去除NA值
dim(gene_ids_DEG_TB_LTBI)
colnames(gene_ids_DEG_TB_LTBI)

gene_list_df = gene_ids_DEG_TB_LTBI[,c('ENTREZID','logFC')]
gene_list_df_na <- na.omit(gene_list_df)

gene_ids_TB_LTBI_distinct <- dplyr::distinct(gene_list_df_na,ENTREZID,.keep_all=TRUE) 

dim(gene_ids_TB_LTBI_distinct)
gene_list=gene_ids_TB_LTBI_distinct$logFC   #提取logFC列
names(gene_list)=gene_ids_TB_LTBI_distinct$ENTREZID             #加上ENTREZID
gene_list_gsea = sort(gene_list, decreasing = T)  #降序排列





gsea_KEGG <- gseKEGG(gene_list_gsea,
                     organism = "hsa",
                     keyType = "kegg")

gsea_KEGG_d <- as.data.frame(gsea_KEGG)

gsea_KEGG_d
#path 为需要展示的pathway id,这里展示的是enrichment score最高的4条通路


t_index=order(gsea_KEGG_d$enrichmentScore,decreasing = T)
path=rownames(gsea_KEGG[t_index,]) #选择展示的 pathwayrownames(gsea_KEGG[t_index,]) [1:4]

#作图 
pdf(file="17GSEA富集分析step17.pdf", width = 9, height = 6)
gseaplot2(gsea_KEGG,
          path, 
          subplots = 1:2, #展示前2个图
          pvalue_table = T, #显示p值
          title = "Olfactory transduction",  #设置title
          base_size = 10, #字体大小
          color="red") #线条颜色可选
dev.off()


#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#+&&&&&&&&&&&&&&&&&&数据保存&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
save(gene_ids_DEG_TB_LTBI,go,kegg,gene_list_gsea,gsea_KEGG,file ="17_gene_ids_DEG_TB_LTBI.Rdata")
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+&&&&&&&&&&&&&&&&&&数据保存&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

更多复杂的图(关联网络图、八卦图 、弦图)

参考 最全的GO, KEGG, GSEA分析教程(R),你要的高端可视化都在这啦![包含富集圈图] - 糖糖家的老张的文章 - 知乎 https://zhuanlan.zhihu.com/p/377356510

原文链接:https://blog.csdn.net/qq_50898257/article/details/120588222

#+=================================================================
#============================================================
#+========富集分析 更多的图step18===================
#+==========================================
#+================================
library(clusterProfiler)
library(enrichplot)
#+富集基因与所在功能集/通路集的关联网络图:
enrichplot::cnetplot(go,circular=FALSE,colorEdge = TRUE)#基因-通路关联网络图
enrichplot::cnetplot(kegg,circular=FALSE,colorEdge = TRUE)#circluar为指定是否环化,基因过多时建议设置为FALSE

GO2 <- pairwise_termsim(go)
KEGG2 <- pairwise_termsim(kegg)
enrichplot::emapplot(GO2,showCategory = 50, color = "p.adjust", layout = "kk")#通路间关联网络图
enrichplot::emapplot(KEGG2,showCategory =50, color = "p.adjust", layout = "kk")


write.table(kegg$ID, file = "KEGG_IDs.txt", #将所有KEGG富集到的通路写入本地文件查看
            append = FALSE, quote = TRUE, sep = " ",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")
#打印几条通路名称看看
kegg$ID[1:3]
#打开浏览器观察通路
browseKEGG(kegg,"hsa04660")#选择其中的hsa05166通路进行展示




#富集弦图
genedata<-data.frame(ID=gene_ids_DEG_TB_LTBI$SYMBOL  ,logFC=gene_ids_DEG_TB_LTBI$logFC)
write.table(go$ONTOLOGY, file = "GO_ONTOLOGYs.txt", #将所有GO富集到的基因集所对应的类型写入本地文件从而得到BP/CC/MF各自的起始位置如我的数据里是1,2103,2410
            append = FALSE, quote = TRUE, sep = " ",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")

'''
根据计算出的go 文件数量,调整
'''
GOplotIn_BP<-go[1:178,c(2,3,7,9)] #提取GO富集BP的前10行,提取ID,Description,p.adjust,GeneID四列
GOplotIn_CC<-go[179:194,c(2,3,7,9)]#提取GO富集CC的前10行,提取ID,Description,p.adjust,GeneID四列
GOplotIn_MF<-go[195:209,c(2,3,7,9)]#提取GO富集MF的前10行,提取ID,Description,p.adjust,GeneID四列

library(stringr)
GOplotIn_BP$geneID <-str_replace_all(GOplotIn_BP$geneID,'/',',') #把GeneID列中的’/’替换成‘,’
GOplotIn_CC$geneID <-str_replace_all(GOplotIn_CC$geneID,'/',',')
GOplotIn_MF$geneID <-str_replace_all(GOplotIn_MF$geneID,'/',',')
names(GOplotIn_BP)<-c('ID','Term','adj_pval','Genes')#修改列名,后面弦图绘制的时候需要这样的格式
names(GOplotIn_CC)<-c('ID','Term','adj_pval','Genes')
names(GOplotIn_MF)<-c('ID','Term','adj_pval','Genes')
GOplotIn_BP$Category = "BP"#分类信息
GOplotIn_CC$Category = "CC"
GOplotIn_MF$Category = "MF"

BiocManager::install('GOplot')
library(GOplot)
circ_BP<-GOplot::circle_dat(GOplotIn_BP,genedata) #GOplot导入数据格式整理
circ_CC<-GOplot::circle_dat(GOplotIn_CC,genedata) 
circ_MF<-GOplot::circle_dat(GOplotIn_MF,genedata) 

chord_BP<-chord_dat(data = circ_BP,genes = genedata) #生成含有选定基因的数据框
chord_CC<-chord_dat(data = circ_CC,genes = genedata) 
chord_MF<-chord_dat(data = circ_MF,genes = genedata) 
'''
> chord_CC<-chord_dat(data = circ_CC,genes = genedata) 
Error in `[<-`(`*tmp*`, g, p, value = ifelse(M[g] %in% sub2$genes, 1,  : 
  subscript out of bounds
  我去检查了go和genelist的数据结构发现,genelist里的gene用的是gene名,而go里的基因用的是基因ID,不一样了,所以跑不出结果,所以我把genelist的gene换成了基因ID,就能跑出来了。

作者:ff的小世界勿扰
链接:https://www.jianshu.com/p/ee4012fd253f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
'''

#可以画 数量太多了
GOChord(data = chord_BP,#弦图
        title = 'GO-Biological Process',space = 0.01,#GO Term间距
        limit = c(1,1),gene.order = 'logFC',gene.space = 0.25,gene.size = 5,
        lfc.col = c('red','white','blue'), #上下调基因颜色
        process.label = 10) #GO Term字体大小
GOChord(data = chord_CC,title = 'GO-Cellular Component',space = 0.01,
        limit = c(1,1),gene.order = 'logFC',gene.space = 0.25,gene.size = 5,
        lfc.col = c('red','white','blue'), 
        process.label = 10) 
GOChord(data = chord_MF,title = 'GO-Mollecular Function',space = 0.01,
        limit = c(1,1),gene.order = 'logFC',gene.space = 0.25,gene.size = 5,
        lfc.col = c('red','white','blue'), 
        process.label = 10)
'''
Warning messages:
1: Using size for a discrete variable is not advised. 
2: Removed 15 rows containing missing values (`geom_point()`). 
'''

富集分析完毕!

回顾我们用到方法,差异分析后进行富集分析,理论基础实际上就是简单的找不同,分析。

实际应用种,由于基因之间存在关联,另一套分析理论考虑的是基因之间的相互作用,下节,我们来看非常火的WGCNA 共表达加权网络进行基因分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

函数防抖(javaScript)

防抖说明 &#xff08;1&#xff09;防抖的目的&#xff1a; 当多次执行某一个动作的时候&#xff0c;限制函数调用的次数&#xff0c;节约资源。 &#xff08;2&#xff09;防抖的概念&#xff1a; 函数防抖&#xff08;debounce&#xff09;&#xff1a;就是指触发事件后&…

docker离线安装和使用

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://ullx9uta.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo syste…

Qt ModelView显示数据库数据

利用qt的model view来显示数据表userudps里的数据 用了一个label 两个combox和一个tableview&#xff0c;实现如下效果&#xff1a; 我这里用到是mysql数据库&#xff0c;一般配置mysql数据库就两种有驱动或者没驱动&#xff0c;有的话把mysql的bin目录的libmysql.dll复制到q…

ESP32-IPS彩屏ST7789-Arduino-简单驱动

目的&#xff1a; 使ESP32能够驱动点亮ST7789显示屏 前提条件&#xff1a; ESP32 ST7789 &#xff08;240 x240&#xff0c;IPS&#xff09; 杜邦线 Arduino 过程&#xff1a; 0x00--接线 0x01--驱动&#xff1a; 彩屏驱动库 针对不同的彩屏驱动芯片&#xff0c;常用的 Arduino…

Java中的数组

前言&#xff1a; 本篇博客将为大家介绍Java中的数组的相关知识。 目录 基本介绍 概念相关 数组的使用 数组是引用类型 应用场景 保存数据 作为方法的参数 作为方法的返回值 练习 数组转字符串 数组拷贝 求数组中元素的平均值 查找数组中的指定元素&#xff08;二…

传输线感性耦合和距离的关系

传输线感性耦合和距离的关系 传输线感性耦合是指两条或多条传输线之间由于磁场或电场的相互作用而产生的耦合现象。这种耦合现象对于传输线的信号质量和完整性有很大的影响。其中&#xff0c;传输线之间的距离是一个重要的影响因素。本文将从传输线感性耦合的基本概念入手&…

新年学新语言Go之一

一、前言 搜索相关知识后续内容等上班后再继续&#xff0c;新年新气象&#xff0c;从今天开始学习一下Go语言&#xff0c;第一次听说这门语言还是2016年的时候&#xff0c;然后2018年买了一本书 Go In Action&#xff0c;然后就没有然后了&#xff0c; 转眼这么多年过去了&am…

输入字符串,判断里面有多少个大写字母,多少小写字母,多少数字

public static void main(String[] args) {//输入字符串&#xff0c;判断里面有多少个大写字母&#xff0c;多少小写字母&#xff0c;多少数字countVary("fsdfsD4f4sf&#xffe5;#&#xffe5;%~&*&#xff01;sg9tssfffSFSFS");}public static void countVary(…

【网络】总览(待更新)

网络Ⅰ 零、概述0. 网络协议1. 网络协议分层OSI 七层模型TCP/IP 五层模型 2. 协议报头3. 通信过程 一、应用层1.1 &#x1f517;HTTP 协议1.2 &#x1f517;HTTPS 协议 二、传输层2.1 端口号2.2 netstat - - 查询网络状态2.3 pidof - - 查看服务器的进程 id2.4 &#x1f517;UD…

亚马逊云科技正式发布Amazon DataZone,一项新的数据管理服务

Amazon DataZone现已正式发布。作为一项新的数据管理服务&#xff0c;它能够在组织中对数据生产者和消费者之间产生的数据进行编目、发现、分析、共享和管理。 早在2022年的亚马逊云科技re:Invent上&#xff0c;就预告了Amazon DataZone产品的发布&#xff0c;并在2023年3月对其…

常见场景面试题(二)

typora-copy-images-to: imgs theme: cyanosis 敏感词库的设计&#xff0c;要求增删改查敏感词。敏感词文本匹配&#xff0c;敏感词一万个&#xff0c;文本长度在 20 - 1000 答&#xff1a;使用 trie 树来实现敏感词库的设计&#xff0c;可以利用字符串公共前缀来节约存储空间。…

webrtc gcc算法(1)

老的webrtc gcc算法,大概流程&#xff1a; 这两个拥塞控制算法分别是在发送端和接收端实现的&#xff0c; 接收端的拥塞控制算法所计算出的估计带宽&#xff0c; 会通过RTCP的remb反馈到发送端&#xff0c; 发送端综合两个控制算法的结果得到一个最终的发送码率&#xff0c;并以…

记次好玩的XXX模式

看到很多框架里都用了这种方式

深入了解Java位运算符

1.前言 位运算在我们刷题时候&#xff0c;对于效率和空间都是很大的提升&#xff0c;所以位运算符&#xff0c;对于我们的作用也是不可或缺的。 里面就存在一个很重要的思想就是位图&#xff0c;此次我讲解位运算符的作用主要是为他服务的 位图的原理:通过一个整数模拟&#xf…

Dubbo的整体框架和主要模块

1 整体框架 Dubbo的整体框架如下图所示&#xff1a; 上层依赖下层提供的功能&#xff0c;下层的改变对上层不可见。 2 主要模块 &#xff08;1&#xff09;主要模块如下所示&#xff1a; &#xff08;2&#xff09;各子模块描述如下所示&#xff1a; 3 参考文献 &#xff08…

CN论文编写提示词-示例

建议用GPT-4或者Bing 现在开始你是一位计算机学科的研究员!教授!擅长研究和撰写论文!我需要你协助我一起研究一个课题:《计算机信息技术在智能交通系统中的应用》!你认为这个题目如何!有哪些参考资料!这个题目作为论文题目的话有哪些创新意义和价值! 你扮演计算机信息技…

第六章 应用层 | 计算机网络(谢希仁 第八版)

文章目录 第六章 应用层6.1 域名系统DNS6.1.1 域名系统概述6.1.2 互联网的域名结构6.1.3 域名服务器 6.2 文件传送协议6.2.1 FTP概述6.2.2 FTP的基本工作原理6.2.3 简单文件传送协议TFTP 6.3 远程终端协议TELNET6.4 万维网www6.4.1 万维网概述6.4.2 统一资源定位符URL6.4.3 超文…

VBA技术资料MF70:从单元格文本中取消或删除上标

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

力扣刷题 day46:10-16

1.最大整除子集 给你一个由 无重复 正整数组成的集合 nums &#xff0c;请你找出并返回其中最大的整除子集 answer &#xff0c;子集中每一元素对 (answer[i], answer[j]) 都应当满足&#xff1a; answer[i] % answer[j] 0 &#xff0c;或 answer[j] % answer[i] 0 如果存在…

2.SpringSecurity - 处理器简单说明

文章目录 SpringSecurity 返回json一、登录成功处理器1.1 统一响应类HttpResult1.2 登录成功处理器1.3 配置登录成功处理器1.4 登录 二、登录失败处理器2.1 登录失败处理器2.2 配置登录失败处理器2.3 登录 三、退出成功处理器3.1 退出成功处理器3.2 配置退出成功处理器3.3 退出…