认真学习limma.jpg

刘小泽写于18.11.18

好资料值得花时间学习,即便是英文版。limma的学习资料有很多,我每次更新的也是不同的内容,希望能多涉及一些关于limma的知识,充实大脑

最近经常从花花那里听说.jpg,被感染了哈哈😂

配置

之前果子更新了一篇推送,讲的就是bioconductor的安装方式发生了改变。我们之前直接source+install.package安装,现在用到了biocmanager。刚开始转换还遇到了一点问题,可能是网络原因吧,总提示安不上biocmanager。但是有问题不能怕,相信“一切软件问题都不是问题”,只要电脑还健在,就可以解决

# 先安装BiocManager,它位于CRAN 
if(length(getOption("CRAN"))==0) options(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")
if(!require("BiocManager")) install.packages("BiocManager",update = F,ask = F)

# 然后添加BioC的国内源,可以选清华或者中科大
if(length(getOption("BioC_mirror"))==0) options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")

# 这就是最新的安装方式了
if(!require("limma")) BiocManager::install("limma",update = F,ask = F)
# 再安装一个数据包(关于白血病的)、
if(!require("leukemiasEset")) BiocManager::install("leukemiasEset",update = F,ask = F)

前言

LIMMA的意思原来是“linear models for microarray data”,这也就解释了为什么其中有构建线性模型的步骤【线性模型包括了线性回归、多重线性回归、方差分析等】另外limma是为芯片而生。但不仅止于此,后来衍生的limma-voom也依然成了今天转录组差异分析的金标准。另外DNA甲基化也可以用limma去分析(当然我现在还没有涉及这部分)

使用limma需要有一个代表某种测量的数值矩阵,比如基因表达矩阵(一般就是行为feature,列为sample)或者组蛋白修饰、Hi-C contact matrix。这里feature可以代表许多含义,在样本信息中(比如GEO得到的样本信息数据框)一个feature表示一个样本,在表达矩阵中一个feature就等于一个基因,另外还可以表示基因组区间(比如不同的启动子promoters或者基因重叠区域 genomic bins)。不论是limma还是deseq2或者是edgeR,都采用了经验贝叶斯方法获取feature信息。

我们这里只讨论基因表达数据,包括芯片和转录组数据,这种数据中一般样本数量在100以内,最多一般也不超过1000,并且样本是有分组的,最常见的就是对照组control和处理组case。我们分析的目标也就是找到不同组之间差异的features(genes)。

但是并非每次都是两组比较,有时涉及到更多信息,比如年龄、性别;然后还有更复杂的,就是时间序列信息,所有的样本是按照时间点划分的,每个时间点为一个组,包括了几个样本。因此,一个实验的design矩阵 就是组间样本是如何分布的。样本一般是相互独立的,但是有时也是成对出现,比如同一个病人的正常与癌变组织就是这样一对样本。最常见的design就是两个未成对的组之间的比较。

两组比较 A two group comparison

获取数据

# 使用的是一个表达数据集ExpressionSet=》leukemiasEset
library(leukemiasEset)
data(leukemiasEset) #使用data来加载这个数据集
table(leukemiasEset$LeukemiaType)

得到结果如下:这是4组不同的白血病和1组对照的样本信息,其中NoL意思是不是白血病(Not leukemia)即正常对照组

## 
## ALL AML CLL CML NoL 
##  12  12  12  12  12

如果想知道ALL型白血病与对照组之间的差异基因,可以先取出相关的子集ALL和NoL

myData <- leukemiasEset[, leukemiasEset$LeukemiaType %in% c("ALL", "NoL")]
myData$LeukemiaType <- factor(myData$LeukemiaType)
# 这里你会看到,虽然myData只包含了ALL和NoL两种type,但是显示的因子还是5种,因此需要重新赋值一下因子类型
myData$LeukemiaType <- factor(myData$LeukemiaType)

线性模型

现在做一个标准的limma model fit

design <- model.matrix(~ myData$LeukemiaType)
fit <- lmFit(myData, design)
fit <- eBayes(fit)
topTable(fit)

首先,为了比较感兴趣组的样本(这里的ALL和NoL),我们用model.matrix构建了design矩阵(叫design可以理解为是从实验设计角度出发),这里的design矩阵有两组【多组的需要稍微变一下构建方法】;

其次,拟合线性模型(line model fitting),然后利用经验贝叶斯方法【这是limma的核心所在】 得到基因间强度关系(gene strength),因为这个实验矩阵(design)只有两组,因此只有一种比较方法:即比较他们之间的基因差别;

然后,使用topTable函数列出差异表达最显著的基因【如果实验设计比较复杂,还需要告诉topTable比较哪些interest特征】

得到的结果部分如下:

                   logFC  AveExpr        t      P.Value    adj.P.Val
ENSG00000163751 4.089587 5.819472 22.51729 9.894742e-18 1.733025e-13
ENSG00000104043 4.519488 5.762115 21.98550 1.718248e-17 1.733025e-13
ENSG00000008394 5.267835 7.482490 20.08250 1.374231e-16 9.240332e-13
  • 其中一个重要的部分是logFC,也就是case与control组之间的log Fold change值,这里有个注意事项:你需要知道样本组比较顺序(是ALL-NoL还是NoL-ALL)。如果是前者,那么logFC为正就说明相对NoL,基因在ALL是高表达的。因此判断哪个样本为reference是很重要的。那么如何判断?
myData$LeukemiaType
##  [1] ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL ALL NoL NoL NoL NoL NoL
## [18] NoL NoL NoL NoL NoL NoL NoL
## Levels: ALL NoL

​ 就看上面这个代码的结果中的Levels部分哪个因子首先出现,它就作为reference

​ 这里的结果是ALL先出现,因此ALL组是reference,也就是NoL-ALL的模式,这样的话,如果得到的logFC是正值,那么就说明在ALL组中基因表达下调

​ 如果想要改变reference组,可以用relevel()函数

  • 另外结果还包括t检验数据、P值(P.Value 对于多组比较未校正)、校正的P值(adj.P.Val 默认使用Benjamini-Horchberg方法对多组进行P值校正)

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到Bioplanet520@outlook.com

Welcome to our bioinfoplanet!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容