Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kallisto定量结果:如何将transcript-level表达矩阵转为gene-level

Kallisto定量结果:如何将transcript-level表达矩阵转为gene-level

作者头像
生信技能树
发布于 2025-02-12 07:34:43
发布于 2025-02-12 07:34:43
21100
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

前面关于Kallisto写了两个笔记,主要是: Kallisto 软件的上、下游分析流程。但是曾老板说他没有看到他想让我做的,嗯:就是Kallisto的定量结果是转录本水平的定量,他想让我学习怎么转换为基因水平的定量。转录本水平的定量研究也是有很多的,我老以为他让我看转录本水平定量的count是小数怎么处理,为什么是小数以及怎么给转录本ID添加转录本symbol和基因symbol。就是我没有get到他的意思!这就来看看~

前面的两个Kallisto笔记:

转换数据准备

这里将transcript-level表达矩阵转为gene-level的矩阵,使用的是R包 tximport,学习链接:https://bioconductor.org/packages/release/bioc/vignettes/tximport/inst/doc/tximport.html。这个软件可以接受这些软件的转录本定量结果:

  • Salmon (Patro et al. 2017)
  • Alevin (Srivastava et al. 2019)
  • Sailfish (Patro, Mount, and Kingsford 2014)
  • kallisto (Bray et al. 2016)
  • RSEM (Li and Dewey 2011)
  • StringTie (Pertea et al. 2015)

还需要一个文件为:tx2gene数据框,包含两列,列名并不重要,但必须第一列是transcript ID,第二列是gene ID这种列的顺序。转录本 ID 必须与在abundance.tsv文件中使用的相同。

  • 第一列:transcript ID
  • 第二列:gene ID

有两种方法可以得到这个对应关系,第一种是定量的时候配套版本的gtf文件,见帖子:在什么情况下基因ID转换会100%失败?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
### gtf 
library(tidyverse)
library(rtracklayer)

# 读取gtf文件
gtf <- rtracklayer::import('GSE270697/Mus_musculus.GRCm39.113.gtf.gz') 
# 转为数据框,简单探索
gtf_df <- as.data.frame(gtf)
colnames(gtf_df)

# 过滤transcript行
gtf_df <- filter(gtf_df, type=="transcript")
head(gtf_df)
colnames(gtf_df)

gtf_df_trans <- gtf_df[,c("transcript_id","gene_id")]
head(gtf_df_trans)

第二种是定量的时候使用的参考序列:/nas1/zhangj/database/genome/Mus_musculus/release113/Mus_musculus.GRCm39.cdna.all.fa

使用bash命令得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 转录本id 和基因id的关系
grep '^>' /nas1/zhangj/database/genome/Mus_musculus/release113/Mus_musculus.GRCm39.cdna.all.fa  |cut -d' ' -f 1,4 |sed -e 's/>//g' -e 's/gene://g'  >GRCm39.tx2gene.txt

# gene ID 和name也保存一份
grep '^>' /nas1/zhangj/database/genome/Mus_musculus/release113/Mus_musculus.GRCm39.cdna.all.fa  |cut -d' ' -f 4,7 |sed -e 's/gene_symbol://g' -e 's/gene://g' >GRCm39.g2name.txt

GRCm39.tx2gene.txt:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ENSMUST00000103301.3 ENSMUSG00000076500.3
ENSMUST00000166255.2 ENSMUSG00000090395.2
ENSMUST00000095364.3 ENSMUSG00000090765.2
ENSMUST00000103304.3 ENSMUSG00000094491.3
ENSMUST00000103305.2 ENSMUSG00000096580.2
ENSMUST00000103306.2 ENSMUSG00000076505.2
ENSMUST00000200586.2 ENSMUSG00000076508.4
ENSMUST00000103309.3 ENSMUSG00000076508.4
ENSMUST00000103310.3 ENSMUSG00000094345.3
ENSMUST00000196768.2 ENSMUSG00000096632.3

GRCm39.g2name.txt:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ENSMUSG00000076500.3 Gm20730
ENSMUSG00000090395.2 Gm54608
ENSMUSG00000090765.2 Gm54637
ENSMUSG00000094491.3 Igkv1-133
ENSMUSG00000096580.2 Igkv1-132
ENSMUSG00000076505.2 Igkv1-131
ENSMUSG00000076508.4 Igkv17-127
ENSMUSG00000076508.4 Igkv17-127
ENSMUSG00000094345.3 Igkv14-126
ENSMUSG00000096632.3 Igkv9-124

万事俱备,转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm(list=ls())
library(tximport)
library(readr)
library(stringr)

# 定量结果
dir <- file.path('PRJNA1128028/rawdata/kallisto_quant/')
dir
files <- list.files(pattern="*tsv",dir,recursive=T)
files
files <- file.path(dir,files)
files
all(file.exists(files))

转换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# tx2gene
tx2gene <- read.table(file = "GRCm39.tx2gene.txt",stringsAsFactors = F )
head(tx2gene)


# 导入转换
txi <- tximport(files, type = "kallisto", tx2gene = tx2gene)
names(txi) 
head(txi$length)
head(txi$counts)
str(txi)


# 添加样本名字
files
sapply(strsplit(files,'\\/'), function(x) x[5]) # 看清楚在哪个字段
temp <- sapply(strsplit(files,'\\/'), function(x) x[5]) 
temp <- gsub(".quant", "", temp)
temp
colnames(txi$counts) <- temp

# 提取基因水平count,小数转为整数
tmp <- txi$counts
head(tmp)
exprSet <- apply(tmp,2,as.integer)
rownames(exprSet) <- rownames(tmp) 
dim(exprSet)
exprSet[1:4,1:4]

顺便对基因id做一下symbol转换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基因id转换
id2name <- read.table("GRCm39.g2name.txt",sep = " ", quote = "\"", fill = T)
id2name <- unique(id2name)
id2name <- id2name[id2name$V2!="", ]
head(id2name)

mat <- exprSet %>% 
  as.data.frame() %>% 
  rownames_to_column("ID")
head(mat)

mat_symbol <- merge(id2name, mat, by.x="V1", by.y="ID")
mat_symbol1 <- limma::avereps(mat_symbol[,-c(1,2)], ID=mat_symbol$V2)
dim(mat_symbol1)
mat_symbol1[1:5, ]
keep <- rowSums(mat_symbol1)>0;table(keep)
mat_symbol1 <- mat_symbol1[keep, ]
mat_symbol1[1:5, ]

这个就是大家想要的count格式的表达量矩阵啦,而且是以基因为单位哦!后面就可以愉快的分析了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在什么情况下基因ID转换会100%失败?
他的数据截图如下:眼尖的同学肯定一眼就能看出来问题在哪,这个也在我们前面的帖子中提到过:驴的单细胞数据基因ID如何转换?,去这个帖子中看看是怎么回事吧!
生信技能树
2025/02/08
1940
在什么情况下基因ID转换会100%失败?
基于Kallisto或Salmon的转录组定量流程
Kallisto和Salmon在RNA-seq数据分析中,相比于包含hisat2和STAR等软件的流程,展现出更高的处理速度。这主要归因于它们基于转录组序列reference(即cDNA序列)的特性和k mer比对原理。以下是关于Kallisto和Salmon在RNA-seq流程中速度优势的关键点归纳:
生信学习者
2024/06/13
2280
基于Kallisto或Salmon的转录组定量流程
RNA-seq入门实战(二):上游数据的比对计数——Hisat2+ featureCounts 与 Salmon
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/07/26
5.3K0
RNA-seq入门实战(二):上游数据的比对计数——Hisat2+ featureCounts 与 Salmon
Kallisto 软件的上、下游分析流程
简单的搜了一下相关资料,发现这个软件不需要经过比对就可以直接进行转录本层面的定量,于2016年5月份发表在Nat Biotechnol(IF=33.1),标题为《Near-optimal RNA-Seq quantification》。
生信技能树
2025/02/10
2590
Kallisto 软件的上、下游分析流程
wk文本处理
接着,我们可以使用awk模仿cut的操作(结果与cut -f2,3 example.bed一致):
ruochen
2021/12/05
1.3K0
scRNA小鼠发育Smartseq2流程—前言及上游介绍
这次要重复的文章是:Dissecting Cell Lineage Specification and Sex Fate Determination in Gonadal Somatic Cells Using Single-Cell Transcriptomics
生信技能树jimmy
2020/03/30
1.8K0
RNA-seq入门实战(三):在R里面整理表达量counts矩阵
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/07/26
21.7K0
RNA-seq入门实战(三):在R里面整理表达量counts矩阵
单端测序转录组实战:GSE211266(物种小鼠)
对应的文献为 https://www.nature.com/articles/s43018-025-00975-6,于2025年5月26号发表在Nature Cancer杂志上,标题为《Impaired Barrier Integrity of the Skeletal Muscle Vascular Endothelium Drives Progression of Cancer Cachexia》。
生信技能树
2025/06/09
1600
单端测序转录组实战:GSE211266(物种小鼠)
RNA-seq 详细教程:分析准备(3)
在过去的十年中,RNA-seq 已成为转录组差异表达基因和 mRNA 可变剪切分析不可或缺的技术。正确识别哪些基因或转录本在特定条件下的表达情况,是理解生物反应过程的关键。
数据科学工厂
2023/01/29
1.2K0
转录组上游分析—使用iseq下载原始数据、小鼠基因组、单端测序数据处理
进行数据集GSE105789上游分析的时候,总共才四个数据集,使用prefetch下载的时候,不知道网络抽了什么风,速度一直都很慢。下了10个小时才下了三分之一。!
sheldor没耳朵
2024/08/21
4991
转录组上游分析—使用iseq下载原始数据、小鼠基因组、单端测序数据处理
VEP注释结果怎么看?
众所周知,对于VCF文件的注释常用的有VEP、SnpEff、ANNOVAR等,软件各有优势,选择哪个工具通常取决于具体的分析需求、数据类型和用户的技术背景。例如,VEP因其提供的丰富注释信息和易用性而被广泛使用。今天就先来详细了解一下VEP的注释结果。
生信菜鸟团
2024/05/11
1.3K0
VEP注释结果怎么看?
获取基因有效长度的N种方法
最近有粉丝自告奋勇希望可以把他自己在简书等平台的生物信息学笔记分享在我们生信技能树公众号,在专业的舞台上跟大家切磋!
生信技能树
2022/06/27
5.3K0
获取基因有效长度的N种方法
一个优秀的ATAC-seq数据分析资源实战(一)
之前我们给大家介绍了两篇ATAC-Seq数据分析pipeline的优秀综述:综述:ATAC-Seq 数据分析工具大全 和 Omni-ATAC:更新和优化的ATAC-seq协议(NatProtoc),我们今天就来实战介绍!
生信技能树
2025/02/27
2770
一个优秀的ATAC-seq数据分析资源实战(一)
如果你一定要TCGA数据库的转录组测序的TPM表达量矩阵,不妨自己进行转换啊!
首先需要下载TCGA的33种癌症的全部数据,尤其是表达量矩阵和临床表型信息啦,这里我们推荐在ucsc的xena里面下载:https://xenabrowser.net/datapages/,可以看到,确实是没有提供TPM表达量矩阵,但是自己进行转换啊!无论RPKM或FPKM或者TPM格式是多么的遭人诟病,它的真实需求还是存在, 那么我们该如何合理的定义基因的长度呢?
生信技能树
2021/11/25
3.1K0
数据分析:基于STAR+FeatureCounts的RNA-seq分析全流程流程
分析流程涉及到众多的软件以及R包等,为了更方便配置该环境,建议使用anaconda软件安装。anaconda是包管理工具,可以将软件作为其包进行安装管理,并且可以设置多个环境,方便不同依赖环境的软件在同一台机器安装。安装anaconda方法见网上教程。
生信学习者
2024/07/05
7520
RNA-seq 差异分析的点点滴滴(1)
本系列[1])将开展全新的转录组分析专栏,主要针对使用DESeq2时可能出现的问题和方法进行展开。
数据科学工厂
2024/12/30
1540
RNA-seq 差异分析的点点滴滴(1)
不只是人类!340+物种的转录组表达矩阵Ensembl ID转换为symbol
转录组数据,我们能拿到的表达矩阵通常是以Ensembl ID 为行名的,一长串,格式是ENS...。
用户11414625
2025/02/25
2310
不只是人类!340+物种的转录组表达矩阵Ensembl ID转换为symbol
RNA-seq数据上游处理完整流程
今天卡卡在处理RNA-seq的数据,整理出来一份上游的处理流程,分享给大家。从环境搭建到最终的表达量定量,一步步带你掌握RNA-seq数据分析的核心技能。
生信医道
2025/07/01
1200
分析GSEA通路中的上下调基因
传统KEGG(通路富集分析)和GO(功能富集)分析时,如果富集到的同一通路下,既有上调差异基因,也有下调差异基因,那么这条通路总体的表现形式究竟是怎样?是被抑制还是激活?或者更直观点说,这条通路下的基因表达水平在实验处理后是上升了呢,还是下降了呢?由于没有采用有效的统计学手段去分析某条通路下的差异基因的总体变化趋势,这使得传统的富集分析结果无法回答这些问题。
生信菜鸟团
2023/11/07
1.8K0
分析GSEA通路中的上下调基因
RNA-seq(6): reads计数,合并矩阵并进行注释
小结 计数分为三个水平: gene-level, transcript-level, exon-usage-level 标准化方法: FPKM RPKM TMM TPM
Y大宽
2018/09/10
7.1K0
RNA-seq(6): reads计数,合并矩阵并进行注释
推荐阅读
相关推荐
在什么情况下基因ID转换会100%失败?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验