RNA-seq——四、根据序列比对结果筛选差异基因

2023-11-20


写在前面——经过前面的一系列分析,我们得到了几个counts数据,接下来就需要根据这些数据来进行分析。本文使用Rstudio,从序列比对结果中筛选出差异基因,目的是(根据不同基因的表达量)找出实验组与对照组的差异。

本文使用的数据见RNA-seq——上游分析练习(数据下载+hisat2+samtools+htseq-count)
参考:
RNA-seq(6): reads计数,合并矩阵并进行注释
RNA-seq(7): DEseq2筛选差异表达基因并注释(bioMart)

1. 合并矩阵并进行注释

rm(list = ls())
options(stringsAsFactors = FALSE)

# 读取数据
control_1 <- read.table("SRR3589959.count", col.names = c("gene_id", "control_1"))
control_2 <- read.table("SRR3589961.count", col.names = c("gene_id", "control_2"))
treat_1 <- read.table("SRR3589960.count", col.names = c("gene_id", "treat_1"))
treat_2 <- read.table("SRR3589962.count", col.names = c("gene_id", "treat_2"))

# 将数据合并
raw_count <- merge(merge(control_1, control_2, by = "gene_id"), 
                   merge(treat_1, treat_2, by = "gene_id"))
# head(raw_count)

# 去除无用信息
raw_count_filt <- raw_count[-1:-5,]

# 修改行名
ENSEMBL <- gsub("\\.\\d*", "", raw_count_filt$gene_id)
row.names(raw_count_filt) <- ENSEMBL

处理完的raw_count_filt:
在这里插入图片描述

# 将ensembl_gene_id转化为gene_symbol
library(biomaRt)
library(curl)

my_ensembl_gene_id <- row.names(raw_count_filt)

mart <- useDataset("mmusculus_gene_ensembl", useMart("ensembl"))
mms_symbols <- getBM(attributes = c("ensembl_gene_id", "external_gene_name", 
                                    "description"), 
                     filters = "ensembl_gene_id", values = my_ensembl_gene_id, 
                     mart = mart)

# 方便按照ensembl_gene_id来合并两个数据集
raw_count_filt <- cbind(ENSEMBL, raw_count_filt)
colnames(raw_count_filt)[1] <- c("ensembl_gene_id")

# 合并
readcount <- merge(raw_count_filt, mms_symbols, by = "ensembl_gene_id")

# 保存
write.csv(readcount, file = "readcount.csv")

# 查看Akap8的表达情况
readcount[readcount$external_gene_name=="Akap8",]

# 整理数据,方便后续使用
rownames(readcount) <- readcount$ensembl_gene_id
mycounts <- readcount[,3:6]
write.csv(mycounts, file = "mycounts.csv")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整理好的数据包含Ensembl ID以及每组的基因比对结果。

2. 筛选差异基因(DESeq2)

rm(list = ls())

library(tidyverse)
library(DESeq2)

# 读取上一步整理好的数据
mycounts <- read.csv("mycounts.csv")
rownames(mycounts) <- mycounts$X
mycounts <- mycounts[,-1]

# 设置factor
condition <- factor(c(rep("control", 2), rep("treat", 2)), levels = c("control", "treat"))

# 生成colData
colData <- data.frame(row.names = colnames(mycounts), condition)

# 使用DESeq2分析
dds <- DESeqDataSetFromMatrix(mycounts, colData, design = ~ condition)
dds <- DESeq(dds)

res <- results(dds, contrast = c("condition", "control", "treat"))
res <- res[order(res$pvalue),]
# summary(res)
# table(res$padj<0.05)
write.csv(res, file = "all_results.csv")

# 筛选差异基因
# P和log2FC的值可以自己设置,值不同,筛选出来的差异基因数目也不同
diff_gene_deseq2 <- subset(res, padj < 0.05 & abs(log2FoldChange) >1)
write.csv(diff_gene_deseq2, file = "DEG_treat_vs_control.csv")

# 将Ensembl ID转化为Gene Symbol
# 方法一
# library(clusterProfiler)
# library(org.Mm.eg.db)
# 
# name <- bitr(rownames(diff_gene_deseq2), fromType = "ENSEMBL", toType = "SYMBOL",
#              OrgDb = "org.Mm.eg.db")

# 方法二
library(biomaRt)
library(curl)

my_ensembl_gene_id <- row.names(diff_gene_deseq2)

mart <- useDataset("mmusculus_gene_ensembl", useMart("ensembl"))
mms_symbols <- getBM(attributes = c("ensembl_gene_id", "external_gene_name", 
                                    "description"), 
                     filters = "ensembl_gene_id", values = my_ensembl_gene_id, 
                     mart = mart)

ensembl_gene_id <- rownames(diff_gene_deseq2)
diff_gene_deseq2 <- cbind(ensembl_gene_id, diff_gene_deseq2)
colnames(diff_gene_deseq2)[1] <- c("ensembl_gene_id")

# 得到最终结果
diff_name <- merge(diff_gene_deseq2, mms_symbols, by = "ensembl_gene_id")

diff_name[diff_name$external_gene_name=="Akap8",]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,我们便得到了差异基因,之后就可以根据这些差异基因,进行基因的富集分析,可以更加细致的了解到实验组的变化。更重要的是,之后可以作出一些精美的图片,帮助我们发文章~~/(ㄒoㄒ)/~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RNA-seq——四、根据序列比对结果筛选差异基因 的相关文章

  • Cache java transactional

    如果在lock 前get会有cache缓存的问题 Transactional public void getOrder String id trans2 id public Order trans2 String id Optional

随机推荐

  • C#中的Tooltip控件

    1 写控件 private void UclPropage Load object sender EventArgs e ToolTip toolTip1 new ToolTip toolTip1 AutoPopDelay 5000 too
  • 2020/10/26近期工作总结-vue开发

    1 父子传参 父传子 方法1 在父组件中加入子组件 给子组件绑定需要传递的值 import Policy from components policy 保单信息组件 components Policy
  • Mysql进阶优化篇05——子查询的优化和排序优化

    前 言 作者简介 半旧518 长跑型选手 立志坚持写10年博客 专注于java后端 专栏简介 mysql基础 进阶 主要讲解mysql数据库sql刷题 进阶知识 包括索引 数据库调优 分库分表等 文章简介 本文将介绍JOIN语句的底层原理
  • XXX--1.0-SNAPSHOT.jar中没有主清单属性

    一 情况 将项目打包后 启动项目时报 yiqi 1 0 SNAPSHOT jar中没有主清单属性 二 原因 maven项目打包时没有配置主类 缺少plugin配置 三 解决 加上plugin配置
  • 5款最好的开源用户关系管理工具

    5款最好的开源用户关系管理工具 by Scott Nesbitt 原文链接 http opensource com business 14 7 top 5 open source crm tools 创造和维系与客户的关系不是容易的事 然而
  • c# leveldb测试

    private void button1 Click object sender EventArgs e var db LevelDB DB Open new LevelDB Options CreateIfMissing true Env
  • 【马士兵】Python基础--16(面向对象)

    Python基础 16 面向对象 文章目录 Python基础 16 面向对象 面向对象的三大特征 封装 继承 方法重写 object类 多态 静态语言与动态语言 面向对象的三大特征 封装 封装的实现 class Student def in
  • docker mysql utf8mb4 编码问题解决方法

    docker mysql utf8mb4 编码问题解决方法 最近在学习docker mysql写入中文报错的问题困扰了我2 3天 在搜索了相关资料后终于找到了解决方法 原因是mysql5 7及之前的默认字符集是latain 而它是不支持中文
  • uview的select组件选择问题

    官方文档羞涩难懂 直接用拖拽工具 对于常用的表单组件 可直接帮你生成相关事件 时间 单列多列等选择器等支持数据回显功能 免开发 在拖拽面板中的 formitem 表单项中 转载 uniapp页面速成提效工具 uniapp uview ui
  • Xray工具使用(一)

    xray简介 xray 是一款功能强大的安全评估工具 主要特性有 检测速度快 发包速度快 漏洞检测算法高效 支持范围广 大至 OWASP Top 10 通用漏洞检测 小至各种 CMS 框架 POC 均可以支持 代码质量高 编写代码的人员素质
  • 华为java社招面试题目及全部流程详解

    华为的招聘流程一直非常复杂 本人最近参加了华为的社招 对全部流程有一个总体了解 包括流程 面试题目类型 分享给大家 希望大家能有所帮助 首先是华为hr审核简历 看一个简历和所需职位的匹配度 基本就是看毕业学校 看掌握技能是否与所需职位吻合
  • 《论文阅读》CARE:通过条件图生成的共情回复因果关系推理 EMNLP 2022

    论文阅读 CARE 通过条件图生成的移情反应因果关系推理 前言 简介 基础知识 Transformer Variational Graph Auto Encoder 变分图自编码器 邻接矩阵 adjacency matrix 图神经网络 G
  • HDFS 文件读写流程剖析

    Write hadoop fs put czz log wc in 1 Client调用FileSystem create filePath 方法 与NN进行RPC通信 check是否存在及是否有权限创建 假如不ok 就返回错误信息 假如o
  • 【RTT驱动框架分析06】-pwn驱动框架分析+pwm驱动实现

    pwm pwm应用程序开发 访问 PWM 设备API 应用程序通过 RT Thread 提供的 PWM 设备管理接口来访问 PWM 设备硬件 相关接口如下所示 函数 描述 rt device find 根据 PWM 设备名称查找设备获取设备
  • React、Vue2.x、Vue3.0的diff算法

    前言 本文章不讲解 vDom 实现 mount 挂载 以及 render 函数 只讨论三种 diff 算法 VNode 类型不考虑 component functional component Fragment Teleport 只考虑 E
  • 算法篇--链表求和

    问题描述 给两个链表 每个链表为一个整数的倒序 如下 1 2 3 4 5 7 9 两个数字的结果 321 9754 10075 那么 请得到 链表的结果为 5 7 0 0 1 思考 思路总结 两个链表肯定有一个最长的 等于情况取哪个都行 所
  • sudo配置文件/etc/sudoers详解及实战用法

    一 sudo执行命令的流程 将当前用户切换到超级用户下 或切换到指定的用户下 然后以超级用户或其指定切换到的用户身份执行命令 执行完成后 直接退回到当前用户 具体工作过程如下 当用户执行sudo时 系统会主动寻找 etc sudoers文件
  • hudi概念

    近实时摄取 对于 RDBMS 关系型的摄入 Hudi提供了更快的 Upset 操作 例如 你可以通过 MySql binlog 的形式或者 Sqoop 导入到 hdfs上的对应的 Hudi表中 这样操作比 Sqoop 批量合并 job Sq
  • tomcat进程意外退出的问题分析

    节前某个部门的测试环境反馈tomcat会意外退出 我们到实际环境排查后发现不是jvm crash 日志里有进程销毁的记录 从pause到destory的整个过程 org apache coyote AbstractProtocol paus
  • RNA-seq——四、根据序列比对结果筛选差异基因

    目录 1 合并矩阵并进行注释 2 筛选差异基因 DESeq2 写在前面 经过前面的一系列分析 我们得到了几个counts数据 接下来就需要根据这些数据来进行分析 本文使用Rstudio 从序列比对结果中筛选出差异基因 目的是 根据不同基因的