简单使用limma做差异分析

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

首先需要说明的是,limma是一个非常全面的用于分析芯片以及RNA-Seq的差异分析,按照其文章所说:

limma is an R/Bioconductor software package that provides an integrated solution for analysing data from gene expression experiments.

在这我只是对其中的一种情况进行简单的总结,比如这个包可以处理RNA-Seq数据,我简单的以两个比较组进行分组为例,至于其他分组情况,请看limma说明文档,有非常详细的说明,非常亲民。

  1. 首先我们还是输入count矩阵,这里也跟其他差异分析R包一样,不要输入已经标准化的数据。顺便也加载下edgeR这个R包

    library(limma)
    library(edgeR)
    counts <- read.table(file = "conut_all.txt", sep = "\t", header = TRUE, row.names = 1, stringsAsFactors = FALSE)
  2. 接着按照文档的说明以及limma包的习惯,我们需要对count进行标准化以及转化为log2的值,这里标准化的方法为TMM,使用edgeR里面的calcNormFactors函数即可

    dge <- DGEList(counts = counts)
    dge <- calcNormFactors(dge)
    logCPM <- cpm(dge, log=TRUE, prior.count=3)

    这里prior.count值我粗略理解为是为了防止log2()遇到过于小的值

  3. 然后跟其他包一样,设置分组信息

    group_list <- factor(c(rep("control",2), rep("siSUZ12",2)))
    design <- model.matrix(~group_list)
    colnames(design) <- levels(group_list)
    rownames(design) <- colnames(counts)
  4. 接下来就是常规的差异分析

    fit <- lmFit(logCPM, design)
    fit <- eBayes(fit, trend=TRUE)
    output <- topTable(fit, coef=2,n=Inf)
    sum(output$adj.P.Val<0.05)

到这里为止,我们主要是用了limma包里对RNA-Seq差异分析的limma-trend方法,该方法主要适用于样本间测序深度基本保持一致的情况,也就是说两个样本的文库(reads数目)大小相差的不悬殊(说明文档中是默认3倍以内?)

当文库大小在样本间变化幅度相当大的话,可以使用limma的voom方法,可按照下面的代码流程:

  1. count数据的输入以及数据标准化还是跟之前的一样

    counts <- read.table(file = "conut_all.txt", sep = "\t", header = TRUE, row.names = 1, stringsAsFactors = FALSE)
    dge <- DGEList(counts = counts)
    dge <- calcNormFactors(dge)
  2. 还是一样需要分组信息

    group_list <- factor(c(rep("control",2), rep("siSUZ12",2)))
    design <- model.matrix(~group_list)
    colnames(design) <- levels(group_list)
    rownames(design) <- colnames(counts)
  3. 接下来进行voom转化

    v <- voom(dge, design, plot=TRUE)

    其实可以不进行TMM标准化,直接用count数据进行voom转化,如:

    v <- voom(counts, design, plot=TRUE)
  4. 最后就是普通的差异分析过程

    fit <- lmFit(v, design)
    fit <- eBayes(fit)
    output <- topTable(fit, coef=2,n=Inf)
    sum(output$adj.P.Val<0.05)

Summary

Limma长久以来就是一个非常流行的差异分析R包,其内容涉及的非常广泛,用于RNA-Seq只是其内容的一小部分,并且使其处理RNA-Seq数据也使用芯片类似线性模型下,并且按照其说法,limma包比其他基于负二项式分布模型的差异分析R包更加的优秀。

其实差异分析不外乎数据的标准化以及统计模型分析差异两个方面的作用,每个差异分析R包都有其自身的优点,个人理解,取舍在于自己的理解以及想法即可。

其实,自己对于limma包的理解还是比较粗浅的

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

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

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

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

    简单使用DESeq2/EdgeR做差异分析 Posted: 五月 07, 2017  Under: Transcriptomics  By Kai  no Comments DESeq2和EdgeR都 ...

  3. php求和为s的两个数字(多复制上面写的代码,有利于检查错误)(由浅入深,先写简单算法,做题的话够用就行)

    php求和为s的两个数字(多复制上面写的代码,有利于检查错误)(由浅入深,先写简单算法,做题的话够用就行) 一.总结 1.多复制上面写的代码,有利于检查错误 2.一层循环就解决了,前后两个指针,和大了 ...

  4. [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar

    在做安卓UI的时候有时候需自定义具有动画效果的按钮或需要自定义一下actionbar~ 本节用一个简单的demo讲如何自定义具有动画效果的按钮,以及个性化的actionbar 下面是效果: 其中: △ ...

  5. NGUI之Slider,最简单的方法做进度条。

    既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo ...

  6. 简单封装Redis做缓存

    基于Redis封装一个简单的Python缓存模块 0. Docker Redis安装 参考: Get Docker CE for CentOS Docker 安装 Redis 安装Docker时错误s ...

  7. QML学习笔记(五)— 做一个简单的待做事项列表

    做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...

  8. Hibernate SQLQuery简单实用,做链接查询

    工单里面可能有0个告警,一个或多个告警,当工单中没有告警的时候也需要将工单显示出来,所以就需要使用工单和告警的做链接查询,下面是具体实例 表: CREATE TABLE `alarm` ( `id` ...

  9. java后端实习,从最简单的crud做起

    现在就是做ssm框架下的sql语句,主要是select语句,sql语句没什么难的,孰能生巧,趁此机会,把自己的sql基础打扎实,也是一种实习的经验. 1.在子查询中字段的类型不相容怎么办? cast函 ...

随机推荐

  1. Jupter 7个进阶功能

    1.  执行shell命令 Shell是一种与计算机进行文本交互的方式. 一般来讲,当你正在使用Python编译器,需要用到命令行工具的时候,要在shell和IDLE之间进行切换. 但是,如果你用的是 ...

  2. cv2对图像进行旋转和放缩变换

    旋转: def get_image_rotation(image): #通用写法,即使传入的是三通道图片依然不会出错 height, width = image.shape[:2] center = ...

  3. tensorflow中run和eval的区别(转)

    在tensorflow中,eval和run都是获取当前结点的值的一种方式. 在使用eval时,若有一个 t 是Tensor对象,调用t.eval()相当于调用sess.run(t) 一下两段代码等效: ...

  4. 判断用户 是用的电脑还是手机 判断 是安卓还是IOS

    $(function(){ var Terminal = { // 辨别移动终端类型 platform: function () { var u = navigator.userAgent, app ...

  5. Windows 10 显示中的仅更改文本大小和加粗选项

    问题描述: 在Windows 10 1703 之前的版本,在控制面板-显示中,存在如下图中的图形界面设置: 系统升级到Windows 10 1703 或是Windows 10 1709 之后,不再存在 ...

  6. php zip扩展的一些基本操作

    public function zip_test() { $zip_obj = new ZipArchive(); $res = $zip_obj->open('/data1/www/www.k ...

  7. jms学习笔记

    https://www.cnblogs.com/zhuxiaojie/p/5564187.html //创建一个session //第一个参数:是否支持事务,如果为true,则会忽略第二个参数,被jm ...

  8. python 函数的定义及传参

    函数是一个通用的程序结构部件,是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 定义一个简单的函数: >>> def test(a): #创建一个函数,函数名是test ...

  9. 如何搭建python+selenium2+eclipse的环境

    搭建python和selenium2的环境(windows) 1.下载并安装python(我用的是2.7的版本) 可以去python官网下载安装:http://www.python.org/getit ...

  10. Pandas基本功能之选取索引和过滤

    索引.选取和过滤 大部分的查询用法 类型 说明 obj[val] 选取DataFrame的单个列或一组列 obj.ix[val] 选取DataFrame的单个行或一组行 obj.ix[:,val] 选 ...