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

我个人是不太推荐没有重复的差异表达分析,毕竟统计学上的p值是为了证明两个样本的差异是真实存在而不是抽样误差导致, 但是你单个样本如何计算变异呢?

因此每当别人提问的时候, 我个人的建议就是定性看看倍数变化吧. 但是如果真的强行要算p值, 其实也不是不行, edgeR就是一种选择.

环境准备

我们需要安装两个R包,一个是edgeR, 一个是airway. 其中airway是一个数据集包, 功能就是提供一个用于分析的数据

if (!requireNamespace("BiocManager", quietly = TRUE))

install.packages("BiocManager")

if (!requireNamespace("edgeR", quietly = TRUE))

BiocManager::install("edgeR")

if (!requireNamespace("airway", quietly = TRUE))

BiocManager::install("airway")

加载R包

library(edgeR)

library(airway)

构建DGEList

DGEList是edgeR分析流程中必须的对象. 构建该对象需要提供两类信息: 表达量矩阵和分组信息.

为了方便大家重复,我们这里的数据来自于airway. 对于你自己的数据, 可以用read.table等函数进行导入.

data("airway")

expr_matrix

meta_info

expr_matrix 是一个 64102 个基因和8个样本的矩阵.meta_info 里存放的是样本的元信息, 记录样本的处理, 来源等信息. 我们这里就用一部分数据, 也就是前两列构建DGEList对象

counts

group

y

数据过滤

由于原来的表达量矩阵基因数太大, 可能存在某些基因根本没有表达, 因此需要预先过滤

keep 1) >= 1

y

这部分代码的意思指的是保留在至少在一个样本里有表达的基因(CPM > 1)。 基因数就从原来的64102降到14756

标准化

考虑到测序深度不同, 我们需要对其进行标准化, 避免文库大小不同导致的分析误差.

edgeR里默认采用TMM(trimmed mean of M-values) 对配对样本进行标准化,用到的函数是calcNormFactors

y

差异表达分析

不同差异表达分析工具的目标就是预测出dispersion(离散值), 有了离散值就能够计算p值. 那么dispersion怎么计算呢? edgeR给了几个方法

方法一: 根据经验给定一个值(BCV, square-root-dispersion). edgeR给的建议是, 如果你是人类数据, 且实验做的很好(无过多的其他因素影响), 设置为0.4, 如果是遗传上相似的模式物种, 设置为0.1, 如果是技术重复, 那么设置为0.01

这里用的数据是人类, 此处设置为 0.4

y_bcv

bcv

et

我们用decideTestsDGE看下有多少基因上调, 多少基因下调. 设置p.value=0.05

gene1

summary(gene1)

2-1

Down 4

NotSig 14733

Up 19

差异基因少的可怜, 只有4+19个。我们可以尝试调整下BCV

y_bcv

bcv

et2

gene2

summary(gene2)

2-1

Down 159

NotSig 14380

Up 217

这个时候的差异基因上升到了159 + 217个.

方法2: 根据已知一些不会发生改变的基因推测dispersion. 假设你已经知道了一些基因是不会发生变化,例如管家基因,那么我们就可以通过它们来预测dispersion.

先复制原来对象的一份拷贝.

y1

y1$samples$group

然后你需要提供一个变量,housekeeping存放着已知不改变的基因名,例如管家基因中,然后进行dispersion估计

这里需要一个housekeeping的向量, 来自教程的最后部分

y0

最后加入到原来的数据集中进行分析。

y$common.dispersion

design

fit

lrt

这个时候我们再看下差异基因, 是341 + 388

gene3

summary(gene3)

group

Down 341

NotSig 14027

Up 388

说实话, 好像和预先设置的没啥区别. 但是我们用韦恩图比较下

library(gplots)

venn(list(gene1=names(gene1@.Data[gene1@.Data == 1,]),

gene2=names(gene1@.Data[gene2@.Data == 1,]),

gene3=names(gene1@.Data[gene3@.Data == 1,])

))

上调基因

venn(list(gene1=names(gene1@.Data[gene1@.Data == -1,]),

gene2=names(gene2@.Data[gene2@.Data == -1,]),

gene3=names(gene3@.Data[gene3@.Data == -1,])

))

下调基因

从中可以发现根据已知不变基因预测dispersion得到的差异基因最多。 还可以画个火山图看下

library(ggplot2)

df

ggplot(df, aes(x=logFC, y=-log10(df$PValue)) ) +

geom_point() +

ylab("-log10(p value)") +

theme_bw()

火山图

和有重复表达进行比较

由于我们的数据集原来是有重复的,那么我们就可以比较下无重复和有重复之间会相差多少基因

group

y_rep

keep 1) >= 5

y_rep

y_rep

design

y_rep

fit

qlf.2vs1

我们看下差异基因的数目, 是1050 + 869, 明显多于之前.

res

summary(res)

将我们有重复的前100差异基因和无重复的前100差异基因进行比较

c1

c2

intersect_gene

我们将这些交集基因标记在有重复的火山图上

library(ggplot2)

library(ggrepel)

data

data$significant 1)

data2

data2$geneID

p

geom_point(alpha=0.8, size=1.2)+

scale_color_manual(values =c("black","red"))+

labs(title="Volcanoplot", x="log2 (fold change)",y="-log10 (q-value)")+

theme(plot.title = element_text(hjust = 0.4))+

geom_hline(yintercept = -log10(0.05),lty=4,lwd=0.6,alpha=0.8)+

geom_vline(xintercept = c(1,-1),lty=4,lwd=0.6,alpha=0.8)+

#theme(legend.position='none')

theme_bw()+

theme(panel.border = element_blank(),

panel.grid.major = element_blank(),

panel.grid.minor = element_blank(),

axis.line = element_line(colour = "black")) +

geom_text(data=data2, aes(label=geneID),col="red",alpha = 1) +

geom_text_repel(data=data2, aes(label=geneID),col="black",alpha = 0.8)

print(p)

火山图2

好消息是无重复情况下的确能找到一些明显差异表达的基因,但是坏消息是改变不怎么明显的重要基因可能就会因为你设置一个阈值被筛选掉。因此无重复的分析还是能做的,就是阈值需要放宽些。

下面的代码是用来提取一些没有显著变化的基因作为之前说的housekeeping

nosig

gene_name

# y1来自上面无重复差异表达代码

y1_gene

housekeeping

edger多组差异性分析_使用edgeR进行无重复差异表达分析相关推荐

  1. edger多组差异性分析_简单使用DESeq2/EdgeR做差异分析

    DESeq2和EdgeR都可用于做基因差异表达分析,主要也是用于RNA-Seq数据,同样也可以处理类似的ChIP-Seq,shRNA以及质谱数据. 这两个都属于R包,其相同点在于都是对count da ...

  2. edger多组差异性分析_用R实现批量差异分析(t检验和方差分析),自己算P值

    对于二代数据的表达差异分析,理论上应该用reads counts进行计算.这个在我们论坛的专题帖已经有解释: 第14期"基因表达量计算和差异表达分析(下)"[视频] www.omi ...

  3. edger多组差异性分析_简单使用DESeq2/EdgeR做差异分析 – 生信笔记

    DESeq2和EdgeR都可用于做基因差异表达分析,主要也是用于RNA-Seq数据,同样也可以处理类似的ChIP-Seq,shRNA以及质谱数据. 这两个都属于R包,其相同点在于都是对count da ...

  4. edger多组差异性分析_转录组edgeR分析差异基因 | 生信菜鸟团

    转录组edgeR分析差异基因 edgeR是一个研究重复计数数据差异表达的Bioconductor软件包.一个过度离散的泊松模型被用于说明生物学可变性和技术可变性.经验贝叶斯方法被用于减轻跨转录本的过度 ...

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

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

  6. edger多组差异性分析_edgeR之配对检验分析差异基因的使用教程

    edgeR的介绍 背景 RNA-seq表达谱与生物复制的差异表达分析. 实现一系列基于负二项分布的统计方法,包括经验贝叶斯估计,精确检验,广义线性模型和准似然检验. 与RNA-seq一样,它可用于产生 ...

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

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

  8. r语言进行go富集分析_好用的在线GO富集分析工具

    点击上方蓝字关注生信宝典,换个角度学生信. GeneOntology富集分析是高通量数据分析的标配,不管是转录组.甲基化.ChIP-seq还是重测序,都会用到对一个或多个集合的基因进行功能富集分析.分 ...

  9. 怎么用spss做冗余分析_用SPSS进行医学统计信度分析——【杏花开医学统计】

    杏花开生物医药统计 一号在手,统计无忧! 关 注 用SPSS进行医学统计信度分析 关键词:SPSS.信度分析 导 读 上期,我们介绍了量表的基本形式及其研制步骤. 点击观看:<医学研究中量表研制 ...

最新文章

  1. Hadoop API文档地址
  2. 关闭windows窗口时操作
  3. Spring --- SpEL
  4. CheLunTan.Net无需注册同样享有发帖和回帖权利
  5. MySQL GROUP BY:分组查询
  6. Springboot默认加载application.yml原理
  7. 2018-2019 20165208 网络对抗 Exp3 免杀原理与实践
  8. 术语html的含义是,术语html指的是什么
  9. selector选择器查询
  10. 图的深度优先遍历和广度优先遍历_图的深度优先遍历(DFS)与广度优先遍历(BFS)的c语言实现...
  11. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_04.mybatis概述
  12. [转载]WiFi有死角? 巧用旧无线路由器扩展覆盖
  13. VTP(VLAN中继协议)简单介绍
  14. 基于导向滤波的图像融合(GFF)
  15. 免费的个人网路监控软体 NetLimiter 2 Monitor
  16. 联通短信息中心号码,联通服务中心号码速查
  17. 构造方法(设计一个Fan类来表示一个风扇)
  18. 计算机无法识别点读笔,点读笔插电脑上不识别
  19. kubernetes Pod 污点与容忍
  20. 用Excel完成专业化数据统计、分析工作

热门文章

  1. DeepFusionMOT 基于相机和激光雷达融合3d实时跟踪
  2. 高级语言中如何操作内存——变量和值
  3. Node V12.13.1安装教程
  4. java模板方法模式_JAVA 设计模式 模板方法模式
  5. chubby中文意思
  6. 王国维的人生三重境界
  7. Docker发布/上传镜像到dockerhub下载/拉取镜像删除dockerhub镜像
  8. fresco 图片加载
  9. 服务器新增硬盘不显示,dell服务器已有阵列新增的磁盘无法识别显示外来
  10. python列表和数组区别java_浅谈numpy中np.array()与np.asarray的区别以及.tolist