count格式的数据转换(count to FPKM,count to TPM) 【GEO数据库】

news2024/9/23 15:28:29

在正式分析之前,对于数据的处理是至关重要的,这种重要性是体现在很多方面,其中有一点是要求分析者采用正确的数据类型。

对于芯片数据,原始数据进行log2处理之后可以进行很多常见的分析,比如差异分析、热图、箱线图、PCA分析、生存分析、模型构建,聚类分析和相关性分析等。

对于转录组数据,在上述的常见分析中只有差异分析时需要采用count值其他的分析是需要采用log2后的cpm,tpm,fpkm,rpkm数据

count数据转换为cpm数据非常简单

# exprSet是count表达矩阵
# 一句代码搞定
exprSet = log2(edgeR::cpm(exprSet)+1)

比较难的就是count数据转换为tpm数据,因此搬运了常规的流程和R包的方法,做个对比

首先要去获取基因长度文件,因为后续需要用这个数据去矫正基因长度。

网址:https://gdc.cancer.gov/about-data/gdc-data-processing/gdc-reference-files

1.Count值

对给定的基因组参考区域,计算比对上的read数,又称为raw count(RC)。在RNAseq数据中,raw reads count一般是指mapped到基因外显子区域的reads数目。

2.RPKM/FPKM

RPKM

RPKM(reads per kilobase per million),对测序深度和长度做了一个矫正。用于单端测序数据。

RPKM = (gene_read_count / (total_count*gene_length) * 10^6 * 10^3

基因count除以总read count,除以gene长度。然后避免数值太小,根据测序深度大小乘10^6, 基因长度就乘以一个10^3。

FPKM

RPKM(fragments per kilobase per million) 用于双端数据,一个fragment是一对reads。

故FPKM = RPKM / 2

FPKM(Fragment Per Kilobase of transcript, per Million mapped reads):每千碱基片段每百万映射读取的 reads 数),是针对双端测序的一个normalization方法。通常来讲,当paired reads同时匹配到一个位置,记为fragment(注:即便是双端测序,RPKM也不完全是FPKM的2倍)。

RPKM: Reads Per Kilobase of exon model per Million mapped reads (每千个碱基的转录每百万映射读取的reads)

RPKM/FPKM方法:10^3标准化了基因长度的影响,10^6标准化了测序深度的影响。FPKM方法与RPKM类似,主要针对双末端RNA-seq实验的转录本定量。在双末端RNA-seq实验中,有左右两个对应的read来自相同的DNA片段。在进行双末端read进行比对时,来自同一DNA片段的高质量的一对或单个read可以定位到参考序列上。为避免混淆或多次计数,统计一对或单个read比对上的参考序列片段(Fragment),来计算FPKM,计算方法同RPKM。

RPKM与FPKM的区别:RPKM值适用于单末端RNA-seq实验数据,FPKM适用于双末端RNA-seq测序数据。

3.TPM (Transcript per million)

TPM

TPM(transcript per million), 基因FPKM 占总的FPKM的比例, TPM衡量基因在样本中的相对表达量,对同一个基因不同样本,其FPKM可能相同,但相对所有基因而言,其在不同样本中可能所占比例不同。

TPM = gene_fpkm / total_fpkm * 10^6

TPM(Transcripts Per Million) 是一种常用的基因表达量归一化方法,它将基因的表达量调整为每百万条转录本的数量。TPM 值考虑了基因的长度和测序深度,通过将每个基因的 Counts 值除以其长度,并进行适当的归一化,将基因的表达量转换为每百万转录本数,以便进行样本间的比较和分析。TPM 值消除了样本间测序深度的差异和基因长度的影响。

TPM的计算方法也同RPKM/FPKM类似,首先使用式2计算每个基因的表达值,去除基因长度的影响。随后计算每个基因的表达量的百分比,最后再乘以10^6,TPM可以看作是RPKM/FPKM值的百分比。

直接说事情,我有一个基因A,它在这个样本的转录组数据中被测序而且mapping到基因组了 5000个的reads,而这个基因A长度是10K,我们总测序文库是50M,所以这个基因A的RPKM值是 5000除以10,再除以50,为10. 就是把基因的reads数量根据基因长度和样本测序文库来normalization 。那么它的TPM值是多少呢?这个时候这些信息已经不够了,需要知道该样本其它基因的RPKM值是多少,加上该样本有3个基因,另外两个基因的RPKM值是5和35,那么我们的基因A的RPKM值为10需要换算成TPM值就是 1,000,000 *10/(5+10+35)=200,000,看起来是不是有点大呀,其实主要是因为我们假设的基因太少了,一般个体里面都有两万多个基因的,总和会大大的增加,这样TPM值跟RPKM值差别不会这么恐怖的。

TPM与RPKM/FPKM的区别:从计算公式来说,唯一的不同是计算操作的顺序,TPM是先去除了基因长度的影响,而RPKM/FPKM是先去除测序深度的影响,具体可看这篇博文,有计算步骤的详细说明;TPM实际上改进了RPKM/FPKM方法在跨样品间定量的不准确性。

TPM的使用范围与RPKM/FPKM相同。

#设置工作目录左边/,右边\\

setwd("D:\\R_Script")

#安装↓这个包#install.packages("tidyverse")
library(tidyverse)

 #读gtf文件,计算所有外显子的长度

gtf <- read_tsv("human.gtf", comment="#", col_names=c('chr','source','type','start','end','score','strand','phase','attributes')) %>% filter(type=='exon') %>% mutate(len = end - start + 1) %>% select(start, end, attributes,len)

#计算基因的非冗余外显子的长度,获得有效基因长度

gtf$attributes %>% str_extract(., "gene_id \"[\\w|\\.]+") %>% str_remove(., "gene_id \"") -> gtf$gene_id

gtf %>% select(start, end, gene_id, len) %>% distinct(start,end,gene_id, .keep_all = T) %>% select(gene_id,len) %>% group_by(gene_id) %>% summarise(est_len=sum(len)) -> gtf

#储存基因长度文件备用

write.csv(gtf, "gene_length.csv", row.names = TRUE) 

#读取文件:1.自己的count.txt矩阵;2.上面生成的基因长度

rt <-read.table("GSEXXXXXX.txt", row.names = 1,header = TRUE,sep="\t")

str(rt)

eff_length <- read.csv("gene_length.csv", row.names = 1, header = T)

rownames(eff_length)<-eff_length$gene_id

rownames(eff_length) <- do.call(rbind,strsplit(as.character(eff_length$gene_id),'\\.'))[,1]eff_length[1:3,] 

#读取基因长度文件

gen<- intersect(rownames(rt), rownames(eff_length))

rt<- rt[gen,]

eff_length<- eff_length[gen, ] 

#定义函数

countToFpkm <- function(counts, effLen) {
  N <- sum(counts)
  exp(log(counts) + log(1e9) - log(effLen) - log(N))
}
##count转换为FPKM值

fpkms <- as.data.frame(apply(rt, 2, countToFpkm, effLen = eff_length$est_len))

write.table(fpkms, "data_fpkms.txt", sep="\t", quote=F, row.names=T) 

##FPKM转TPM

fpkmToTpm <- function(fpkm){ exp(log(fpkm) - log(sum(fpkm)) + log(1e6))}tpms <- apply(fpkms,2,fpkmToTpm) 

#!!!检查,所有样本的总和必须一样,10的6次方,才代表转化成功

colSums(tpms)

range(tpms) 

 

 

#保存tpm文件

write.table(tpms, "GSEXXXXXX_tpms.txt", sep="\t", quote=F, row.names=T) 

#log化

boxplot(tpms,las=2)

tpms <- log2(tpms+1)

boxplot(tpms,las=2) 

#保存log化文件write.table(tpms, "GSEXXXXXX_tpms_log2.txt", sep="\t", quote=F, row.names=T)

GEO中有些数据集直接上传的count文件,我们目前较多拿来分析的都是FPKM或者TPM格式 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux下一切皆文件,如何理解?

linux下一切皆文件&#xff0c;不管你有没有学过linux&#xff0c;都应该听过这句话&#xff0c;就像java的一切皆对象一样。 今天就来看看它的真面目。 你记住了&#xff0c;只要一个竞争退出它的PCB要被释放文件名&#xff0c;客服表也要被释放。那么&#xff0c;指向这个文件…

基于大数据的电信诈骗行为可视化系统含预测研究【lightGBM,XGBoost,随机森林】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍 电信诈骗预测与分析系统项目概述系统架构详细功能描述1. 数据预处理2. 数据可视化与分析3. 机器学习预测4. 系统集成与用户界面 技术亮点应用价值未来展望lightGBMXGBoost随机森林…

猫头虎分享:什么是信创体系?

猫头虎分享&#xff1a;什么是信创体系? 猫头虎技术团队&#xff1a;深入解析信创体系 引言&#xff1a;为什么信创体系是未来发展的关键&#xff1f; 大家好&#xff0c;我是猫头虎&#xff0c;今天我们来聊一聊科技领域的热议话题——信创体系。随着国内外信息技术产业的迅…

分布式云扩展 AI 边缘算力,助力用户智能化创新

近期&#xff0c;AI 创新圈再次发布重磅产品更新。OpenAI 全新旗舰版多模态模型 GPT-4o 横空出世&#xff0c;其打通文本、图像、视频的富媒体理解能力以及敏捷的智能化对话&#xff0c;将 AI 助手的人性化表达效果&#xff0c;提升至更高水平。 ​ 从技术源头来看&#xff0c…

栈OJ题——有效的括号

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 有效的括号 题目描述&#xff1a;给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。括号匹配。 二、…

《大模型应用开发极简入门》学习成为善用 AI 的人!看完懂得90%的大模型!{含pdf版电子书}

&#x1f4d6;《大模型应用开发极简入门&#xff1a;基于GPT-4与ChatGPT》 真心建议学习大模型的朋友都去看看这本书&#xff0c;作为一本应用开发入门书&#xff0c;在豆瓣评分好评不断&#xff0c;其中知识点有不少值得深入研究的领域&#xff0c;适合小白初学者阅读学习的&…

【Google Maps JavaScript API】详解地图本地化(Localizing the Map)

文章目录 一、地图本地化概述1. 什么是地图本地化&#xff1f;2. 为什么需要地图本地化&#xff1f; 二、如何实现地图本地化&#xff1f;1. 准备工作2. 编写 HTML 文件3. 初始化地图 三、详细代码解析1. HTML 部分2. JavaScript 部分 四、如何在本地运行示例代码&#xff1f;五…

Spring Boot如何压缩Json并写入redis?

1.为什么需要压缩json&#xff1f; 由于业务需要&#xff0c;存入redis中的缓存数据过大&#xff0c;占用了10G的内存&#xff0c;内存作为重要资源&#xff0c;需要优化一下大对象缓存&#xff0c;采用gzip压缩存储&#xff0c;可以将 redis 的 kv 对大小缩小大约 7-8 倍&…

Jmeter录制脚本(不推荐,因为有大量冗余)

1、以百度举例 2、选择“Requests Filtering”&#xff0c;在“包含模式”中填入“.(baidu\.com).”用以过滤非http://baidu.com的请求&#xff1b; 同时在“排除模式”中填入“(?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|woff|woff2|htm|html).”用以过滤js、图片、html等…

postman请求设置

postman请求设置 1、请求参数&#xff0c;只能是none、for-data、x-www...、raw等中的一个&#xff0c;不能多个。2、请求头类型3、案例4、测压 1、请求参数&#xff0c;只能是none、for-data、x-www…、raw等中的一个&#xff0c;不能多个。 2、请求头类型 根据请求头&#x…

用Python分析定性变量之间的相关性_对应分析模板

对应分析是一种多元统计分析方法&#xff0c;主要用于分析定性变量构成的列联表&#xff0c;揭示变量之间的关系。它通过将列联表中的数据转换为点的形式&#xff0c;在低维空间中表示出来&#xff0c;从而实现数据的可视化。这种方法特别适用于有多个类别的定性变量分析&#…

如何将开发工具设置成滚动鼠标改变字体大小

就在刚刚与温州那边技术开会&#xff0c;温州那边技术提出&#xff1a;字体太小&#xff0c;代码看不清&#xff0c;需要将字体放大。然后让我将IDE设置成按住键盘的Ctrl滚动鼠标&#xff0c;可以放大字体大小。。。顿时间的小小尴尬。下面我来记录一下究竟是怎么操作的&#x…

Excel 导入和导出--前后端整合

文章目录 Excel基础Easy Excel导出会员数据导入会员数据 前端代码:代码解析总结组件简介详细解释总结 用来操作excel文件的。银行网银系统导出交易明细数据、各种业务系统导出excel报表数据、批量导入业务数据。 Excel基础 **工作簿 workbook**就是一个文件工作表 sheet属于…

element的el-date-picker组件实现只显示年月日时分,不显示秒

需求&#xff1a;使用element的el-date-picker组件&#xff0c;只显示时分&#xff0c;不消失秒 效果&#xff1a; 解决方法&#xff1a; <el-date-pickerv-model"ruleForm.startTime"type"datetime"placeholder"开始时间"format"yyyy-…

萌化人心!AI宠物视频,1条视频涨粉1W+,千万级播放量(附教程)

大家晚上好&#xff0c;今天给大家分享一个创意玩法—用AI 生成超萌动物&#xff0c;打造宠物互动虚拟场景。 这种视频内容非常受欢迎&#xff0c;吸引了大量观众。某音上有位博主通过这种创新方式迅速构建了AI宠物系列账号&#xff0c;短时间内便积累了大量粉丝。 比如这条视…

【前端】控制台彩蛋彩色键盘

效果如图 代码如下 const colors {reset: "\x1b[0m",red: "\x1b[31m",green: "\x1b[32m",yellow: "\x1b[33m",blue: "\x1b[34m",magenta: "\x1b[35m",cyan: "\x1b[36m",white: "\x1b[37m"…

神经网络算法 - 一文搞懂 Softmax 函数

本文将从Softmax的本质、Softmax的原理、Softmax的应用三个方面&#xff0c;带您一文搞懂 Softmax 函数。 Softmax激活函数 Softmax一般用来作为神经网络的最后一层&#xff0c;用于多分类问题的输出。其本质是一种激活函数&#xff0c;将一个数值向量归一化为一个概率分布向量…

《机器学习》 SVM支持向量机 推导、参数解析、可视化实现

目录 一、SVM支持向量机 1、什么是SVM 例如&#xff1a; 2、SVM的主要特点是&#xff1a; 二、SVM方程 1、超平面方程 2、标签问题 3、决策函数&#xff1a; 符号函数&#xff1a; 整合&#xff1a; 4、距离问题 1&#xff09;点到直线距离 2&#xff09;点到平面…

Python使用Tesseract OCR识别文字

Tesseract-OCR是一款由Google维护的开源光学字符识别&#xff08;OCR&#xff09;引擎&#xff0c;它能够从图像中识别出文本&#xff0c;并将其转换为可编辑的文本格式。以下是关于Tesseract-OCR的详细介绍&#xff1a; 一、背景与发展 起源&#xff1a;Tesseract最初是惠普…

5G Hz WiFi 频段划分

5GHz WiFi频段被划分为多个Band&#xff0c;这主要是基于国际通信标准和各国监管机构的规定。在常见的划分中&#xff0c;5GHz频段被分为以下几个部分&#xff1a; Band 1 (U-NII-1): 频率范围为5.15~5.25GHz&#xff0c;带宽为100MHz。Band 2 (U-NII-2 或 U-NII-2A/2C): 通常…