转录组分析中,将原始的基因或转录本计数(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
计算步骤:
- 获取每个基因的count值**:这是直接从RNA-seq数据的对齐结果中得到的原始计数。**
- 计算转录本长度(以千碱基为单位):通常,这是指转录本的外显子部分的总长度。
- 计算样本的总映射读数(以百万为单位)。
- 应用公式**:将每个基因的count除以该基因转录本长度(千碱基)和总映射读数(百万)的乘积。**
2. TPM (Transcripts Per Million)
TPM是另一种标准化方法,其特点是先对每个基因的计数进行长度归一化,然后再进行总计数的归一化,使得不同样本间的比较更为直观。
计算步骤:
- 计算每个基因的归一化计数**:将每个基因的count除以其转录本的长度(千碱基),得到每千碱基的计数。**
- 计算所有基因的归一化计数之和**。**
- 将每个基因的归一化计数除以步骤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")
|