转录组高级分析

RNA 4. SCI 文章中基于TCGA 差异表达之 edgeR

2022-02-21  本文已影响0人  桓峰基因

01. 前言

    在不久的将来,预计新兴的数字基因表达(DGE) 技术在许多功能基因组学应用方面将超越微阵列技术。其中的一个基础数据分析任务,尤其是基因表达研究,涉及确定是否有证据表明对于转录本或外显子在实验中显著不同。

    edgeR 是用于检查的 Bioconductor 软件包重复计数数据的差异表达。过度分散的泊松模型用于解释生物学和技术变化性。经验贝叶斯方法用于调节度数跨转录本的过度分散,提高可靠性推理。该方法甚至可以使用最小的复制水平,提供至少一种表型或实验条件被复制。该软件可能有其他应用程序超越测序数据,例如蛋白质组肽计数数据。

    本篇继续展示 R 包 edgeR 的差异基因分析流程。类似 limma, DESeq2,edgeR 作为被广泛使用的 R 包,文献中经常能看到它的身影。基于转录组测序获得的定量表达值,识别差异表达变化的基因或其它非编码 RNA 分子,实际上方法还是非常多的。

02. 数据文件读取

    数据的读取我们仍然使用的是 TCGA-COAD 的数据集,表达数据的读取以及临床信息分组的获得我们上期已经提过,不过这里还是附上源代码,方便大家对整体分析有个全面的理解,如下:

library(TCGAbiolinks)
query <- GDCquery(project ="TCGA-COAD",
data.category = "Transcriptome Profiling",
data.type ="Gene Expression Quantification" ,
workflow.type="HTSeq - Counts")
samplesDown <- getResults(query,cols=c("cases"))  

dataSmTP <- TCGAquery_SampleTypes(barcode = samplesDown,
typesample = "TP")

dataSmNT <- TCGAquery_SampleTypes(barcode = samplesDown,
typesample = "NT")

group<-as.data.frame(list(Sample=c(dataSmTP,dataSmNT),
Group=c(rep("TP",length(dataSmTP)),rep("NT",length(dataSmNT)))))

###设置barcodes参数
queryDown <- GDCquery(project = "TCGA-COAD",
data.category = "Transcriptome Profiling",
data.type = "Gene Expression Quantification",
workflow.type = "HTSeq - Counts", barcode = c(dataSmTP, dataSmNT))
# 首次下载数据需要执行,这里已经下载过了,不在执行,默认存放位置为当前工作目录下的GDCdata文件夹中。
#GDCdownload(queryDown,method = "api",
# directory = "GDCdata",
# files.per.chunk = 10)

# GDCprepare():Prepare GDC data,准备GDC数据,使其可用于R语言中进行分析
dataPrep1 <- GDCprepare(query = queryDown,
save = TRUE,
save.filename = "COAD_case.rda")
# 函数功能描述:Array Array Intensity correlation (AAIC) and correlation boxplot to define outlier

dataPrep2 <- TCGAanalyze_Preprocessing(object = dataPrep1,
cor.cut = 0.6,
datatype = "HTSeq - Counts")
dim(dataPrep2)

03. 数据预处理

    在数据处理这部分,我们使用 edgeR 的数据过滤模式,该文章提到的过滤 low count 数据,例如 CPM 标准化(推荐),然后标准化,以 TMM 标准化为例,如下:

library(edgeR)
#(1)构建表格
dgelist <- DGEList(counts = dataPrep2, group = group$Group)

#(2)过滤
keep <- rowSums(cpm(dgelist) > 1 ) >= 2
dgelist <- dgelist[keep, , keep.lib.sizes = FALSE]

#(3)标准化
dgelist_norm <- calcNormFactors(dgelist, method = 'TMM')

04. 差异表达分析

    首先根据分组信息构建试验设计矩阵,分组信息中一定要是对照组在前,处理组在后,然后)估算基因表达值的离散度,模型拟合,edgeR 提供了2种拟合算法包括:

  1. 负二项广义对数线性模型;

  2. 拟似然负二项广义对数线性模型。

design <- model.matrix(~group$Group)

#install.packages("statmod")
library(statmod)
dge <- estimateDisp(dgelist_norm, design, robust = TRUE)

#(2)模型拟合,edgeR 提供了多种拟合算法
#负二项广义对数线性模型
fit1 <- glmFit(dge, design, robust = TRUE)
lrt1 <- topTags(glmLRT(fit1), n = nrow(dgelist$counts))
lrt1<-as.data.frame(lrt1)
head(lrt1)
##                     logFC      logCPM        LR        PValue           FDR
## ENSG00000142959 -5.924830 3.20085238 1457.1137 8.159939e-319 2.592984e-314
## ENSG00000163815 -4.223787 2.59792097 1145.7948 3.679815e-251 5.846674e-247
## ENSG00000107611 -5.131288 1.71477711 1122.0643 5.289173e-246 5.602468e-242
## ENSG00000162461 -4.101967 1.51480635 1085.9423 3.752089e-238 2.980753e-234
## ENSG00000163959 -4.295806 3.39558390 1080.7407 5.067873e-237 3.220836e-233
## ENSG00000144410 -6.284258 -0.02616284 916.3497 2.739233e-201 1.450744e-197
#拟似然负二项广义对数线性模型
fit2 <- glmQLFit(dge, design, robust = TRUE)
lrt2 <- topTags(glmQLFTest(fit2), n = nrow(dgelist$counts))

05. 绘制火山图

    火山图的绘制仍然使用 EnhancedVolcano 包,因为非常好用,只需要修改几个参数,比如输入矩阵的变量,x, y 变量所使用的列名称即可,输出火山图,这里我们使用的是负二项广义对数线性模型获得的差异基因结果,如下:

require(EnhancedVolcano)
EnhancedVolcano(lrt1,
lab = rownames(lrt1),
labSize = 2,
x = "logFC",
y = "PValue",
#selectLab = rownames(lrt)[1:4],
xlab = bquote(~Log[2]~ "fold change"),
ylab = bquote(~-Log[10]~italic(P)),
pCutoff = 0.001,## pvalue闃堝€?
FCcutoff = 1,## FC cutoff
xlim = c(-5,5),
ylim = c(0,5),
colAlpha = 0.6,
legendLabels =c("NS","Log2 FC"," p-value",
" p-value & Log2 FC"),
legendPosition = "top",
legendLabSize = 10,
legendIconSize = 3.0,
pointSize = 1.5,
title ="edgeR results",
subtitle = 'Differential Expression Genes',
)

06. 筛选差异基因

    筛选差异基因,首先对表格排个序,按 FDR 值升序排序,相同 FDR 值下继续按 log2FC 降序排序,然后标记三种情况的基因:

  1. 上调的基因:log2FC≥1 & FDR<0.01 标识 up;

  2. 下调的基因:log2FC≤-1 & FDR<0.01 标识 down;

  3. 非差异的基因:其余标识 none。

lrt1 <- lrt1[order(lrt1$FDR, lrt1$logFC, decreasing = c(FALSE, TRUE)), ]

lrt1[which(lrt1$logFC >= 1 & lrt1$FDR < 0.01),'sig'] <- 'up'
lrt1[which(lrt1$logFC <= -1 & lrt1$FDR < 0.01),'sig'] <- 'down'
lrt1[which(abs(lrt1$logFC) <= 1 | lrt1$FDR >= 0.01),'sig'] <- 'none'
#输出选择的差异基因总表
res <- subset(lrt1, sig %in% c('up', 'down'))
head(res)
##                     logFC      logCPM        LR        PValue           FDR  sig
## ENSG00000142959 -5.924830 3.20085238 1457.1137 8.159939e-319 2.592984e-314 down
## ENSG00000163815 -4.223787 2.59792097 1145.7948 3.679815e-251 5.846674e-247 down
## ENSG00000107611 -5.131288 1.71477711 1122.0643 5.289173e-246 5.602468e-242 down
## ENSG00000162461 -4.101967 1.51480635 1085.9423 3.752089e-238 2.980753e-234 down
## ENSG00000163959 -4.295806 3.39558390 1080.7407 5.067873e-237 3.220836e-233 down
## ENSG00000144410 -6.284258 -0.02616284 916.3497 2.739233e-201 1.450744e-197 down

差异基因个数, 还是蛮多的,估计是正常样本的数据量挺少的,导致偏向性非常高。

table(res$sig)
## 
## down up
## 3308 8164

    基于基因表达的三个软件包 limma, DESeq2,edgeR 都已经介绍了,筛选自己的数据用起来吧,后面在讲文章中差异表达的数据在 SCI 文章中怎样展示给出大家,敬请期待!

关注公众号,每日有更新!

生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你 41篇原创内容 --> 公众号:桓峰基因

Reference:

  1. Robinson MD, McCarthy DJ, Smyth GK. edgeR: a Bioconductor package for differential expression analysis of digital gene expression data. Bioinformatics. 2010;26(1):139-140.

  2. Agarwal A, Koppstein D, Rozowsky J, et al. Comparison and calibration of transcriptome data from RNA-Seq and tiling arrays. BMC Genomics. 2010;11:383.

  3. Love MI, Huber W, Anders S. Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biol. 2014;15(12):550.

  4. Maurya NS, Kushwaha S, Chawade A, Mani A. Transcriptome profiling by combined machine learning and statistical R analysis identifies TMEM236 as a potential novel diagnostic biomarker for colorectal cancer. Sci Rep. 2021;11(1):14304.

本文使用 文章同步助手 同步

上一篇下一篇

猜你喜欢

热点阅读