数据分析:基于DESeq2的转录组功能富集分析

2024-05-03 08:20

本文主要是介绍数据分析:基于DESeq2的转录组功能富集分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

DESeq2常用于识别差异基因,它主要使用了标准化因子标准化数据,再根据广义线性模型判别组间差异(组间残差是否显著判断)。在获取差异基因结果后,我们可以进行下一步的富集分析,常用方法有基于在线网站DAVID以及脚本处理的两类,本文介绍基于fgsea的方法计算富集分析得分。

DESeq2差异分析

了解DESeq2如何标准化数据和识别差异基因。下面给出简要代码

library(DESeq2)
library(airway)
data("airway")
ddsSE <- DESeqDataSet(airway, design = ~ cell + dex)
ddsSE <- DESeq(ddsSE)
res <- results(ddsSE, tidy = TRUE) %>% na.omit() %>% as_tibble()head(res)
# A tibble: 6 x 7row             baseMean log2FoldChange  lfcSE   stat     pvalue      padj<chr>              <dbl>          <dbl>  <dbl>  <dbl>      <dbl>     <dbl>
1 ENSG00000000003    709.          0.381  0.101   3.79  0.000152   0.00128  
2 ENSG00000000419    520.         -0.207  0.112  -1.84  0.0653     0.197    
3 ENSG00000000457    237.         -0.0379 0.143  -0.264 0.792      0.911    
4 ENSG00000000460     57.9         0.0882 0.287   0.307 0.759      0.895    
5 ENSG00000000971   5817.         -0.426  0.0883 -4.83  0.00000138 0.0000182
6 ENSG00000001036   1282.          0.241  0.0887  2.72  0.00658    0.0328 

转换geneID

我们使用的MSigDB数据库的pathway 基因ID只有entrez和HGNC symbol两类,如果是ensemble id,需要转换。

library(org.Hs.eg.db)
library(tidyverse)
ens2symbol <- AnnotationDbi::select(org.Hs.eg.db,key=res$row, columns="SYMBOL",keytype="ENSEMBL")
ens2symbol <- as_tibble(ens2symbol)
head(ens2symbol)
# A tibble: 6 x 2ENSEMBL         SYMBOL  <chr>           <chr>   
1 ENSG00000000003 TSPAN6  
2 ENSG00000000419 DPM1    
3 ENSG00000000457 SCYL3   
4 ENSG00000000460 C1orf112
5 ENSG00000000971 CFH     
6 ENSG00000001036 FUCA2 
  • 合并数据;过滤NA值;去重;重复基因求stat(stat数据作为排序指标用于后续富集分析)
res2 <- inner_join(res, ens2symbol, by=c("row"="ENSEMBL")) %>% dplyr::select(SYMBOL, stat) %>% na.omit() %>% distinct() %>% group_by(SYMBOL) %>% summarize(stat=mean(stat))
head(res2 )
# A tibble: 6 x 2SYMBOL       stat<chr>       <dbl>
1 A1BG      0.680  
2 A1BG-AS1 -1.79   
3 A2M      -1.26   
4 A2M-AS1   0.875  
5 A4GALT   -4.14   
6 A4GNT     0.00777

构建fgsea输入数据

  • 基因排序值转换
library(fgsea)ranks <- deframe(res2)
head(ranks, 20)
        A1BG     A1BG-AS1          A2M      A2M-AS1       A4GALT        A4GNT         AAAS         AACS 0.679946437 -1.793291412 -1.259539478  0.875346116 -4.144839902  0.007772497  0.163986128  1.416071728 AADACL4        AADAT        AAGAB         AAK1        AAMDC         AAMP         AAR2        AARS1 
-1.876311694  3.079128034  1.554279946  1.141522348 -2.147527241 -3.170612332 -2.364380163  4.495474603 AARS2       AARSD1        AASDH     AASDHPPT 5.057470292  0.654208006  0.665531695 -0.353496148 
  • pathways的基因集合,上MSigDB下载基因集。演示使用KEGG基因集
pathways.hallmark <- gmtPathways("../../Result/GeneID/msigdb.v7.1.symbols_KEGG.gmt")
pathways.hallmark %>% head() %>% lapply(head)
$KEGG_GLYCOLYSIS_GLUCONEOGENESIS
[1] "ACSS2" "GCK"   "PGK2"  "PGK1"  "PDHB"  "PDHA1"$KEGG_CITRATE_CYCLE_TCA_CYCLE
[1] "IDH3B" "DLST"  "PCK2"  "CS"    "PDHB"  "PCK1" $KEGG_PENTOSE_PHOSPHATE_PATHWAY
[1] "RPE"   "RPIA"  "PGM2"  "PGLS"  "PRPS2" "FBP2" $KEGG_PENTOSE_AND_GLUCURONATE_INTERCONVERSIONS
[1] "UGT1A10" "UGT1A8"  "RPE"     "UGT1A7"  "UGT1A6"  "UGT2B28"$KEGG_FRUCTOSE_AND_MANNOSE_METABOLISM
[1] "MPI"  "PMM2" "PMM1" "FBP2" "PFKM" "GMDS"$KEGG_GALACTOSE_METABOLISM
[1] "GCK"     "GALK1"   "GLB1"    "GALE"    "B4GALT1" "PGM2"
  • 运行
fgseaRes <- fgsea(pathways=pathways.hallmark, stats=ranks, nperm=1000)
head(fgseaRes[order(pval), ])
  • 从查看KEGG_REGULATION_OF_ACTIN_CYTOSKELETON富集分数分布
plotEnrichment(pathways.hallmark[["KEGG_REGULATION_OF_ACTIN_CYTOSKELETON"]],ranks) + labs(title="KEGG_REGULATION_OF_ACTIN_CYTOSKELETON")

  • 查看上下调通路结果
topPathwaysUp <- fgseaRes[ES > 0][head(order(pval), n=10), pathway]
topPathwaysDown <- fgseaRes[ES < 0][head(order(pval), n=10), pathway]
topPathways <- c(topPathwaysUp, rev(topPathwaysDown))
plotGseaTable(pathways.hallmark[topPathways], ranks, fgseaRes, gseaParam=0.5)

  • 其他展示方式
fgseaResTidy <- fgseaRes %>%as_tibble() %>%arrange(desc(NES))# Show in a nice table:
fgseaResTidy %>% dplyr::select(-leadingEdge, -ES, -nMoreExtreme) %>% arrange(padj) %>% DT::datatable()ggplot(fgseaResTidy, aes(reorder(pathway, NES), NES)) +geom_col(aes(fill = padj<0.0001)) +coord_flip() +labs(x="Pathway", y="Normalized Enrichment Score",title="Hallmark pathways NES from GSEA") + theme_minimal()

查看通路的基因

res_temp <- inner_join(res, ens2symbol, by=c("row"="ENSEMBL"))
pathways.hallmark %>% enframe("pathway", "SYMBOL") %>% unnest(cols = c(SYMBOL)) %>% inner_join(res_temp , by="SYMBOL") %>%head()
# A tibble: 6 x 9pathway                         SYMBOL row             baseMean log2FoldChange lfcSE   stat pvalue   padj<chr>                           <chr>  <chr>              <dbl>          <dbl> <dbl>  <dbl>  <dbl>  <dbl>
1 KEGG_GLYCOLYSIS_GLUCONEOGENESIS ACSS2  ENSG00000131069    669.         -0.269  0.114 -2.35  0.0188 0.0756
2 KEGG_GLYCOLYSIS_GLUCONEOGENESIS GCK    ENSG00000106633     28.8         0.305  0.374  0.815 0.415  0.662 
3 KEGG_GLYCOLYSIS_GLUCONEOGENESIS PGK1   ENSG00000102144   7879.         -0.300  0.353 -0.850 0.395  0.642 
4 KEGG_GLYCOLYSIS_GLUCONEOGENESIS PDHB   ENSG00000168291    648.         -0.257  0.102 -2.52  0.0117 0.0521
5 KEGG_GLYCOLYSIS_GLUCONEOGENESIS PDHA1  ENSG00000131828    651.         -0.0744 0.104 -0.715 0.475  0.710 
6 KEGG_GLYCOLYSIS_GLUCONEOGENESIS PGM2   ENSG00000169299    302.         -0.315  0.136 -2.33  0.0201 0.0797

其他用法

  • miR targets
fgsea(pathways=gmtPathways("msigdb/c3.mir.v6.2.symbols.gmt"), ranks, nperm=1000) %>% as_tibble() %>% arrange(padj)
  • GO annotations
fgsea(pathways=gmtPathways("msigdb/c5.all.v6.2.symbols.gmt"), ranks, nperm=1000) %>% as_tibble() %>% arrange(padj)
  • 非人物种
library(biomaRt)
mart <- useDataset("mmusculus_gene_ensembl", mart=useMart("ensembl"))
bm <- getBM(attributes=c("ensembl_gene_id", "hsapiens_homolog_associated_gene_name"), mart=mart) %>%distinct() %>%as_tibble() %>%na_if("") %>% na.omit()
bm

参考

  1. Fast Gene Set Enrichment Analysis

  2. DESeq results to pathways in 60 Seconds with the fgsea package

这篇关于数据分析:基于DESeq2的转录组功能富集分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956275

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk