You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将cBioPortal中LUSC的RSEM归一化RNA-seq数据转为TPM值?

将cBioPortal的TCGA LUSC RSEM基因表达数据转换为TPM

首先明确:cBioPortal下载的data_mrna_seq_v2_rsem.txt中,rsem.genes.normalized_results通常是FPKM(或上四分位数归一化的FPKM),但最准确的TPM转换应该基于原始RSEM期望计数(expected count)+ 基因长度信息。以下是两种可行方案:

方法一:基于原始期望计数(推荐)

步骤1:获取基因平均转录本长度

RSEM计算表达量时使用的是基因的加权平均转录本长度,你需要对应数据:

  • 可从Ensembl/NCBI下载参考基因组GTF文件(如hg19/hg38),提取转录本长度后计算基因平均值;
  • 用R的biomaRt包直接从数据库获取:
library(biomaRt)
mart <- useMart("ensembl", dataset = "hsapiens_gene_ensembl")
# 替换为你数据中的基因ID列(如Ensembl ID)
gene_ids <- unique(read.delim("data_mrna_seq_v2_rsem.txt", skip=2)$ensembl_gene_id)
gene_lengths <- getBM(attributes = c("ensembl_gene_id", "transcript_length"),
                      filters = "ensembl_gene_id", values = gene_ids, mart = mart)
# 计算每个基因的平均转录本长度
avg_length <- aggregate(transcript_length ~ ensembl_gene_id, data = gene_lengths, mean)

步骤2:读取表达数据

# 跳过文件开头的注释行(cBioPortal文件通常有2行注释)
expr_data <- read.delim("data_mrna_seq_v2_rsem.txt", skip = 2)
# 提取原始期望计数列(列名含"expected_count")
count_matrix <- expr_data[, grepl("expected_count", colnames(expr_data))]
# 保留基因ID列
gene_info <- expr_data[, c("ensembl_gene_id", "Hugo_Symbol")]

步骤3:计算TPM

# 合并基因长度数据
merged_data <- merge(gene_info, avg_length, by = "ensembl_gene_id")
merged_counts <- cbind(merged_data, count_matrix)

# 计算RPK:count / (基因长度/1000)(长度单位转换为kb)
rpk_matrix <- merged_counts[, 4:ncol(merged_counts)] / (merged_counts$transcript_length / 1000)

# 计算每个样本的RPK总和
sum_rpk <- colSums(rpk_matrix, na.rm = TRUE)

# 计算TPM:(RPK / 样本RPK总和) * 1e6
tpm_matrix <- t(t(rpk_matrix) / sum_rpk) * 1e6

# 整理最终结果
final_tpm <- cbind(merged_data[, c("ensembl_gene_id", "Hugo_Symbol")], tpm_matrix)

方法二:直接从FPKM转换(仅适用于未做额外归一化的FPKM)

如果文件中只有FPKM值(无原始count),可通过以下公式转换:

TPM_i = (FPKM_i / 样本内所有基因FPKM总和) × 10^6

R代码实现:

expr_data <- read.delim("data_mrna_seq_v2_rsem.txt", skip = 2)
# 提取FPKM列(列名含"FPKM")
fpkm_matrix <- expr_data[, grepl("FPKM", colnames(expr_data))]

# 计算每个样本的FPKM总和
sum_fpkm <- colSums(fpkm_matrix, na.rm = TRUE)

# 转换为TPM
tpm_matrix <- t(t(fpkm_matrix) / sum_fpkm) * 1e6

# 整理结果
final_tpm <- cbind(expr_data[, c("ensembl_gene_id", "Hugo_Symbol")], tpm_matrix)

关键注意事项

  • 基因ID一致性:确保表达数据与长度数据的基因ID类型完全匹配(如均为Ensembl ID或HGNC符号);
  • 缺失值处理:若存在基因长度缺失,建议直接过滤该基因,避免偏差;
  • 归一化影响:如果FPKM经过上四分位数、分位数等归一化处理,直接转换会引入误差,优先选择方法一。

内容的提问来源于stack exchange,提问作者Mahanish Jung Thapa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:43:18