第 6 章 一致性评估

edgeR, DESeq2, limma-voom三种方法的差异表达基因分析结果的一致性评估。

6.1 加载数据

# 加载包
bio.p <- c("tidyverse", "tinyarray")
status = suppressPackageStartupMessages(
  lapply(bio.p, library, character.only = TRUE)
  )

load(file = 'Rdata/DEG_edgeR.RData');edgeR <- total
load(file = 'Rdata/DEG_DESeq2.RData');DESeq2 <- total
load(file = 'Rdata/DEG_limma-voom.RData');limma_voom <- total

6.2 可视化

6.2.1 韦恩图

图 1

gene_sets <- list(
  edgeR = edgeR %>% filter(FDR < 0.05) %>% 
    filter(log2FoldChange > 1 | log2FoldChange < -1) %>% pull(SYMBOL),
  DESeq2 = DESeq2 %>% filter(FDR < 0.05) %>% 
    filter(log2FoldChange > 1 | log2FoldChange < -1) %>% pull(SYMBOL),
  limma_voom = limma_voom %>% filter(FDR < 0.05) %>% 
    filter(log2FoldChange > 1 | log2FoldChange < -1) %>% pull(SYMBOL)
)
draw_venn(x = gene_sets, "genes")

图 2

library(VennDiagram)
library(grid)
library(RColorBrewer)

# 创建高级调色板
pal <- brewer.pal(3, "Set2")
grad_pal <- colorRampPalette(c("#f7f7f7", "#08306b"))

venn.plot <- venn.diagram(
  x = gene_sets,
  category.names = c("edgeR", "DESeq2", "limma_voom"),
  filename = NULL,
  imagetype = "pdf",
  
  # 高级图形参数
  fill = pal,
  alpha = 0.65,
  lwd = 3,
  col = "white",  # 边界颜色
  
  # 标签优化
  label.col = "black",
  cex = 1.8,
  fontfamily = "sans",
  
  # 类别名称优化
  cat.col = pal,
  cat.cex = 1.5,
  cat.fontfamily = "sans",
  cat.just = list(c(0.5,0.5), c(0.5,0.5), c(0.5,0.5)),
  
  # 背景优化
  margin = 0.05,
  main = "Genes differentially expressed in 3 methods",
  main.cex = 1.8,
  main.col = "#2c3e50"
)

# 添加自定义图例
grid.newpage()
pushViewport(viewport(width=0.8, height=0.8))
grid.draw(venn.plot)

6.2.2 UpSet图

library(UpSetR)
gene_sets <- list(
  edgeR = edgeR %>% filter(FDR < 0.05) %>% 
    filter(log2FoldChange > 1 | log2FoldChange < -1) %>% pull(SYMBOL),
  DESeq2 = DESeq2 %>% filter(FDR < 0.05) %>% 
    filter(log2FoldChange > 1 | log2FoldChange < -1) %>% pull(SYMBOL),
  limma_voom = limma_voom %>% filter(FDR < 0.05) %>% 
    filter(log2FoldChange > 1 | log2FoldChange < -1) %>% pull(SYMBOL)
)
upset(fromList(gene_sets), 
            nsets = 3,
            order.by = "freq", 
            mainbar.y.label = "Intersection size", 
            sets.x.label = "Set Size",
            text.scale = 1.5,  # 增加文本大小提高可读性
            point.size = 3.5,  # 增大矩阵中的点
            line.size = 1.5,   # 加粗连接线
            main.bar.color = "darkred",  # 设置主柱状图颜色
            sets.bar.color = "steelblue",  # 设置集合大小柱状图颜色
            shade.color = "lightblue"  # 设置连接点的阴影颜色
)