一个闪亮的应用程序可视化的DESeq2结果

祖光谷(z.gu@dkfz.de

2022-10-02

在这个小插图中,我演示了如何实现一个闪亮的应用程序来可视化DESeq2结果InteractiveComplexHeatmap包中。

从头开始实现

首先,我们运行DESeq2分析气道数据集:

图书馆(气管)数据(气管)气道图书馆(DESeq2)DESeqDataSet(se,设计=敏捷)rowSums计数(dds))> =10dds [,]$敏捷=relevel(dds敏捷,ref =“untrt”DESeq(dds)结果(dds)as.data.frame(res)

因为我们使用InteractiveComplexHeatmap包裹,我们从热图开始。以下是这款闪亮应用的想法:

  1. 应用程序从热图开始,热图显示了显著差异表达的基因。
  2. 当从热图中进行选择时,所选基因在ma图和火山图中突出显示,因此很容易对应这些基因的基均值、log2倍变化和fdr。
  3. 还应该有一个表,其中包含来自所选基因的DESeq2分析的统计数据。
  4. 热图可以通过不同的截断来重新生成,以选择重要基因。

我们首先定义几个函数:

  1. make_heatmap ():制作特定截断点下的差异基因热图。
  2. make_maplot ():绘制ma图,高亮选中基因的一个子集。
  3. make_volcano ():绘制火山图,高亮选定基因的子集。

make_maplot ()而且make_volcano ()基本上是散点图,它们的定义非常相似。

热图只包含差异基因的信息,也就是说,所有的指数捕获InteractiveComplexHeatmap只局限于差异基因的基质。在make_maplot ()而且make_volcano (),他们期望基因的指标来自于完整的基因集,因此,我们创建了一个环境变量env这样就节省了差异基因在功能上的完备性和共享性。

图书馆(InteractiveComplexHeatmap)图书馆(ComplexHeatmap)图书馆(circlize)图书馆(GetoptLong)new.env()函数罗斯福=0.01base_mean =0log2fc =0){respadj< =罗斯福resbaseMean> =base_mean腹肌(reslog2FoldChange)> =log2fc;l (is.na(左)]=如果(总和(左)= =0返回计数(dds,归一化=真正的m [l]$row_index =哪一个(左)的热图t规模t(m))),name =“z分数”top_annotation =HeatmapAnnotation敏捷=colData(dds)敏捷,sizeFactor =anno_pointscolData(dds)sizeFactor)show_row_names =show_column_names =row_km =2column_title =paste0总和(左)," FDR <的显著基因"罗斯福)show_row_dend =+的热图log10(resbaseMean [l]+1),show_row_names =宽度=单位5“毫米”),name =“log10 (baseMean + 1)”show_column_names =+的热图(reslog2FoldChange [l],show_row_names =宽度=单位5“毫米”),name =“log2FoldChange”show_column_names =坳=colorRamp2c-202),c“绿色”“白色”“红色”)))(ht,merge_legend =真正的#突出显示一些基因的ma图函数(res,突出=){代表“# 00000020”nrow(res))代表0.5nrow(res))的名字(col) =rownames(res)的名字(cex) =rownames(res)如果(is.null(强调)){“红色”1resbaseMeanreslog2FoldChange>2] =2<-2] =-2= =“红色”y<0] =“暗绿色”票面价值(3月=c4411))suppressWarnings(情节(x, y,坳=上校,pch =ifelse(reslog2FoldChange>2|reslog2FoldChange<-2116),cex =cex,日志=“x”xlab =“baseMean”ylab =log2倍变化#突出一些基因的火山图函数(res,突出=){代表“# 00000020”nrow(res))代表0.5nrow(res))的名字(col) =rownames(res)的名字(cex) =rownames(res)如果(is.null(强调)){“红色”1reslog2FoldChange-log10(respadj)= =“红色”x<0] =“暗绿色”票面价值(3月=c4411))suppressWarnings(情节(x, y,坳=上校,pch =16cex =cex,xlab =log2倍变化ylab =“log10(罗斯福)”
    
图书馆(亮)图书馆(shinydashboard)dashboardBodyfluidRow(列(宽度=4盒子(title =“差热图”宽度=solidHeader =真正的状态=“主”originalHeatmapOutput(“ht”身高=800遏制=真正的列(宽度=4id =“column2”盒子(title =“Sub-heatmap”宽度=solidHeader =真正的状态=“主”subHeatmapOutput(“ht”title =遏制=真正的盒子(title =“输出”宽度=solidHeader =真正的状态=“主”HeatmapInfoOutput(“ht”title =盒子(title =“注意”宽度=solidHeader =真正的状态=“主”htmlOutput(“注意”列(宽度=4盒子(title =“MA-plot”宽度=solidHeader =真正的状态=“主”plotOutput(“ma_plot”盒子(title =“Volcanno阴谋”宽度=solidHeader =真正的状态=“主”plotOutput(“volcanno_plot”盒子(title =“所选基因结果表”宽度=solidHeader =真正的状态=“主”DTOutput(“res_table”风格.content-wrapper, .right side {overflow-x:汽车;.content {min-width: 1500 px;")
    
图书馆(DT)图书馆(GetoptLong)# for qq()函数函数(df,输入,输出,会话){独特的unlist(dfrow_index))envrow_index [row_index]“ma_plot”]] =renderPlot({make_maplot(res,选择)“volcanno_plot”]] =renderPlot({make_volcano(res,选择)“res_table”]] =renderDTformatRound(数据表(res[选中,c“baseMean”“log2FoldChange”“padj”)),rownames =真正的),列=13.数字=3.“注意”]] =renderUI({如果(is.null(df)) {超文本标记语言(qq

Output中捕获的行指数仅对应于差异基因的矩阵。要获得原始矩阵中的行索引,您需要执行:

< >之前L = res$padj <= @{input$fdr} &res$baseMean >= @{输入$base_mean} &abs(res$log2FoldChange) >= @{input$log2fc}l[is.na(l)] = FALSE(左)[row_index]< / >之前

,其中res是来自DESeq2分析的完整数据帧,row_indexrow_index列,从Output.

"))
dashboardPagedashboardHeader(title =“DESeq2结果”),dashboardSidebar(selectInput(“罗斯福”标签=“fdr的截止日期:”c“0.001”0.001“0.01”0.01“0.05”0.05)),numericInput(“base_mean”标签=“最小基础平均值:”值=0),numericInput(“log2fc”标签=“最小腹肌(log2倍变化):”值=0),actionButton(“过滤”标签=“生成的热图”
    
函数(输入,输出,会话){observeEvent(输入过滤器,{make_heatmap罗斯福=as.numeric(输入罗斯福),base_mean =输入base_mean,log2fc =输入log2fc)如果(is.null(ht)) {makeInteractiveComplexHeatmap(输入,输出,会话,ht,“ht”brush_action =brush_action)其他的{#热图图的ID被编码为@{heatmap_id}_heatmap,因此,它在这里是ht_heatmap。$ht_heatmap =renderPlot({grid.newpage()grid.text(“过滤后不存在行。”ignoreNULL =
    
shinyApp(ui、服务器)

这个应用程序可以直接生成htShinyExample (10.5).app的演示如下图所示:

这个函数interactivate ()

InteractiveComplexHeatmap有一个泛型函数interactivate ()它旨在提供一个API,为包含特定分析结果的对象生成闪亮的应用程序。的实现DESeqDataSet对象,来自DESeq2分析。它可以简单地用作: