FPKM和TPM的概念及计算脚本

转录组 转录组 763 人阅读 | 0 人回复 | 2024-08-29

转录组分析中,将原始的基因或转录本计数(counts)转换为归一化的表达量如FPKM(每千碱基每百万片段数)或TPM(每百万转录本数)是常见的数据处理步骤,以便进行跨样本比较。首先介绍一下FPKM和TPM:

1. FPKM (Fragments Per Kilobase of transcript per Million mapped reads)

FPKM是一种考虑了转录本长度和测序深度的标准化方法,用于比较不同样本中基因的表达水平。计算公式为:

FPKM=countlength of transcript in kb×total mapped reads in millionsFPKM=length of transcript in kb×total mapped reads in millionscount

计算步骤:

  1. 获取每个基因的count值**:这是直接从RNA-seq数据的对齐结果中得到的原始计数。**
  2. 计算转录本长度(以千碱基为单位):通常,这是指转录本的外显子部分的总长度。
  3. 计算样本的总映射读数(以百万为单位)。
  4. 应用公式**:将每个基因的count除以该基因转录本长度(千碱基)和总映射读数(百万)的乘积。**

2. TPM (Transcripts Per Million)

TPM是另一种标准化方法,其特点是先对每个基因的计数进行长度归一化,然后再进行总计数的归一化,使得不同样本间的比较更为直观。

计算步骤:

  1. 计算每个基因的归一化计数**:将每个基因的count除以其转录本的长度(千碱基),得到每千碱基的计数。**
  2. 计算所有基因的归一化计数之和**。**
  3. 将每个基因的归一化计数除以步骤2中的总和**,然后乘以10^6,得到TPM值。**

这两种方法的主要区别在于归一化的顺序。FPKM是先用总读数归一化,然后再考虑转录本长度,而TPM是先考虑转录本长度归一化,再进行总归一化。TPM的优点是不同样本中的TPM值可以直接相加比较,而FPKM则需要额外的步骤来确保比较的公平性。

3 转化过程

(1)数据准备

输入文件为.csv格式

第一行第二列一定为TranscriptLength

(2)计算脚本

记得替换输入文件和输出文件

# 安装和加载edgeR包
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("edgeR")
library(edgeR)

# 从CSV文件中读取数据
gene_data <- read.csv("C:/Users/cuibaofeng/Desktop/gene_data.csv", row.names = 1)

# 提取转录本长度和count数据
transcript_lengths_kb <- gene_data$TranscriptLength / 1000
counts <- as.matrix(gene_data[, -1])  # 排除第一列(转录本长度)

# 计算FPKM
total_mapped_reads <- colSums(counts)  # 总映射读数
fpkm <- sweep(counts, 1, transcript_lengths_kb, "/")  # 正规化每千碱基的计数
fpkm <- sweep(fpkm, 2, total_mapped_reads / 1e6, "/")  # 正规化每百万映射读数

# 计算TPM
length_normalized <- sweep(counts, 1, transcript_lengths_kb, "/")
total_length_normalized <- colSums(length_normalized)
tpm <- sweep(length_normalized, 2, total_length_normalized, "/") * 1e6

# 将FPKM和TPM结果保存到CSV文件
write.csv(fpkm, "C:/Users/cuibaofeng/Desktop/fpkm_results.csv")
write.csv(tpm, "C:/Users/cuibaofeng/Desktop/tpm_results.csv")

微信扫一扫分享文章

+13
无需登陆也可“点赞”支持作者

最近谁赞过

分享到:
评论

使用道具 举报

83 积分
4 主题
+ 关注
热门推荐