简单使用DESeq2/EdgeR做差异分析

Posted: 五月 07, 2017  Under: Transcriptomics  By Kai  no Comments

DESeq2和EdgeR都可用于做基因差异表达分析,主要也是用于RNA-Seq数据,同样也可以处理类似的ChIP-Seq,shRNA以及质谱数据。

这两个都属于R包,其相同点在于都是对count data数据进行处理,都是基于负二项分布模型。因此会发现,用两者处理同一组数据,最后在相同阈值下筛选出的大部分基因都是一样的,但是有一部分不同应该是由于其估计离散度的不同方法所导致的。

DESeq2的使用方法:

  1. 输入矩阵数据,行名为sample,列名为gene;DESeq2不支持无生物学重复的数据,因此我选择了2个样本,3个生物学重复的数据;并对count data取整(经大神指点,这里需要说明下,我的测试数据readcount是RSEM定量的结果,并不是常见的htseq-count的结果,所以count值会有小数点,而DESeq2包不支持count数有小数点,所以这里需要round取整)。

    database_all <- read.table(file = "readcount", sep = "\t", header = T, row.names = 1)
    database <- database_all[,1:6]
    #type <- factor(c(rep("LC_1",3), rep("LC_2",3)))
    database <- round(as.matrix(database))
  2. 设置分组信息以及构建dds对象

    condition <- factor(c(rep("LC_1",3), rep("LC_2",3)))
    coldata <- data.frame(row.names = colnames(database), condition)
    dds <- DESeqDataSetFromMatrix(countData=database, colData=coldata, design=~condition)
  3. 使用DESeq函数进行估计离散度,然后进行标准的差异表达分析,得到res对象结果

    dds <- DESeq(dds)
    res <- results(dds)
  4. 最后设定阈值,筛选差异基因,导出数据

    table(res$padj <0.05)
    res <- res[order(res$padj),]
    resdata <- merge(as.data.frame(res), as.data.frame(counts(dds, normalized=TRUE)),by="row.names",sort=FALSE)
    write.csv(resdata,file = "LC_1_vs_LC_2.csv")

EdgeR的使用方法:

  1. 跟DESeq2一样,EdgeR输入矩阵数据,行名为sample,列名为gene;DESeq2不支持无生物学重复的数据,因此我选择了2个样本,3个生物学重复的数据。

    exprSet_all <- read.table(file = "readcount", sep = "\t", header = TRUE, row.names = 1, stringsAsFactors = FALSE)
    exprSet <- exprSet_all[,1:6]
    group_list <- factor(c(rep("LC_1",3), rep("LC_2",3)))
  2. 设置分组信息,去除低表达量的gene以及做TMM标准化

    exprSet <- exprSet[rowSums(cpm(exprSet) > 1) >= 2,]
    exprSet <- DGEList(counts = exprSet, group = group_list)
    exprSet <- calcNormFactors(exprSet)
  3. 使用qCML(quantile-adjusted conditional maximum likelihood)估计离散度(只针对单因素实验设计

    exprSet <- estimateCommonDisp(exprSet)
    exprSet <- estimateTagwiseDisp(exprSet)
  4. 寻找差异gene(这里的exactTest函数还是基于qCML并且只针对单因素实验设计),然后按照阈值进行筛选即可

    et <- exactTest(exprSet)
    tTag <- topTags(et, n=nrow(exprSet))
    tTag <- as.data.frame(tTag)
    write.csv(tTag,file = "LC_1_vs_LC_2_edgeR.csv")

Summary

以上我主要针对单因素两两比较组进行差异分析,其实DESeq2和EdgeR两个R包都可以对多因素进行差异分析。

  1. DESeq2修改以上代码的分组信息design参数以及在差异分析results函数中添加所选定的分组因素,其他代码基本一样,具体参照DESeq2手册

  2. EdgeR则需要用Cox-Reid profile-adjusted likelihood (CR)方法来估算离散度,y <- estimateDisp(y, design)或者分别使用三个函数(y <- estimateGLMCommonDisp(y, design),y <- estimateGLMTrendedDisp(y, design), )y <- estimateGLMTagwiseDisp(y, design);然后差异表达分析也跟单因素分析不同,主要使用generalized linear model (GLM) likelihood ratio test 或者 quasi-likelihood(QL) F-test,具体代码可以参照EdgeR手册。

 

简单使用DESeq2/EdgeR做差异分析的更多相关文章

  1. 简单使用limma做差异分析

    简单使用limma做差异分析 Posted: 五月 12, 2017  Under: Transcriptomics  By Kai  no Comments 首先需要说明的是,limma是一个非常全 ...

  2. 简单使用DESeq做差异分析

    简单使用DESeq做差异分析 Posted: 五月 06, 2017  Under: Transcriptomics  By Kai  no Comments DESeq这个R包主要针对count d ...

  3. POJ3185(简单BFS,主要做测试使用)

    没事做水了一道POJ的简单BFS的题目 这道题的数据范围是20,所以状态总数就是(1<<20) 第一次提交使用STL的queue,并且是在队首判断是否达到终点,达到终点就退出,超时:(其实 ...

  4. 简单的用jQuery做遮罩效果

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  5. 简单介绍aspose-words-18.10-jdk16做导出word

    今天在搞那个用aspose words for java做导出word的功能,顺便简单介绍这个怎么用,我有两个版本的破解版,就都做简单介绍怎么用 警告:请勿用于商业用途,仅供学习研究使用,如有任何版权 ...

  6. 这 3 个 Set 集合的实现有点简单,那来做个总结吧

    Set 接口是 Java Collections Framework 中的一员,它的特点是:不能包含重复的元素,允许且最多只有一个 null 元素.Java 中有三个常用的 Set 实现类: Hash ...

  7. 简单说 用CSS做一个魔方旋转的效果

    说明 魔方大家应该是不会陌生的,这次我们来一起用CSS实现一个魔方旋转的特效,先来看看效果图! 解释 我们要做这样的效果,重点在于怎么把6张图片,摆放成魔方的样子,而把它们摆放成魔方的样子,重点在于用 ...

  8. 简单测试nginx1.90做TCP协议负载均衡的功能

    最近工作中需要做TCP层面的负载均衡,以前网站用的反向代理nginx只支持应用层的负载均衡,对于TCP协议是无能为力的,需要使用LVS(linux虚拟服务器). LVS的特点是高性能和极复杂的配置.对 ...

  9. Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good

    数据是一个集合,显示也是一个集合.例如一篇<西游记>的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现. 下面是将一个二 ...

随机推荐

  1. vue.js入门操作

    1.vue框架是经典的MVVM模式, .vue文件是模板文件模板文件又分为3个部分一 <template></template>(html部分)二 <script> ...

  2. NFS 网络文件系统制作

    1. 构建根文件系统主要是建立相关的文件目录,以及各目录下相关的配置文件.管理工具等. 2. 首先创建文件目录. mkdir rootfs cd rootfs mkdir bin dev etc li ...

  3. 手机端head部分

    <!doctype html> <html lang="zh"> <head> <meta charset="utf-8&quo ...

  4. nltk的使用

    1. 命令行; import nltk nltk.download() #下载相关模型等,...

  5. javase中javax源码下载地址

    OracleJDK 和 OpenJDK 源码都可以参考. OpenJDK 源码下载 http://hg.openjdk.java.net/jdk7/jdk7/jdk/file 我主要是想下载 java ...

  6. oracle学习--循环语句

    oracle学习--循环语句  loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i ...

  7. JMeter调试工具--Debug Sampler(转载)

    转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...

  8. 如何修改Eclipse的 workspace目录

    Eclipse是一款很强的Java IDE, eclipse ide for eclipse committers 这里的committers 就是投稿者与执行者的意思,也就是说这个eclipse是为 ...

  9. 第四章 栈与队列(c1)栈应用:进制转换

  10. c# 键值对的方式post提交

    DataContractJsonSerializer jsQcData = new DataContractJsonSerializer(typeof(DATA<data>));//DAT ...