admin 发表于 2024-8-29 10:54:19

FPKM和TPM的概念及计算脚本

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

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

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

**FPKM**=**count**length of transcript in kb**×**total mapped reads in millions**FPKM**=**length of transcript in kb**×**total mapped reads in millions**count

**计算步骤:**

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**

![](data/attachment/forum/plugin_zhanmishu_markdown/202408/43ae17a45beefd30e18cf3f214adf584_1724900046_3477.jpg)

**(2)计算脚本**

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

```r
# 安装和加载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")
```
页: [1]
查看完整版本: FPKM和TPM的概念及计算脚本