如何将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
相关产品推荐
相关产品推荐

