写在前面:最近在使用limma包进行差异表达分析,参考了网上许多教程都觉得说的云里雾里,很不清楚。经过我自己一段时间非常痛苦的钻研,弄明白了,解决了我的实际需求。于是决定将我的分析经验写下来,分享给需要的人。

首先加载前期预处理好的表达矩阵。(我的原始表达矩阵文件已附在文后,大家有需要可以下载实践)

setwd("E://Rworkplace")
data<-read.table("GSE98793.txt")

表达矩阵格式如下图所示,行名为基因名,列名为样本名。

创建样本分类信息表。

所谓样本分类信息表,实际上就是值你的样本名一一对应的属性是什么(譬如case还是control)。

我自己根据GEO数据库中该芯片的分类信息先自己在excel中整理了一张表。因为这张芯片原作者在上传数据的时候,样本分类数据很乱,实验组和对照组的样本有时候交错分布,譬如ID为GSM2612287的样本是第192个样本,是对照组即健康人群。而ID为GSM2612128的样本是第33个样本,取样自重症抑郁症患者。我们在对样本进行差异表达分析之前,一定要做的工作是弄明白每一个样本的属性,我做这个工作,实际上是对样本的属性进行了手工注释。

然后我将上图中的第二第三列,复制单独保存在一个txt文档中。(即gene_list.txt)

第一列(1,2,3,……)只是为了辅助排序的东西,因为这个1,2,3,就是样本在总的样本中的位置,这个表格就是告诉我们第几个样本,它是对照组,第几个样本,取样自重症抑郁症患者。

1 HC
2 HC
3 HC
4 HC
…… ……

加载上述分类表gene_list.txt。并按照数据框的第一列升序排序。

取第二列,这样处理得到的就是每一个位置所对应的样本属性信息。我们最终想要得到的也就是向量group。(实际情况大家可能不会像我这样麻烦,具体问题具体分析,只要得到一个类如group的向量)

group_list<-read.table("gene_list.txt")
new_group<- group_list[order(group_list[,1]),]
group<-new_group[,2]

注:其中HC代表的是健康对照组,MDD指重症抑郁症;anxiety,即焦虑症。

接着,加载limma包,构造如下矩阵。(这一段可以照抄。根据自己的实际情况替换变量)

suppressMessages(library(limma))
design <- model.matrix(~0+factor(group))
colnames(design)=levels(factor(group))
rownames(design)=colnames(data)

然后,我们规定哪一组数据与哪一组数据比较。

这里也是原来我比较困惑的地方,因为我的数据是有MDD,anxiety两个实验组,HC对照组。而我实际只需要比较MDD与HC的差异表达情况,而一般的教程中并未涉及或者介绍模糊。

下面这段的代码的意思就是比较design矩阵中HC与MDD level。(关于多组分析的其它疑惑,可以参考知乎文章)

contrast.matrix<-makeContrasts("HC-MDD",levels=design)

完成以上两个表格之后,就可以直接跑下面的代码,得到差异表达数据了。(有时间具体分析什么意思)

##step1
fit <- lmFit(data,design)
##step2
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)
##step3
tempOutput = topTable(fit2, coef=1, n=Inf)
nrDEG = na.omit(tempOutput) 

分析得到的nrDEG如下图所示:

保存分析好的差异表达数据。

write.table(nrDEG,"limma_GSE98793.txt")

全部代码:

setwd("E://Rworkplace")
data<-read.table("GSE98793.txt")
group_list<-read.table("gene_list.txt")
new_group<- group_list[order(group_list[,1]),]
group<-new_group[,2]suppressMessages(library(limma))design <- model.matrix(~0+factor(group))
colnames(design)=levels(factor(group))
rownames(design)=colnames(data)contrast.matrix<-makeContrasts("HC-MDD",levels=design)##step1
fit <- lmFit(data,design)
##step2
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)
##step3
tempOutput = topTable(fit2, coef=1, n=Inf)
nrDEG = na.omit(tempOutput)
write.table(nrDEG,"limma_GSE98793.txt")

熬夜写到这儿,一定会有些疏漏和错误,欢迎指正,共同进步!

【数据链接】https://me.csdn.net/download/weixin_40640700

重新修改了上传数据所需的积分,设置为零。可是系统还是自动调为了1。

如果参考数据不能顺利下载的话,可以邮箱2456392738@qq.com,我邮箱发送。


百度网盘链接:

链接:https://pan.baidu.com/s/1AEqq2t9jo8bitJcQuesI3Q
提取码:nqos

用limma包进行多组差异表达分析相关推荐

  1. python 分析两组数据的差异_R语言limma包差异基因分析(两组或两组以上)

    使用limma包进行差异基因分析时,做最多的是两分类的,例如control组和disease组,但也会碰到按照序列进行的分组.这时,如果逐一使用两两比较求差异基因则略显复杂.其实开发limma包的大神 ...

  2. limma包分析差异表达基因

    limma利用广义线性模型进行差异表达基因分析,主要用于分析微阵列数据. Data analysis, linear models and differential expression for mi ...

  3. R语言limma包差异表达分析

    目录 一.数据准备 1.数据加载 2.做分组信息数据 3.表达数据样本ID顺序与样本信息数据匹配 二.数据预处理 (1)缺失值处理 (2)离群值处理 (3)数据归一化 三.数据探索 (1)查看数据是否 ...

  4. edger多组差异性分析_R语言利用edgeR package进行基因差异表达分析 举例

    R语言利用edgeR package进行基因差异表达分析 举例 实验数据: 同一组织,分为两组,control vs treat,每组7例sample.数据第一列为基因名,后14列为对应的count. ...

  5. ballgown包进行基因差异表达分析

    ballgown包可以读入Stringtie 的转录组组装及定量数据,进行基因差异表达分析. 1. 数据读入 # if (!requireNamespace("BiocManager&quo ...

  6. edgeR:一个数字基因表达数据差异表达分析Bioconductor程序包

    edgeR:一个数字基因表达数据差异表达分析Bioconductor程序包 人们希望在不久的将来,对于许多功能基因组学应用,新兴的数字基因表达(digital gene expression,DGE) ...

  7. edgeR、limma、DESeq2三种差异表达包比较(RNA-seq数据)

    文章目录 1. 加载R包和输入数据 2. 表达数据整理 3.edgeR包做差异表达 4.limma包做差异表达 5.DESeq2包做差异表达 6.比较三种包差异表达基因筛选结果 总结: 1. 加载R包 ...

  8. edger多组差异性分析_使用edgeR进行无重复差异表达分析

    写这篇文章一部分原因是填2年前的一个坑 转录组入门(7):差异表达分析. 另一部分原因是GQ最近又在搞一波无重复的差异表达分析, 所以专门去学了edgeR 我个人是不太推荐没有重复的差异表达分析,毕竟 ...

  9. edger多组差异性分析_【step by step】菜鸟学TCGA(4)-用edgeR做差异表达分析

    大家好,工作太忙,太久没有更新了,哎,泪-- 有的同学问我要代码,有的发了,后面的还没有发,一个一个发好累啊,大家有建议吗? 感觉某宝的这个课程也不贵,300多,有经济能力的小伙伴可以自己买,学得快些 ...

最新文章

  1. java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...
  2. Learn Python 011: while loop
  3. webapi+EF(增删改查)
  4. java map与set的区别_Java中的Set,List,Map的区别是什么?
  5. 网站常见问题1分钟定位(三)| 如何使用阿里云ARMS轻松重现用户浏览器问题
  6. Hadoop +x86平台:大数据分析的好拍档
  7. (71)FPGA模块调用(system Verilog调用VHDL)
  8. mysql 事件 函数_MySQL 自定义函数和存储过程的使用
  9. 4.12_proxy_结构型模式:代理模式
  10. 【强推】10个有趣的Python程序
  11. 淘宝CMS新玩法,当粉丝营销遇上直通车,会擦出怎样的火花?
  12. 斗鱼实名认证 mysql_斗鱼新人主播怎么进行实名认证 斗鱼直播实名认证失败怎么办...
  13. PDF任意页旋转任意角度
  14. 锐龙r75800h和酷睿i511400h差距多大 r7 5800h和i5 11400h核显
  15. 字符串与时间的格式转换
  16. PhpStorm 2022.1.1(PHP集成开发)
  17. Linux ❉ 系统软件安装详解
  18. 如何量化考核软件开发人员绩效 1
  19. 换张 SIM 卡就能用上「量子密话」?中国电信的新服务是黑科技还是智商税
  20. 关于H5唤起某APP,未安装调起下载那些事

热门文章

  1. linux中波浪号代表什么_linux – $HOME和’〜'(波浪号)之间的区别?
  2. 服务器知识:Linux服务器修改root管理密码
  3. jqGrid合并rowspan
  4. 产品设计 - 关于测试
  5. java的ElementById的意思_是getelementbyid意思
  6. 如何给RecycleView 设置间隔?
  7. MYSQL:餐厅点菜、管理员工的数据库。大学数据库课程大作业(初学者,入门,用的基础知识)
  8. 位段的基础知识(大家都不怎么知道位段)
  9. 学计算机能设计舞美吗,舞美与舞蹈艺术之关系
  10. 扬天科技正式宣布完成5000万融资,推出“不锐” 协作机器人