当前位置: 首页 > backend >正文

bulk-seq分析,表达量你使用fpkm?还是tpm?

前言

关于bulk-seq分析,你是使用fpkm?还是tpm?

这个问题,可能对于初学者来说,很是纠结。因为,你在文章中有使用fpkm,也有使用tpm?也有使用count?我们在“一文了解Count、FPKM、RPKM、TPM”推文中也详细介绍了各参数的表示的意义。以及在关于Count,FPKM,TPM,RPKM等表达量的计算及转换中也介绍了它们之间的转换。

但是,**学习的一直是在不断向前,以及不断纠错的过程。**我们每个人都在经历此过程。

bulk-seq分析中,是什么标准进行后续的分析呢?

对于这个问题,我们“社群”也有在讨论过?也有很多同学在咨询这个问题。有同学认为FPKM并不是很准确,推荐使用tpm值。但是也有同学一直在使用FPKM值,或是其它值进行筛选,如count(最原始的表达量),RPM等。

对于,最生信的同学来说,无论是countFPKMTPM等值,都只是一个数字,仅仅只是一个数字,“不能表示任何意义”,我们只需要整体的趋势一样即。因此,无论是使用fpkm,或是tpm,都可以满足我们的需求。

但是,使用不同的表达量,最大的区别在于筛选的基因数量,这个是无法避免的。

FPKM

FPKM: FPKM的全称为Fragments Per Kilobase Million,Fragments Per Kilobase of exon model per Million mapped fragments(每千个碱基的转录每百万映射读取的fragments)。通俗讲,把比对到的某个基因的Fragment数目,除以基因的长度,其比值再除以所有基因的总长度。注意,这里的基因长度是指基因外显子的总长度。

RPKM

**RPKM: **Reads Per Kilobase of exon model per Million mapped reads (每千个碱基的转录每百万映射读取的reads);

RPM

RPM: RPM/CPM: Reads/Counts of exon model per Million mapped reads (每百万映射读取的reads)

公式:RPM = ExonMappedReads * 10^6 /TotalMappedReads

TPM

**TPM:**TPM的全称为Transcripts per million,Transcripts Per Kilobase of exon model per Million mapped reads (每千个碱基的转录每百万映射读取的Transcripts)


转换或计算

我们都知道,无论是fpkm,tpm,rpm值都是基于每个基因的count值与Gene Length进行计算。

计算的方法也很多,但是或出现:使用不同的计算方式,得到的结果并不一致。

这个问题,大家也会经常遇到,包括我自己。到这一步,就会很纠结,也会质疑自己,然后会“卡”很久。

木知,大家知否是这样的?

Code

我们也基于前期分享,在分享使用Count转换FPKM或是TPM值的代码。

我们的代码仅提供给大家参考。

Count To FPKM

  1. R语言Code
##'@计算FPKM
data <- read.table("./01.cucumber.mRNA.gene.count.txt",header = T, sep = "\t", row.names = 1)
head(data)
gene_length_kb <- data$Length /1000
expression_matrix <- data[, 2:ncol(data)]
head(expression_matrix)
# # 计算每列总Counts
total_counts <- colSums(expression_matrix)# 计算FPKM值
fpkm_matrix <- sweep(expression_matrix, 2, total_counts / 1e6, "/") # 除以总Reads
fpkm_matrix <- sweep(fpkm_matrix, 1, gene_length_kb, "/") # 除以基因长度
fpkm_matrix[1:5,1:10]

输入数据

  1. perl脚本
use strict;open A,"$ARGV[0]";<A>;
my @colsum;
while(<A>){chomp;my @line=split;shift @line;shift @line;for(0..$#line){$colsum[$_]+=$line[$_];}
}open B,"$ARGV[0]";
my $head=<B>;
chomp($head);
print "$head\n";
while(<B>){chomp;my @line=split;my $gene=shift @line;my $length=shift @line;print "$gene\t";for(my $i=0;$i<@line;$i++){my $fpkm=$line[$i]*1000000*1000/($colsum[$i]*$length);print "$fpkm\t";}print "\n";
}

运行

perl CountToFPKM.pl Input_count.txt > OutPut_FPKM.txt 

Count To TPM

##'@使用count计算tpm
count_df <- read.table("./01.cucumber.mRNA.gene.count.txt",header = T, sep = "\t", row.names = 1)
head(count_df)# TPM函数
calculate_tpm <- function(counts, lengths) {rpk <- counts / (lengths / 1000)  # RPK: count per kilobasescaling_factors <- colSums(rpk) / 1e6  # per million scaling factortpm <- sweep(rpk, 2, scaling_factors, "/")  # divide each column by its scaling factorreturn(tpm)
}# 准备数据
gene_lengths <- count_df$Length
count_matrix <- as.matrix(count_df[, -1])  # 排除长度列,仅保留 count 数据# 计算 TPM
tpm_matrix <- calculate_tpm(count_matrix, gene_lengths)# 查看结果
tpm_matrix[1:5,1:10]

关于Count值,直接使用featureCounts等软件即可获得。


OK,以上仅是自己的学习笔记,若是有不对的地方,请大家指出。

若是你有其他的方法,我们欢迎你的留言区进行留言讨论!


若我们的教程对你有所帮助,请点赞+收藏+转发,大家的支持是我们更新的动力!!


2024已离你我而去,2025加油!!

2024年推文汇总 (点击后访问)

2023年推文汇总 (点击后访问)

2022年推文汇总 (点击后访问)

往期部分文章

1. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析代码六

推荐大家购买最新的教程,若是已经购买以前WGNCA教程的同学,可以在对应教程留言,即可获得最新的教程。(注:此教程也仅基于自己理解,不仅局限于此,难免有不恰当地方,请结合自己需求,进行改动。)


2. 精美图形绘制教程

  • 精美图形绘制教程
  • 《R语言绘图专栏–50+图形绘制教程》

3. 转录组分析教程

  • 转录组上游分析教程[零基础]

  • 一个转录组上游分析流程 | Hisat2-Stringtie

  • Samll RNA上游分析

4. 转录组下游分析

  • 批量做差异分析及图形绘制 | 基于DESeq2差异分析

  • GO和KEGG富集分析

  • 单基因GSEA富集分析

  • 全基因集GSEA富集分析

小杜的生信筆記 ,主要发表或收录生物信息学教程,以及基于R分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

http://www.xdnf.cn/news/312.html

相关文章:

  • 邮件自动回复助手(Rasa/SMTP)实现教程
  • 【Triton 教程】triton_language.full
  • 代码随想录算法训练营第二十一天
  • 【认知觉醒】是什么? 如何做到 ? ( 持续更新ing )
  • 2021 CCF CSP-S2.廊桥分配
  • Arduino无线体感机器手——问题汇总
  • 土建施工员备考经验分享
  • o3和o4-mini的升级有哪些亮点?
  • JS反混淆网站
  • 使用MQTT协议实现VISION如何与Node-red数据双向通信
  • 每日算法-250418
  • 基于autoware1.14的实车部署激光雷达循迹,从建图、定位、录制轨迹巡航点、到实车运行。
  • linux查看及修改用户过期时间
  • Flutter_学习记录_状态管理之GetX
  • 从Archery到NineData:积加科技驱动数据库研发效能与数据安全双升级
  • C++:PTA L1-006 连续因子
  • AI Agent 元年,于 2025 开启
  • Python 高阶函数:日志的高级用法
  • Linux | I.MX6ULL 内核的编译(13)
  • npm i 安装遇到问题
  • 第五章----继承
  • 通俗理解MCP(Model Context Protocol)和A2A(Agent2Agent)
  • Java 序列化与反序列化终极解析
  • 每日两道leetcode
  • 4.17-4.18学习总结 多线程
  • STP协议中的四种端口状态
  • 熵权法+TOPSIS+灰色关联度综合算法(Matlab实现)
  • 在 Babylon.js 中实现智能异步资源加载队列管理
  • 力扣DAY56-59 | 热100 | 回溯:子集、电话号码的字母组合、组合总和、括号生成
  • 【裁判文书网DES3数据解密】逆向分析