专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
生信人  ·  抓紧上车,焦亡巨噬细胞 ·  2 天前  
生物学霸  ·  ChatGPT ... ·  昨天  
51好读  ›  专栏  ›  生信菜鸟团

转录组差异分析代码(2)DESeq2、edgeR、limma

生信菜鸟团  · 公众号  · 生物  · 2024-09-23 18:28

正文

学习笔记总结于『生信技能树』马拉松课程

本篇学习转录组差异分析的代码,以TCGA的CHOL疾病为例。用较为基础的代码学习,以便理解。后续再学习更流畅的方法

上一篇中我们将数据下载并整理好后,现在将使用 DESeq2 edgeR limma 这三大R包进行三次差异分析,会得到三组差异基因,最后再取交集。这样做的理由详见 转录组数据挖掘 一文

在正式介绍代码之前,先引入一个概念:函数黑匣子

函数黑匣子

如图1,想象一下这是3个盒子,里面装的就是下文要使用的 DESeq2 edgeR limma ,只不过下文中还会添加一些细节进去

这些盒子,就是所谓的黑匣子。蓝色框是我们输入的内容exp和Group;红色框是我们得到的内容deg1、deg2、deg3;而从输入到输出,这中间发生了什么,即这些代码背后的统计学原理,就不是一眼能看明白的。(不知道背后的原理,确实不妨碍往下分析,不过若有条件还是深究一下为好)

图1

所以下面的代码几乎不用改动,我们只用输入exp和Group,然后全选运行即可。即使如此,有些细节还是需要注意,请往下看

三大R包差异分析

读取整理好的数据

load("TCGA-CHOL.Rdata")
table(Group)

1.deseq2

这部分的函数运行时间非常长,如果数据本身就很大,又要多次运行,就会很耗费时间。于是有了下面那段 if() 代码,能够将结果保存到一个RData文件里面,下次就不用运行这段函数,直接读取RData文件就行

注意事项:如果因表达矩阵有改动而需要再次运行,此时要从工作目录中删除 if() 生成的RData文件,因为 file.exists() 没法做到文件覆盖

#deseq2----
library(DESeq2)
colData                       condition=Group)
if(!file.exists(paste0(proj,"_dd.Rdata"))){
  dds     countData = exp,
    colData = colData,
    design = ~ condition)
  dds   save(dds,file = paste0(proj,"_dd.Rdata"))
}
# 用函数DESeqDataSetFromMatrix()将数据组织得符合要求,并完成了deseq2差异分析

load(file = paste0(proj,"_dd.Rdata"))
class(dds)
res "condition",rev(levels(Group))))
#constrast
c("condition",rev(levels(Group)))
class(res)
DEG1 library(dplyr)
DEG1 DEG1 = na.omit(DEG1)
head(DEG1)

#添加change列标记基因上调下调
logFC_t = 2
pvalue_t = 0.05

k1 = (DEG1$pvalue $log2FoldChange k2 = (DEG1$pvalue $log2FoldChange > logFC_t);table(k2)
DEG1$change = ifelse(k1,"DOWN",ifelse(k2,"UP","NOT"))
table(DEG1$change)
head(DEG1)

2.edgeR

#edgeR----
library(edgeR)

dge dge$samples$lib.size $counts)
dge 
design 
dge dge dge 
fit fit 
DEG2=topTags(fit, n=Inf)
class(DEG2)
DEG2=as.data.frame(DEG2)
head(DEG2)

k1 = (DEG2$PValue $logFC k2 = (DEG2$PValue $logFC > logFC_t)
DEG2$change = ifelse(k1,"DOWN",ifelse(k2,"UP","NOT"))

head(DEG2)
table(DEG2$change)

3.limma

library(limma)
dge dge design v "quantile")

fit fit= eBayes(fit)

DEG3 = topTable(fit, coef=2, n=Inf)
DEG3 = na.omit(DEG3)

k1 = (DEG3$P.Value $logFC k2 = (DEG3$P.Value $logFC > logFC_t)
DEG3$change = ifelse(k1,"DOWN",ifelse(k2,"UP","NOT"))
table(DEG3$change)
head(DEG3)

tj = data.frame(deseq2 = as.integer(table(DEG1$change






请到「今天看啥」查看全文