R语言脚本:关于 TissueEnrich包 得到的组织特异性基因富集结果的进一步处理

news2024/11/16 9:34:14

1. 说明 (来自官方文档):

The TissueEnrich package is used to calculate enrichment of tissue-specific genes in a set of input genes.

Tissue-specific genes were defined by processing RNA-Seq data from the Human Protein Atlas (HPA) (Uhlén et al. 2015), GTEx (Ardlie et al. 2015), and mouse ENCODE (Shen et al. 2012) using the algorithm from the HPA (Uhlén et al. 2015).

The hypergeometric test is being used to determine if the tissue-specific genes are enriched among the input genes. Along with tissue-specific gene enrichment, the TissueEnrich package can also be used to define tissue-specific genes from expression datasets provided by the user, which can then be used to calculate tissue-specific gene enrichments.

TissueEnrich has the following three functions:
teEnrichment: Given a gene list as input, this function calculates the tissue-specific gene enrichment using tissue-specific genes from either human or mouse RNA-Seq datasets.

teGeneRetrieval: Given gene expression data across tissues, this function defines tissue-specific genes by using the algorithm from the HPA.

teEnrichmentCustom: Given a gene list and tissue-specific genes from teGeneRetrieval as input, this function calculates the tissue-specific gene enrichment.

详情见:https://bioconductor.org/packages/release/bioc/vignettes/TissueEnrich/inst/doc/TissueEnrich.html

2. 参考:

TissueEnrich包: https://bioconductor.org/packages/release/bioc/html/TissueEnrich.html
参考文献: Jain A, Tuteja G. TissueEnrich: Tissue-specific gene enrichment analysis. Bioinformatics. 2019 Jun 1;35(11):1966-1967.
安装教程: https://github.com/Tuteja-Lab/TissueEnrich

3. 目的:

本文只是想对teEnrichment函数得到的富集结果做进一步处理:将一组目标基因集合作为 TissueEnrich 包的输入,利用teEnrichment方法得到其中的组织特异性基因的富集结果。官方给出了某个组织中富集到的基因在所有组织中的表达情况 (如下图所示),这样一次只能获取一个组织的结果,如果要一次获取全部组织的结果,那么可能需要自己手动处理。所以本文旨在提供一种一次性获取所有组织中的特异性基因富集结果 (这些特异性基因限定于 目标基因集合中) 的方法。

下方脚本主要做了两方面处理:1. 将目标基因集合中那些存在组织特异性基因富集结果的取出;2. 对于那些不存在富集结果的目标基因,用 0.0 进行填充 (表示无结果)。最终得到所有目标基因在所有组织中的特异性表达富集结果。

数据来源:
在这里插入图片描述
作者并没有将不同来源的数据进行整合,所以用户可以通过 rnaSeqDataset 指定不同来源的数据 (默认 RNA-Seq 数据用的是HPA的,如下图所示)。
在这里插入图片描述

比如:人类Placenta (胎盘)中特异性基因在35个组织中的表达情况 (官方示例)。
在这里插入图片描述

4. 脚本:

主要思路就是先根据 teEnrichment 方法获取目标基因的组织特异性富集结果,之后for循环遍历富集结果中的每一个组织的特异性基因富集结果。富集结果中,某些目标基因可能不存在,那么就用0.0填充(即 该基因在所有组织中不表达)。最终将所有结果拼接输出,得到所有目标基因的组织特异性富集结果。

library(TissueEnrich)
library(tidyr)
library(dplyr)


getTargetGeneExpression = function(inputGenes, organism, outfilePath, rnaSeqSource=1, ifHeatMap=FALSE){
  # 获取所有目标基因在人体组织中的表达分布
  
  ## 1. 获取特定组织中的基因富集结果
  getExpress = function(tissuename) {
    expressdata = output[[2]][[tissuename]]
    return(expressdata)
  }
  
  ## 2. 绘制热图的函数
  drawHeatMap = function(expdf) {
    ggplot(expdf, aes(Tissue, Gene)) + 
      geom_tile(aes(fill = expression),
                colour = "white") + 
      scale_fill_gradient(low = "white",
                          high = "steelblue")+
      labs(x='', y = '')+
      theme_bw()+
      guides(fill = guide_legend(title = "Log2(TPM)"))+
      #theme(legend.position="none")+
      theme(plot.title = element_text(hjust = 0.5,size = 20),
            axis.title = element_text(size=15))+
      theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
            panel.grid.major = element_blank(),
            panel.grid.minor = element_blank())
  }
  
  ## 根据基因列表用 teEnrichment() 进行富集
  gs<-GeneSet(geneIds=inputGenes, organism=organism, geneIdType=SymbolIdentifier())
  output<-teEnrichment(inputGenes=gs, rnaSeqDataset=rnaSeqSource)
  
  enrich_gene_dataframe = data.frame(matrix(nrow=0, ncol=length(rownames(output[[1]]))+1)) ## 有富集结果的基因
  not_enrich_gene_dataframe = data.frame(matrix(nrow=0, ncol=length(rownames(output[[1]]))+1)) ## 没有富集结果的基因
  colnames(enrich_gene_dataframe) = c(rownames(output[[1]]), "Gene")
  colnames(not_enrich_gene_dataframe) = c(rownames(output[[1]]), "Gene")
  
  ## 提取有富集结果的基因的表达
  for (tissuename in rownames(output[[1]])) {
    result = getExpress(tissuename)
    if (dim(result)[1] != 0) {
      exp = setNames(data.frame(assay(result), row.names = rowData(result)[,1]), colData(result)[,1])
      exp$Gene = row.names(exp)
      enrich_gene_dataframe = rbind(enrich_gene_dataframe, exp)
    }
  }
  enrich_gene_dataframe = distinct(enrich_gene_dataframe, .keep_all = TRUE) ## 去掉完全重复的行
  
  ## 提取没有富集结果的基因,并用 0 填充
  not_enrich_gene = setdiff(inputGenes, enrich_gene_dataframe$Gene)
  for (ng in not_enrich_gene) {
    result = rep(0.0, ncol(not_enrich_gene_dataframe)-1)
    result = data.frame(t(as.data.frame(result)))
    result$Gene = ng
    colnames(result) = colnames(not_enrich_gene_dataframe)
    not_enrich_gene_dataframe = rbind(not_enrich_gene_dataframe, result)
  }
  
  result_dataframe = rbind(enrich_gene_dataframe, not_enrich_gene_dataframe)
  order_result_dataframe = result_dataframe[order(result_dataframe$Gene),] ## 根据 Gene 名称排序
  write.table(order_result_dataframe, file=outfilePath, quote=FALSE, row.names=FALSE, sep="\t")
  if (ifHeatMap) {
    order_result_dataframe = order_result_dataframe %>% gather(key = "Tissue", value = "expression",1:(ncol(order_result_dataframe)-1))
    drawHeatMap(order_result_dataframe)
  }
}

5. 运行方式

#------输入数据------#
gene_dataframe = read.csv("your_target_gene_files.txt", sep="\t", header = TRUE)
inputGenes = gene_dataframe$Gene ## 获取 Gene 所在的列 (此处输入文件中 Gene 所在列的名称为 "Gene")
organism = "Homo Sapiens" ## 物种 (此处选的是 人)
rnaSeqSource = 2
# An integer describing the dataset to be used for enrichment analysis. 
# 1 for 'Human Protein Atlas' (default), 
# 2 for 'GTEx', 
# 3 for 'Mouse ENCODE'. Default 1.

outfilePath = "your_result.txt" ## 所有目标基因的组织富集结果 (输出文件)

getTargetGeneExpression(inputGenes, organism, outfilePath, rnaSeqSource, ifHeatMap=TRUE)
## 关于 getTargetGeneExpression() 函数中各参数的含义:
## inputGenes : 输入的基因集合,可以读取文件中的基因集合所在的列;
## organism: 物种 (只有 人(Homo Sapiens)和鼠(Mouse) 两种选择)
## outfilePath: 输出文件
## ifHeatMap: 是否绘制热图 (默认不绘制,即 ifHeatMap=FALSE)

6. 示例:

以官方给出的基因集合为例:

genes<-system.file("extdata", "inputGenes.txt", package = "TissueEnrich")
inputGenes<-scan(genes,character())
rnaSeqSource = 1 ## 可以不写,因为默认是 1
organism = "Homo Sapiens"
outfilePath = "example_result.txt"

getTargetGeneExpression(inputGenes, organism, outfilePath, ranSeqSource, ifHeatMap=TRUE)

结果如下:
一共有97个基因,其部分富集结果如下:
在这里插入图片描述

可视化热图结果如下:
在这里插入图片描述

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

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

相关文章

HttpServlet概述

HTTP协议包括: 请求协议:浏览器向WEB服务器发送数据的时候&#xff0c;这个发送的数据需要遵循一套标准&#xff0c;这套标准中规定了发送的数据具体格式。 相应协议:WEB服务器向浏览器发送数据的时候&#xff0c;这个发送的数据需要遵循一套标准&#xff0c;这套标准中规定了发…

【2023年首次更新】MyEclipse v2023.1支持Java 20

MyEclipse让您在开发过程中不受技术约束&#xff0c;不断创新帮您找到关键技术的解决方案您能在这里得到Java EE开发所需要的一切支持&#xff01; MyEclipse v2023.1官方正式版下载 更新日志如下&#xff1a; MyEclipse官方近期更新了2023年第一个版本——v2023.1&#xff…

Nat.Commun. : 新的硬件将扩大量子计算机的工业应用规模

光子盒研究院 由明尼苏达大学双城分校领导的一个团队开发了一种新的超导二极管——这是电子设备中的一个关键部件&#xff0c;可以帮助扩大量子计算机的工业使用规模&#xff0c;并提高人工智能系统的性能。与其他超导二极管相比&#xff0c;研究人员的装置更加节能、可以同时处…

看过才知道,这套SpringCloudAlibaba笔记,把微服务玩的出神入化!

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件&#xff0c;依托Spring Cloud Alibaba&#xff0c;只需要添加一些注解和少量配置&#xff0c;就可以将Spring Cloud 应用接入阿里微服务解决方案&#xff0c;通过阿里中…

pwn(2)-栈溢出下

32位shellcode编写 不同内核态操作通过给寄存器设置不同的值&#xff0c;在调用指令int 80h&#xff0c;就可以通知内核完成不同的功能。 只要我们通过特定的汇编代码把特定的寄存器设定为特定的值后&#xff0c;在调用int 80h执行sys_execve(“/bin/sh”,NULL,NULL)就可以获…

Python获取链家二手房源数据信息

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块 csv 内置模块 &#x1f447; &#x1f447; &#x1…

OJ#203.身高排序

题目描述 ​ 海贼小学为了强健学生的身体&#xff0c;每天课间都要组织学生在户外学做广播体操。​ 这一天&#xff0c;五年级三班的所有同学在老师的指引下将队形排成了 M行 N 列。 现已知所有同学 的身高&#xff0c;数值为整数&#xff0c;单位&#xff1a;厘米。要求在所有…

Ansible从入门到精通【五】

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 专栏名称&#xff1a;Ansible从入门到精通 立志成为ansible大佬 ansible-playbook企业级实战--handler hand…

爬虫基本的编码基础知识

爬虫的编码基础知识包括以下几个方面&#xff1a; 网络请求&#xff1a;使用Python中的requests库或urllib库发送HTTP请求&#xff0c;获取网页内容。 解析网页&#xff1a;使用Python中的BeautifulSoup库或lxml库解析HTML或XML格式的网页内容&#xff0c;提取所需的数据。 数…

如何开发视频上传和播放功能时,既省钱又体验好?

前言 现如今&#xff0c;大部分带内容的网站或应用都有视频区了&#xff0c;不说是大厂平台&#xff0c;就连个人开发者也相继在自己网站或小程序上迭代出视频板块。那既然有了视频模块&#xff0c;除个性化推荐&#xff0c;智能审核等这种费钱又耗时的功能外(个人开发者暂缓)。…

软件测试金融测试岗面试热点问题

1、网上银行转账是怎么测的&#xff0c;设计一下测试用例。 回答思路&#xff1a; 宏观上可以从质量模型&#xff08;万能公式&#xff09;来考虑&#xff0c;重点需要测试转账的功能、性能与安全性。设计测试用例可以使用场景法为主&#xff0c;先列出转账的基本流和备选流。…

Hive Code2报错排查

前言 大多数可能的code2报错一般是内存不够&#xff0c;所以加下面这个配置可以有效解决这个问题 set hive.auto.convert.join false; #取消小表加载至内存中 但这个不一定是因为内存不够&#xff0c;其实很多错误都是报这种官方错误的&#xff0c;所以一定要去yarn上看日志。…

如何解决vcruntime140.dll找不到的问题?两种方法教你解决

当你在运行某些应用程序或游戏时&#xff0c;可能会遇到一个错误提示&#xff0c;即“找不到vcruntime140.dll”文件。这是因为你的电脑中缺少了这个动态链接库文件&#xff0c;这个问题可能会导致你无法正常使用某些应用程序。在本文中&#xff0c;我们将介绍两种方法来解决 …

Vue3.0快速入门(速查)

Vue也是基于状态改变渲染页面&#xff0c;Vue相对于React要好上手一点。有两种使用Vue的方式&#xff0c;可以直接导入CDN&#xff0c;也可以直接使用CLI创建项目&#xff0c;我们先使用CDN导入&#xff0c;学一些Vue的基本概念。 <!-- 开发环境版本&#xff0c;包含了有帮…

泰克AFG31000系列任意波函数发生器应用

模拟电路检定 这是一个模拟世界。所有物理量均使用模拟信号捕获和表示。因此&#xff0c;需要检定放大器、滤波器和转换器等模拟电路的性能。 InstaView? 技术避免在阻抗不匹配的 DUT 上增加的波形不确定性频率范围为 25 MHz 至 250 MHz由于信号保真度高&#xff0c;无需使…

MySql基础笔记

数据库相关概念 ​ 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Management System&#xff08;DBMS&#xff09;SQL操作关系型数据库的编程语言&#xff0c;定…

Java粮油MES系统源码(带可视化数据大屏)

▶ Java粮油MES系统实现一物一码&#xff0c;全程追溯 &#xff0c;正向追踪&#xff0c;逆向溯源&#xff0c;自主研发,有演示&#xff01; 一、粮油MES技术框架说明 开发语言&#xff1a;java 开发工具&#xff1a;idea或eclipse 前端框架&#xff1a;easyui 后端框架&…

横空出世!京东技术专家狂推的Redis笔记,实战和原理两开花

Redis 是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司…

【JavaSE】 封装

文章目录 一. 封装的概念二. 访问限定符三. 封装扩展之包1. 包的概念2. 导入包中的类3. 自定义包4. 包的访问权限控制举例5. 常见的包 四. static成员1. 简介2. static修饰成员变量3. static修饰成员方法 五. 代码块1. 代码块概念以及分类2. 普通代码块3. 构造代码块4. 静态代码…

chatgpt赋能python:Python可以实现两个数值的互换

Python可以实现两个数值的互换 Python是一种高效、易学且功能强大的编程语言&#xff0c;可以用于各种不同的编程目的&#xff0c;包括数据科学、网络编程、机器学习、人工智能等领域。其中&#xff0c;Python的一个最基本、最关键的操作就是对数值的处理&#xff0c;包括加减…