零基础入门转录组数据分析——DESeq2差异分析

零基础入门转录组数据分析——DESeq2差异分析

目录

  • 零基础入门转录组数据分析——DESeq2差异分析
    • 1. 转录组分析基础知识
    • 2. DESeq2差异分析(Rstudio)
    • 3. 结语



1. 转录组分析基础知识

1.1 什么是转录组?
转录组(transcriptome) 是指在某一生理条件下,细胞内所有转录产物的集合,这些产物主要包括信使RNA(mRNA)、核糖体RNA(rRNA)、转运RNA(tRNA)以及非编码RNA(ncRNA)。其中,编码RNA可以通过转录和翻译过程产生蛋白质,从而直接调控生命活动;而非编码RNA具有调节基因表达的作用,它们可以对染色体结构、RNA加工修饰及稳定性、转录和翻译、甚至蛋白质的转运及稳定性产生影响。
简单来说:转录组是指一个活细胞在特定时间和环境下,所能转录出来的所有RNA的总和。因此,转录组分析就是为了了解基因的表达调控机制和功能。

1.2 差异分析是什么?为什么要做差异分析?
转录组差异分析是一种生物信息学分析方法,旨在比较不同样本或条件下转录组数据的差异,以揭示基因表达的变化。
简单来说:就是从上w个基因中找出不同样本中表达具有差异的基因,从而了解这些差异基因如何影响生物体的生理功能和疾病发生发展。

1.3 在R中对于转录组数据都有哪些差异分析的方法?
包括但不局限于DESeq2、limma和edgeR等。
DESeq2: 基于负二项分布模型进行差异分析,考虑了测序深度和基因长度对count数据的影响,因此在处理高度变异的基因时表现较好。DESeq2还提供了多种标准化方法,可以帮助减少批次效应和其他技术噪声。
limma: 最初是为微阵列数据设计的,后来也扩展到RNA-Seq数据分析。它使用线性模型进行差异分析,并且可以轻松处理多个因素和协变量。limma的优势在于其速度和灵活性,可以处理大量的基因和样本。
edgeR: 也是基于负二项分布模型进行差异分析,但与DESeq2不同的是,它使用了经验贝叶斯方法来估计分散参数,从而提高了差异检验的准确性和稳定性。edgeR在处理大型转录组数据集时表现出色,尤其是在识别低表达水平的差异基因方面。

1.4 三种方法对于输入数据的要求?
DESeq2: 需要原始的count矩阵(如通过htseq-count工具获得),并且只支持重复样品。
limma: 可以接受原始的count矩阵,但需要用户自行进行标准化(通常是log转换),并且也支持重复样品。
edgeR: 要求输入原始的count矩阵,既支持单个样品也支持重复样品。

1.5 在做转录组分析的时候该选用哪种方法?(关键)
GEO芯片数据——用limma差异分析,因为GEO芯片数据底层已经对数据做了标准化处理。
数据参考:零基础入门转录组分析——数据处理(GEO数据库——芯片数据))

GEO高通量数据——用DESeq2差异分析,因为可以获取到count数据。
数据参考:零基础入门转录组分析——数据处理(GEO数据库——高通量测序数据))

TCGA_count数据——用DESeq2差异分析,因为可以获取到count数据。
数据参考:零基础入门转录组分析——数据处理(TCGA数据库))

自测序数据——用DESeq2差异分析,因为可以获取到count数据。
(数据参考:零基础入门转录组分析——数据处理(自测序数据))

注:目前了解到的很少用到edgeR,一般来说有重复的样本通常limma和DESeq2就能解决(edgeR这种方法不做过多介绍)。



2. DESeq2差异分析(Rstudio)

本项目以GSE203346数据集(高通量测序数据)展示DESeq2差异分析过程
实验分组:疾病组(18例),对照组(19例)
R版本:4.2.2
R包:tidyverse,lance,DESeq2	

注:只要是能获取到count,并且有重复分组,都能用DESeq2做差异分析

数据处理过程参考之前的教程:零基础入门转录组分析——数据处理(GEO数据库——高通量测序数据)

设置工作空间:

rm(list = ls()) # 删除工作空间中所有的对象
setwd('/XX/XX/XX') # 设置工作路径
if(!dir.exists('./01_DEGs')){
  dir.create('./01_DEGs')
} # 判断该工作路径下是否存在名为01_DEGs的文件夹,如果不存在则创建,如果存在则pass
setwd('./01_DEGs/') # 设置路径到刚才新建的01_DEGs下

加载包:

library(tidyverse)
library(lance)
library(DESeq2)

导入处理好的表达矩阵:

dat <- read.csv('../../00_rawdata/GSE203346/dat.GSE203346_count.csv', check.names = F, row.names = 1)%>%lc.tableToNum()

dat如下图所示行名为基因symbol,列名为样本ID,表中数字是原始count(都是整数,并且不需要做任何处理
在这里插入图片描述
导入处理好的分组信息表:

# 分组信息
colData <- read.csv('../../00_rawdata/GSE203346/group.GSE203346.csv')
colData$group <- factor(colData$group, levels = c("control","disease"))
table(colData$group)
dat <- dat[, colData$sample] # 让表达矩阵的样本与分析信息表保持一致

colData如下图所示,第一列为样本ID,第二列为样本分组
在这里插入图片描述
先创建DESeqDataSet对象(这里会用到前面导入的 datcolData

dds <- DESeqDataSetFromMatrix(countData = dat, colData = colData, design = ~group)

dds如下图所示
在这里插入图片描述

  • design = ~group:这定义了实验的分组情况
  • colData = colData:这是一个数据框,包含样本的列信息(例如,样本名、组别等)。
  • assays = dat:count表达矩阵,行代表基因,列代表样本。

先筛选掉低表达的基因(为了尽量避免低表达基因导致的假阳性结果),之后估计每个样本的大小因子(大小因子是用于校正不同样本之间测序深度差异的一种方法,以确保在进行基因表达比较时能够公平地比较不同样本)。

dds <- dds[rownames(counts(dds)) > 1, ] # 过滤掉在任何样本中计数都小于或等于1的基因。
dds <- estimateSizeFactors(dds) # 估计每个样本的大小因子

estimateSizeFactors函数会根据每个样本的测序数据(通常是基因表达计数数据)来计算一个系数,这个系数反映了该样本相对于其他样本的测序深度,这个系数就是大小因子。

具体来说,DESeq2首先会对原始的表达量矩阵进行log转换,然后计算每个基因在所有样本中的均值。接下来,对于每个样本,它会将该样本中每个基因的表达量减去对应的所有样本中的均值,然后取中位数。最后,通过对这些中位数进行指数运算,得到每个样本的大小因子。

一旦计算出了每个样本的大小因子,就可以将其用于归一化原始的表达量数据。

归一化的目的:是消除不同样本之间由于测序深度差异而导致的偏差,使得不同样本之间的基因表达数据可以更加公平地进行比较和分析

之后通过DESeq函数用归一化后的数据进行差异表达分析

dds <- DESeq(dds)

最后提取差异表达分析的结果,并将其转换成数据框

res <- results(dds, contrast = c("group","control","disease"))
DEG <- as.data.frame(res) 


注:
results函数中contrast参数来指定比较时,第二个元素(在这个例子中是"control")通常是被用作参考组或基线组,而第三个元素(在这个例子中是"disease")则是用来和参考组进行比较的组。(换句话说,"control"是被比较的组,而"disease"是用来比较的组)

举个栗子:
如果某个基因在"disease"中的表达量高于在"control"中的表达量,那么它的log2倍数变化将是一个正值

DEG 如下图所示:

  • baseMean: 这一列显示的是每个基因在所有样本中的平均表达量,经过大小因子校正后的值。它反映了基因的总体表达水平。
  • log2FoldChange: 这一列展示的是基因表达的对数2倍变化值(log2 fold change),正值表示在disease中表达上调,负值表示在disease中表达下调。
  • lfcSE: 这一列是log2FoldChange的标准误差估计值,它提供了log2FoldChange估计的不确定性度量
  • stat: 这一列是基因表达变化的统计检验值,用于衡量基因表达变化的显著性。一个大的正值或负值表示基因表达的变化是否显著。
  • pvalue: 这一列显示的是基因表达变化的p值,用于评估观察到的效应(如基因表达的变化)是否可能是由于随机误差引起的,通常认为P < 0.05则结果是显著的。
  • padj: 这一列是调整后的p值,用于控制假阳性率(简单说就是矫正后的P值

在这里插入图片描述

给差异分析结果添加上下调标签

DEG$change <- as.factor(
  ifelse(DEG$pvalue < 0.05 & abs(DEG$log2FoldChange) >= 0.5,
         ifelse(DEG$log2FoldChange > 0.5,'Up','Down'),'Not')) 
table(DEG$change)
DEG_write <- cbind(symbol = rownames(DEG), DEG)

处理好的 DEG_write 如下图所示,除了新添加的symbol和change,其余与DEG一样,change列中: (筛选条件:|log2FoldChange| >= 0.5 & p.value < 0.05)

  • Up 表示上调基因
  • Down 表示下调基因
  • Not 表示未通过筛选的基因

在这里插入图片描述
筛选出表达具有差异的基因 (筛选条件:|log2FoldChange| >= 0.5 & p.value < 0.05)

sig_diff <- subset(DEG, DEG$pvalue < 0.05 & abs(DEG$log2FoldChange) >= 0.5)
sig_diff_write <- cbind(symbol = rownames(sig_diff), sig_diff)

sig_diff_write 与DEG_write的差别就是少了那些没有差异的基因。

最后,保存差异分析的结果:

write.csv(DEG_write, file = paste0('DEG_all.csv'))
write.csv(sig_diff_write, file = paste0('DEG_sig.csv'))


3. 结语

以上就是DESeq2差异分析的所有过程,如果有什么需要补充或不懂的地方,大家可以私聊我或者在下方评论。

如果觉得本教程对你有所帮助,点赞关注不迷路!!!


  • 目录部分跳转链接:零基础入门生信数据分析——导读

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:【Keras机器学习实践要点】(八)—— 在 TensorFlow 中从头开始编写训练循环

目录 介绍 导入 第一个端对端示例 指标的低级处理 低层次处理模型跟踪的损失 总结 端到端示例&#xff1a;从零开始的 GAN 训练循环 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客…

使用node爬取视频网站里《龙珠》m3u8视频

1. 找到视频播放网站 百度一下 龙珠视频播放 精挑细选一个可以播放的网站。 如&#xff1a;我在网上随便找了一个播放网站&#xff0c;可以直接在线播放 https://www.xxx.com/play/39999-1-7.html 这里不具体写视频地址了&#xff0c;大家可以自行搜索 2.分析网页DOM结…

进程间的通信方式

进程间的通信方式 进程间的通信方式管道&#xff08;pipe&#xff09;命名管道&#xff08;named pipe&#xff09;信号&#xff08;signal&#xff09;消息队列&#xff08;message queue&#xff09;共享内存&#xff08;shared memory&#xff09;信号量&#xff08;semapho…

回溯dfs和分支限界bfs

一&#xff1a;拓扑排序 207. 课程表 这道题说白了就是在有向图中找环 拓扑排序实际上应用的是贪心算法。 贪心算法简而言之&#xff1a;每一步最优&#xff0c;全局就最优。 每一次都从图中删除没有前驱的顶点&#xff0c;这里并不需要真正的删除操作&#xff0c;通过设置入度…

Solana 2024 投资新风口:挖掘 DeFi、硬件开发与交易创新

将区块链的技术红利带给所有用户&#xff0c;Solana 自 2017 年诞生以来就致力于赋予开发者、消费者、投资人等各路人士的优越应用体验。在“以太坊杀手”林立的公链竞争阶段&#xff0c;Solana 凭借高性能公链的独特定位&#xff0c;朝着去中心化、安全性、低成本的目标不断精…

SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)

文章目录 Direct 交换机特点实战声明交换及其队列(以注解方式)发消息 应用 上一篇文章中的 Fanout 模式&#xff0c;一条消息&#xff0c;会被所有订阅其交换机的队列都消费。 但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到 Dir…

蓝桥杯day14刷题日记

P8707 [蓝桥杯 2020 省 AB1] 走方格 思路&#xff1a;很典型的动态规划问题&#xff0c;对于偶数格特判&#xff0c;其他的正常遍历一遍&#xff0c;现在所处的格子的方案数等于左边的格子的方案数加上上面格子的方案数之和 #include <iostream> using namespace std; …

WPF 路由事件 数据驱动 、Window 事件驱动

消息层层传递&#xff0c;遇到安装有事件侦听器的对象&#xff0c;通过事件处理器响应事件&#xff0c;并决定事件是否继续传递&#xff1b; 后置代码中使用AddHandler方法设置事件监听器&#xff0c;该方法的 第一个参数是指定监听的路由事件类型对象&#xff0c; 第二个参数…

企业数据资产管理的战略价值与实施策略

一、引言 数据资产不仅记录了企业的历史运营情况&#xff0c;更能够揭示市场的未来趋势&#xff0c;为企业的决策提供有力支持。因此&#xff0c;如何有效地管理和利用数据资产&#xff0c;已经成为企业竞争力的重要体现。本文将探讨企业数据资产管理的战略价值与实施策略&…

新能源充电桩站场视频汇聚系统建设方案及技术特点分析

随着新能源汽车的普及&#xff0c;充电桩作为新能源汽车的基础设施&#xff0c;其安全性和可靠性越来越受到人们的关注。为了更好地保障充电桩的安全运行与站场管理&#xff0c;TSINGSEE青犀&触角云推出了一套新能源汽车充电桩视频汇聚管理与视频监控方案。 方案采用高清摄…

SMART PLC温度变化率计算功能块(算法框图+代码)

SMART PLC文章控制专用PID请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/136702516https://rxxw-control.blog.csdn.net/article/details/136702516 1、监控下温度变化率 2、温度变化率计算功能块 3、计算周期到达

PCA+DBO+DBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper!

PCADBODBSCN聚类&#xff0c;蜣螂优化算法DBO优化DBSCN聚类&#xff0c;适合学习&#xff0c;也适合发paper&#xff01; 一、蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optim…

BGP实训

BGP基础配置实训 实验拓扑 注&#xff1a;如无特别说明&#xff0c;描述中的 R1 或 SW1 对应拓扑中设备名称末尾数字为 1 的设备&#xff0c;R2 或 SW2 对应拓扑中设备名称末尾数字为2的设备&#xff0c;以此类推&#xff1b;另外&#xff0c;同一网段中&#xff0c;IP 地址的主…

Harbor部署

Harbor部署 下载和安装 github下载地址&#xff1a;https://github.com/goharbor/harbor/releases 解压和配置 # 解压tgz包 tar -zxvf harbor-offline-installer-v2.10.1.tgz # 进入目录后进行复制配置文件 cd harbor/ # 创建一个配置文件 cp harbor.yml.tmpl harbor.yml …

RabbitMQ基础笔记

视频链接&#xff1a;【黑马程序员RabbitMQ入门到实战教程】 文章目录 1.初识MQ1.1.同步调用1.2.异步调用1.3.技术选型 2.RabbitMQ2.1.安装2.1.1 Docker2.1.1 Linux2.1.1 Windows 2.2.收发消息2.2.1.交换机2.2.2.队列2.2.3.绑定关系2.2.4.发送消息 2.3.数据隔离2.3.1.用户管理2…

金三银四面试题(七):JVM常见面试题(1)

JVM会有许多零碎但是却很高频的基础考题。牢记这些&#xff0c;才能保证不在面试中落后于人。 说说对象分配规则 这也是之前面试腾讯时候被问到的问题&#xff1a;请介绍JVM如何分配对象&#xff1f; 对象优先分配在Eden 区&#xff0c;如果Eden 区没有足够的空间时&#xf…

nysm:一款针对红队审计的隐蔽型后渗透安全测试容器

关于nysm nysm是一款针对红队审计的隐蔽型后渗透安全测试容器&#xff0c;该工具主要针对的是eBPF&#xff0c;能够帮助广大红队研究人员在后渗透测试场景下保持eBPF的隐蔽性。 功能特性 随着基于eBPF的安全工具越来越受社区欢迎&#xff0c;nysm也应运而生。该工具能保持各种…

简单线程池的实现

线程池的代码可以写的很复杂&#xff0c;这里就稍微简单一些 首先来看一下线程池的原则&#xff0c;下面的大框是服务器&#xff0c;而在服务器中维护一个任务队列。 然后在server中预先创建一批线程&#xff0c;这批线程和任务队列合在一起只用向外界提供一个入队列的接口。 …

【php程序开发从入门到精通】——搭建PHP开发环境

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

搜索与图论——Floyd算法求最短路

floyd算法用来求多源汇最短路 用邻接矩阵来存所有的边 时间复杂度O(n^3) #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N 20010,INF 1e9;int n,m,k; int g[N][N];void floyd(){for(int k 1;k < n;k ){f…