-
Notifications
You must be signed in to change notification settings - Fork 12
/
ui.R
859 lines (831 loc) · 41.2 KB
/
ui.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
###################################################
# Author: Steven Ge [email protected]
# Lab: Ge Lab
# R version 4.1
# Project: ShinyGO
# File: ui.R
# Purpose of file:ui logic of app
# Start data: NA (mm-dd-yyyy)
# Data last modified: 04-8-2022
#######################################################
library(shiny, verbose = FALSE)
library(shinyBS, verbose = FALSE) # for popup figures
library(plotly) # interactive network plot
library(visNetwork)
library("shinyjs", verbose = FALSE)
library("reactable", verbose = FALSE)
columnSelection <- list(
"-log10(FDR)" = "EnrichmentFDR",
"Fold Enrichment" = "FoldEnrichment",
"Genes" = "nGenes",
"Category Name" = "Pathway"
)
ui <- fluidPage(
# reduce the space between label and widgets, globally
tags$head(
tags$style(HTML(
"label { font-size:100%; font-family:Times New Roman; margin-bottom:-15px; }"
))
),
sidebarLayout(
sidebarPanel(
titlePanel("ShinyGO 0.77"),
h5("Select or search your species:"),
fluidRow(
column(9, selectizeInput("selectOrg",
label = NULL,
choices = " ",
multiple = TRUE,
options = list(
maxItems = 1,
placeholder = "Best matching species",
onInitialize = I('function() { this.setValue(""); }')
)
)),
column(3, actionButton("MorgInfo", "Info"))
),
fluidRow(
column(8, actionButton("useDemo1", "Demo genes"), ),
# column(4, actionButton("useDemo2", "Demo 2"), ),
column(4, p(HTML("<div align=\"right\"> <A HREF=\"javascript:history.go(0)\">Reset</A></div>")))
),
tags$style(type = "text/css", "textarea {width:100%}"),
tags$textarea(
id = "input_text", placeholder = "Just paste a list of genes and click Submit. Most types of gene IDs accepted. Double check the guessed species, and adjust if needed. ",
rows = 8, ""
),
fluidRow(
column(8, actionButton("backgroundGenes", "Background (recommended)")),
column(4, actionButton("goButton", strong("Submit")))
),
br(),
htmlOutput("selectGO1"),
fluidRow(
column(
6,
numericInput(
inputId = "minFDR",
label = h5("FDR cutoff"),
value = 0.05, step = 0.01
),
tippy::tippy_this(
"minFDR",
"Minimum P-value, ajusted using the FDR (false discovery rate)
method. P-value is derived from hypergeometric distribution.
Really significant FDR are between 1E-5 to 1E-20. Be cautious
when you get an FDR of 1E-2 or 1E-3, as thousands of
gene sets are tested.",
theme = "light-border"
)
),
column(
6,
selectInput("maxTerms", h5("# pathways to show"),
choices = list(
"10" = 10,
"20" = 20,
"30" = 30,
"40" = 40,
"50" = 50,
"60" = 60,
"80" = 80,
"100" = 100,
"200" = 200,
"500" = 500
),
selected = "20",
selectize = FALSE
),
tippy::tippy_this(
"maxTerms",
"How many top pathways to show.
You can download nearly all significant ones.
We typically recommend focusing on the top 10 to 20 pathways.
If you go down the list,
you can always find the one that help you tell the story you
want to tell.",
theme = "light-border"
)
)
),
# tags$style(type='text/css', "#minFDR { width:100%; margin-top:-15px}"),
# selectInput("selectOrg", label = NULL,"Best matching species",width='100%'),
fluidRow(
column(
width = 6,
numericInput("minSetSize",
label = h5("Pathway size: Min."),
min = 2,
max = 30,
value = 2,
step = 1
),
tippy::tippy_this(
"minSetSize",
"Smaller pathways can introduce noise. Generally safe to incrase to 10 or 15.
It is automatically raised to 10 when \"Sort by Fold Enrichment \" is selected.",
theme = "light-border"
)
),
column(
width = 6,
numericInput("maxSetSize",
label = h5("Max."),
min = 1000,
max = 5000,
value = 2000,
step = 100
),
tippy::tippy_this(
"maxSetSize",
"Big gene sets, such as those associated with top-level GO term
\"Cellular Process\", are less informative, but
tend to have small P values due to increased power.",
theme = "light-border"
)
)
), # fluidRow
# tags$style(type='text/css', "#minSetSize { width:100%; margin-top:-12px}"),
# tags$style(type='text/css', "#maxSetSize { width:100%; margin-top:-12px}"),
fluidRow(
column(
width = 6,
checkboxInput(
"removeRedudantSets",
"Remove redundancy",
value = TRUE
),
tippy::tippy_this(
"removeRedudantSets",
"Similar pathways sharing 95% of genes are represented by the most significant pathway.",
theme = "light-border"
)
),
column(
width = 6,
checkboxInput(
"abbreviatePathway",
"Abbreviate pathways",
value = TRUE
),
tippy::tippy_this(
"abbreviatePathway",
"Positive regulation --> Pos. reg.",
theme = "light-border"
)
)
), # fluidRow
checkboxInput(
"gene_count_pathwaydb",
"Use pathway database for gene counts",
value = FALSE
),
tippy::tippy_this(
"gene_count_pathwaydb",
"If turned on, a gene must match at least one pathway in the selected pathway database.
Otherwise, this gene is ignored when calculating enrichment. Be cautious
when the selected pathway database is small, such as KEGG. ",
theme = "light-border"
),
actionButton("MGeneIDexamples", "Gene IDs examples"),
tippy::tippy_this(
"MGeneIDexamples",
"Show some example gene IDs in our database for a specific species.",
theme = "light-border"
),
h5("Try ", a(" iDEP", href = "https://bioinformatics.sdstate.edu/idep/", target = "_blank"), "for RNA-Seq data analysis"),
tableOutput("species")
), # sidebarPanel
mainPanel(
tabsetPanel(
id = "tabs", type = "tabs",
tabPanel("Enrichment",
value = 1,
conditionalPanel(
"input.goButton == 0 ", # welcome screen
br(),
p("5/1/2023: ",
a(
"ShinyGO 0.80",
href = "http://bioinformatics.sdstate.edu/go80/"
),
"release in testing mode. Thanks to Jenny's hardwork, we update to Ensembl release
107 which includes 620 species: 215 main, 177 metazoa, 124 plants, 33 protists and 1 bacteria.
We also included 14,094 species from STRING-DB 11.5."
),
h4(
"Thank you to the 1% of users who sent us support letters! To support us going forward, cite our paper.",
),
p(
"Jan. 19, 2023: Thanks to a user's feedback, we found a serious bug
in ShinyGO 0.76.
As some genes are represented by multiple gene IDs in Ensebml, they are counted more
than once in calculating enrichment. We believe this is fixed. If you
pasted Ensembl gene IDs to ShinyGO 0.76 between April 4, 2022 and Jan. 19, 2023,
please rerun your analysis. ShinyGO has not been throughly tested.
Please always double check your results with other tools
such as G:profiler, Enrichr, STRING-db, and DAVID."
),
p(
"If this server is busy, please use a mirror sever ",
a("http://ge-lab.org/go/", href = "http://149.165.154.220/go/"),
" hosted by NSF-funded JetStream2."
),
p(
a(
"Email Jenny ",
href = "mailto:[email protected]?Subject=ShinyGO",
target = "_blank"
),
"([email protected]) for questions, suggestions or data contributions.",
"Follow ", a("Dr Ge on Twitter", href = "https://twitter.com/StevenXGe"),
" for updates. "
),
p("Feb. 11, 2022: Like ShinyGO but your genome is not covered?",
a("Customized ShinyGO", href = "http://bioinformatics.sdstate.edu/goc/"), " is now available.
Its database includes several custom genomes requested by users. To request to add a new species/genome, fill in this ",
a("Form.", href = "https://forms.gle/zLtLnqxkW187AgT76"),
style = "color:red"
),
h3("A graphical tool for gene enrichment analysis"),
p("Just paste your gene list to get enriched GO terms and othe pathways for over 420 plant and animal species,
based on annotation from Ensembl, Ensembl plants and Ensembl Metazoa. An additional 5000 genomes
(including bacteria and fungi) are annotated based on STRING-db (v.11). In addition, it also produces
KEGG pathway diagrams with your genes highlighted, hierarchical clustering trees and networks summarizing
overlapping terms/pathways, protein-protein interaction networks, gene characterristics plots, and enriched promoter motifs.
See example outputs below:"),
br(), img(src = "enrich.png", align = "center", width = "660", height = "339"),
br(), img(src = "enrichmentChart.png", align = "center", width = "700", height = "400"),
br(), br(), img(src = "KEGG2.png", align = "center", width = "541", height = "360"),
br(), br(), img(src = "GOtree3.png", align = "center", width = "500", height = "258"),
br(), br(), img(src = "GOnetwork2.png", align = "center", width = "500", height = "248"),
br(), br(), img(src = "PPInetwork2.png", align = "center", width = "500", height = "391"),
br(), br(), img(src = "chr.png", align = "center", width = "444", height = "338"),
br(), br(), img(src = "downSyndrome.png", align = "center", width = "371", height = "276"),
br(), br(), img(src = "promoter.png", align = "center", width = "717", height = "288")
),
br(),
div(
style = "display:inline-block",
selectInput(
inputId = "SortPathways",
label = NULL,
choices = c(
"Sort by FDR" = "Sort by FDR",
"Sort by Fold Enrichment" = "Sort by Fold Enrichment",
"Sort by average ranks(FDR & Fold)" = "Sort by FDR & Fold Enrichment",
"Select by FDR, sort by Fold Enrichment" = "Select by FDR, sort by Fold Enrichment",
"Sort by Genes" = "Sort by Genes",
"Sort by Category Name" = "Sort by Category Name"
),
selected = "Select by FDR, sort by Fold Enrichment"
),
style = "algn:right"
),
tableOutput("EnrichmentTable"),
conditionalPanel(
"input.goButton != 0",
downloadButton("downloadEnrichment", "Top Pathways shown above"),
downloadButton("downloadEnrichmentAll", "Results on all Pathways"),
br(), br(),
p("All query genes are first converted to ENSEMBL gene IDs or STRING-db protein IDs. Our gene ID mapping and pathway
data are mostly derived from these two sources. For the 20 most studied species, we also manually collected a
large number of pathways from various public databases."),
p("FDR is calculated based on nominal P-value from the hypergeometric test. Fold Enrichment is defined as the percentage
of genes in your list belonging to a pathway, divided by the corresponding percentage in the
background. FDR tells us how likely the enrichment is by chance. Due to increased statistical power,
large pathways tend to have smaller FDRs.
As a measure of effect size, Fold Enrichment indicates how drastically genes of a certain pathway is overrepresented.
This is a important metric, even though often ignored."),
p("We highly recommend users upload a list of genes as the background.
These could be all the genes passed a low filter in RNA-seq.
If background genes are not uploaded, the default is to use
all protein-coding genes. Alternatively, you can check the box next to 'Use pathway database
for gene counts', which will calculate background genes as the total unique
nubmer of genes in pathway database that users choose.
As some pathway database can be huge and have genes not properly
converted, we limit the total nubmer to between 5000 and 30,000. When this option is used,
any genes in user's original gene list but
not in the pathway database will also be ignored."),
p("Only pathways that are within the specified size limits are used for enrichment analysis.
After the analysis is done, pathways are first filtered based on a user specified FDR cutoff.
Then the siginificant pathways are sorted by FDR, Fold Enrichment, or other metrics.
When 'Sort by average ranks(FDR & Fold)' is selected, significant pathways are
sorted by the average of the ranks by FDR and Fold Enrichment.
By selecting 'Select by FDR, sort by Fold Enrichment',
users first select the top pathways by FDR,
then these are sorted by Fold Enrichment.
When 'Remove redundancy' is selected, similar pathways sharing 95% of genes are represented by the most significant pathway.
Redundant pathways also needs to share 50% of the words in their names. When 'Remove redundancy' is selected longer pathway names
are also represented by the first 80 characters.
")
)
), # enrichment tab
#---Enrichment Chart-----------------------------------------------------------
tabPanel("Chart",
value = 3,
plotOutput("enrichChart", width = "100%", height = "100%"),
fluidRow(
column(3, selectInput(
inputId = "SortPathwaysPlot",
label = h5("Sort Pathway by"),
choices = columnSelection,
selected = columnSelection[2]
)),
column(3, selectInput(
inputId = "SortPathwaysPlotX",
label = h5("x-axis"),
choices = columnSelection[1:3],
selected = columnSelection[2]
)),
column(3, selectInput(
inputId = "SortPathwaysPlotColor",
label = h5("Color"),
choices = columnSelection[1:3],
selected = columnSelection[1]
)),
column(3, selectInput(
inputId = "SortPathwaysPlotSize",
label = h5("Size"),
choices = columnSelection[1:3],
selected = columnSelection[3]
))
), # first row
fluidRow(
column(3, numericInput(
inputId = "SortPathwaysPlotFontSize",
label = h5("Font Size"),
value = 12,
min = 3,
max = 18,
step = 1
)),
column(3, numericInput(
inputId = "SortPathwaysPlotMarkerSize",
label = h5("Circle Size"),
value = 4,
min = 0,
max = 10,
step = 1
)),
column(3, selectInput(
inputId = "SortPathwaysPlotHighColor",
label = h5("Color:High"),
choices = c("red", "orange", "yellow", "green", "blue", "purple"),
selected = "red"
)),
column(3, selectInput(
inputId = "SortPathwaysPlotLowColor",
label = h5("Color:Low"),
choices = c("red", "orange", "yellow", "green", "blue", "purple"),
selected = "blue"
))
), # 2nd row
fluidRow(
column(width = 3, selectInput(
inputId = "enrichChartType",
label = h5("Chart type"),
choices = c("lollipop", "dotplot", "barplot"),
selected = "lollipop"
)),
column(3, selectInput(
inputId = "enrichChartAspectRatio",
label = h5("Aspect Ratio"),
choices = .1 * (5:30),
selected = 2
)),
column(
width = 3,
selectInput(
inputId = "ggplot2_theme",
label = h5("Plot theme:"),
choices = c(
"default", # no change
"gray",
"bw",
"light",
"dark",
"classic",
"minimal",
"linedraw",
"Add grid"
),
selected = "default",
selectize = FALSE
),
tippy::tippy_this(
"ggplot2_theme",
"Changes the ggplot2 theme for all plots, including those in the Plots tab.",
theme = "light-border"
)
),
column(3, style = "margin-top: 25px;", mod_download_images_ui("download_barplot"))
) # 3rd row
),
#---Tree-----------------------------------------------------------
tabPanel("Tree",
value = 4,
h5("A hierarchical clustering tree summarizes the correlation among significant pathways
listed in the Enrichment tab. Pathways with many shared genes are clustered together.
Bigger dots indicate more significant P-values. The width of the plot can be
changed by adjusting the width of your browser window."),
fluidRow(
column(width = 3, selectInput(
inputId = "treeChartAspectRatio",
label = h5("Aspect Ratio"),
choices = .1 * (5:40),
selected = 2
)),
column(3, style = "margin-top: 25px;", mod_download_images_ui("download_tree", label = "Download"))
),
plotOutput("GOTermsTree")
),
#---Enrichment network-------------------------------------------------------
tabPanel("Network",
value = 5,
fluidRow(
column(2, actionButton("layoutButton", "Change layout")),
column(2, actionButton("GONetwork", "Static plot")),
column(2, h5("Edge cutoff:"), align = "left"),
column(2, numericInput("edgeCutoff", label = NULL, value = 0.30, min = 0, max = 1, step = .1), align = "right"),
column(2, checkboxInput("wrapTextNetwork", "Wrap text", value = TRUE))
),
visNetworkOutput("enrichmentNetworkPlotInteractive", height = "800px", width = "800px"),
downloadButton("enrichmentNetworkPlotInteractiveDownload", "Download HTML"),
downloadButton("downloadEdges", "Edges"),
downloadButton("downloadNodes", "Nodes"),
h5("Similar to the Tree tab, this interactive plot also shows the relationship between enriched pathways.
Two pathways (nodes) are connected if they share 20% (default) or more genes.
You can move the nodes by dragging them, zoom in and out by scrolling,
and shift the entire network by click on an empty point and drag.
Darker nodes are more significantly enriched gene sets.
Bigger nodes represent larger gene sets.
Thicker edges represent more overlapped genes.")
),
#---KEGG-----------------------------------------------------------
tabPanel("KEGG",
value = 2,
conditionalPanel(
"input.selectGO != 'KEGG' ",
br(), br(),
h5("Please select KEGG from the pathway databases to conduct enrichment analysis first.
Then you can visualize your genes on any of the significant pathways. Only for some species.")
),
conditionalPanel(
"input.selectGO == 'KEGG' ",
htmlOutput("listSigPathways"),
br(), br(), imageOutput("KeggImage", width = "100%", height = "100%"),
h5("Your genes are highlighted in red. Downloading pathway diagram from KEGG can take 3 minutes. ")
)
),
#---Genes-----------------------------------------------------------
tabPanel("Genes",
value = 6,
fluidRow(
column(3, downloadButton("downloadGeneInfo", "More info")),
column(4, checkboxInput("showDetailedGeneInfo", "Detailed Description", value = FALSE))
),
tableOutput("conversionTable")
),
#---Groups-----------------------------------------------------------
tabPanel("Groups",
value = 7,
downloadButton("downloadGrouping", "Download"),
h5("Your genes are grouped by functional categories defined by high-level GO terms. "),
tableOutput("grouping")
),
#---Plots-----------------------------------------------------------
tabPanel("Plots",
value = 8,
h5("The characteristics of your genes are compared with the rest in the genome. Chi-squared and Student's
t-tests are run to see if your genes have special characteristics when compared with all the other genes or, if uploaded, a customized background."),
fluidRow(
column(
width = 4,
mod_download_images_ui("download_gene_plot_dist", "Download density plots")
),
column(
width = 4,
mod_download_images_ui("download_gene_barplot", "Download barplots")
)
),
br(),
plotOutput("genePlot2", inline = TRUE, width = "auto", height = "auto"),
plotOutput("gene_barplot", inline = TRUE, width = "auto", height = "auto")
),
#---Genome-----------------------------------------------------------
tabPanel("Genome",
value = 9,
plotlyOutput("genomePlotly", height = "900px"),
fluidRow(
column(3, selectInput(
inputId = "MAwindowSize",
label = h5("Window Size(Mb)"),
selected = 6,
choices = c(1, 2, 4, 6, 8, 10, 15, 20)
)),
column(3, selectInput(
inputId = "MAwindowSteps",
label = h5("Steps in a window"),
choices = unique(1:4),
selected = c(2)
)),
column(3, selectInput(
inputId = "chRegionPval",
label = h5("FDR cutoff for windows"),
selected = 0.00001,
choices = c(0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001, 0.000001)
))
),
fluidRow(
column(4, checkboxInput("labelGeneSymbol", "Label genes", value = FALSE)),
column(4, checkboxInput("ignoreNonCoding", "Coding genes only", value = TRUE)),
column(4, actionButton("gPlotstatic", "Static plot"))
),
h5("The genes are represented by red dots. The purple lines indicate regions where
these genes are statistically enriched, compared to the density of genes in the background.
We scanned the genome with a sliding window. Each window is further divided into several
equal-sized steps for sliding. Within each window we used the hypergeometric test to
determine if your genes are significantly overrepresented. Essentially, the genes in
each window define a gene set/pathway, and we carried out enrichment analysis. The
chromosomes may be only partly shown as we use the last gene's location to draw the line.
Mouse over to see gene symbols. Zoom in regions of interest.")
),
#---Promoter-----------------------------------------------------------
tabPanel("Promoter",
value = 10,
radioButtons("radio", label = NULL, choices = list(
"Upstream 300bp as promoter" = 300,
"Upstream 600bp as promoter" = 600
), selected = 300),
tableOutput("promoter"),
downloadButton("downloadPromoter", "Download"),
h5("The promoter sequences of your genes are compared with those of the
other genes in the genome in terms of transcription factor (TF) binding motifs.
\"*Query gene\" indicates a transcription factor coded by a gene included in
your list.")
),
#---STRING-----------------------------------------------------------
tabPanel("STRING",
value = 11,
h5(
"Your genes are sent to STRING-db website for enrichment analysis
and retrieval of a protein-protein network. We tries
to match your species with the archaeal, bacterial,
and eukaryotic species in the",
a(" STRING server", href = "https://string-db.org/", target = "_blank"),
" and send the genes. If it is running, please wait until it finishes. This can take 5 minutes, especially for the first time when shinyGO downloads large annotation files."
),
htmlOutput("STRINGDB_species_stat"),
tags$head(tags$style("#STRINGDB_species_stat{color: blue;font-size: 15px;}")),
selectizeInput("speciesName",
label = NULL, choices = " ",
multiple = TRUE, options = list(
maxItems = 1,
placeholder = "Species name (e.g. Homo sapiens)",
onInitialize = I('function() { this.setValue(""); }')
)
),
textOutput("STRINGDB_mapping_stat"),
tags$head(tags$style("#STRINGDB_mapping_stat{color: blue;font-size: 15px;}")),
br(),
actionButton("ModalPPI", "PPI network of DEGs"), br(), br(),
selectInput("STRINGdbGO",
label = "Functional Enrichment",
choices = list(
"GO Biological Process" = "Process",
"GO Cellular Component" = "Component",
"GO Molecular Function" = "Function",
"KEGG" = "KEGG",
"Pfam" = "Pfam",
"InterPro" = "InterPro"
),
selected = "Process"
),
downloadButton("STRING_enrichmentDownload"),
tableOutput("stringDB_GO_enrichment")
),
#---?-----------------------------------------------------------
tabPanel("About",
value = 12,
p(
"ShinyGO is developed and maintained by a small team at ",
a(
"South Dakota State University (SDSU). ",
href = "https://www.sdstate.edu/"
),
"Our team consists of ",
a(" Xijin Ge (PI), ", href = "https://www.sdstate.edu/directory/xijin-ge", target = "_blank"),
"Jianli Qi (research associate), and
two talented graduate students (Emma Spors and Ben Derenge).
None of us are trained as software engineers. But
we share the passion about developing an
user-friendly tool for all biologists,
especially those who do not have access to bioinformaticians."
),
" For feedbacks, ",
a("email us, ", href = "mailto:[email protected]?Subject=ShinyGO"),
"or file bug report or feature request on our",
a(" GitHub repository, ", href = "https://github.com/gexijin/shinygo", target = "_blank"),
" where you can also find the source code.",
"For details, please see our", a("paper", href = "https://doi.org/10.1093/bioinformatics/btz931", target = "_blank"),
"and a detailed", a("demo.", href = "https://www.biorxiv.org/content/biorxiv/suppl/2018/05/04/315150.DC1/315150-1.pdf", target = "_blank"),
"ShinyGO shares many functionalities and databases with ", a("iDEP.", href = "http://bioinformatics.sdstate.edu/idep/", target = "_blank"),
br(), br(),
strong("Citation (Just including URL is not enough!):"),
br(),
"Ge SX, Jung D & Yao R,", a(" Bioinformatics 36:2628–2629, 2020.", href = "https://doi.org/10.1093/bioinformatics/btz931", target = "_blank"),
" If you use the KEGG diagram, please also cite the papers for ",
a("pathview, ", href = "https://doi.org/10.1093/bioinformatics/btt285"), "and ",
a("KEGG.", href = "https://doi.org/10.1093/nar/gkaa970"),
br(), br(),
strong("Previous versions are still functional:"),
br(),
a("ShinyGO V0.76, ",
href = "http://bioinformatics.sdstate.edu/go76/"
),
"based on Ensembl Release 104 with revision, archived on September 2, 2022",
br(),
a("ShinyGO V0.75, ",
href = "http://bioinformatics.sdstate.edu/go75/"
),
"based on Ensembl Release 104 with revision, archived on April 4, 2022",
br(),
a("ShinyGO V0.74, ",
href = "http://bioinformatics.sdstate.edu/go74/"
),
"based on Ensembl Release 104, archived on Feb. 8, 2022",
br(),
a("ShinyGO V0.65, ",
href = "http://bioinformatics.sdstate.edu/go65/"
),
"based on Ensembl Release 103, archived on Oct. 15, 2021",
br(),
a("ShinyGO V0.61, ",
href = "http://bioinformatics.sdstate.edu/go61/"
),
"based on Ensembl Release 96, archived on May 23, 2020",
br(),
a("ShinyGO V0.60, ",
href = "http://bioinformatics.sdstate.edu/go60/"
),
"based on Ensembl Release version 96, archived on Nov 6, 2019",
br(),
a("ShinyGO V0.51, ",
href = "http://bioinformatics.sdstate.edu/go51/"
),
"based on Ensembl Release version 95, archived on May 20, 2019",
br(),
a("ShinyGO V0.50, ",
href = "http://bioinformatics.sdstate.edu/go50/"
),
"based on Ensembl Release version 92, archived on March 29, 2019",
br(),
a("ShinyGO V0.41, ",
href = "http://bioinformatics.sdstate.edu/go41/"
),
"based on Ensembl Release version 91, archived on July 11, 2018",
br(),
h5("Genomes based on STRING-db is marked as STRING-db. If the same genome is included in both Ensembl and STRING-db, users should
use Ensembl annotation, as it is more updated and is supported in more functional modules. ")
# ,includeHTML("help.htm")
, h4("Input:"),
"A list of gene ids, separated by tab, space, comma or the newline characters.
Ensembl gene IDs are used internally to identify genes. Other types of IDs will be mapped to Ensembl
gene IDs using ID mapping information available in Ensembl BioMart. ",
h4("Output:"),
"Enriched GO terms and pathways:",
br(),
img(src = "enrich.png", align = "center", width = "660", height = "339"),
br(), br(),
"In addition to the enrichment table, a set of plots are produced. If KEGG database is choosen, then enriched pathway diagrams are shown, with user's genes highlighted, like this one below:",
br(),
img(src = "KEGG.png", align = "center", width = "696", height = "494"),
br(), br(),
"Many GO terms are related. Some are even redundant, like \"cell cycle\" and \"cell cycle process\".
To visualize such relatedness in enrichment results, we use a hierarchical clustering tree and network.
In this hierarchical clustering tree, related GO terms are grouped together based on how many genes they share. The size of the solid circle corresponds to the enrichment FDR.",
br(),
img(src = "GOtree.png", align = "center", width = "700", height = "361"),
br(), br(),
"In this network below, each node represents an enriched GO term. Related GO terms are connected by a line, whose thickness reflects percent of overlapping genes. The size of the node corresponds to number of genes.",
br(), img(src = "GOnetwork.png", align = "center", width = "500", height = "248"),
br(), br(),
"Through API access to STRING-db, we also retrieve a protein-protein interaction (PPI) network. In addition to a static network image, users can also get access to interactive graphics at the www.string-db.org web server.",
br(), img(src = "PPInetwork.png", align = "center", width = "700", height = "547"),
br(), br(),
"ShinyGO also detects transcription factor (TF) binding motifs enriched in the promoters of user's genes.",
br(), br(), img(src = "promoter.png", align = "center", width = "717", height = "288"),
includeHTML("human_mouse_source.html"),
br(), h4("Changes:"),
br(),
p("Oct 26, 2022: V. 0.76.3 Add hover text. Change plot styles.
When users select \"Sort by Fold Enrichment\",
the minimum pathway size is raised to 10 to
filter out noise from tiny gene sets."),
p("Sept 28, 2022: In ShinyGO 0.76.2, KEGG is now the default pathway database. More importantly,
we reverted to 0.76 for default gene counting method, namely
all protein-coding genes are used as the background by default.
The new feature introduced in 0.76.1, which uses the pathway database
to determine total number of genes in the background, can be turned on as an option
('Use pathway database for gene counts').
This is based on feedback from some users that
when using smaller pathway databases, such as KEGG, the new method changes
the P values substantially."),
p("Sept 3, 2022: ShinyGO 0.76.1. In this small improvement, we improved how we count the number of genes for
calculating P value. A gene must match at least one pathway in the selected pathway database. Otherwise this gene
is ignored in the calculation of P values based on hypergeometric distribution. This applies to both query and background genes. "),
p("April 19, 2022: ShinyGO 0.76 released. Improved pathway filtering, pathway sorting, figure downloading.
Version 0.75 is available", a("here.", href = "http://bioinformatics.sdstate.edu/go75")),
p("April 17, 2022: Add more flexiblity for download figures in PDF, SVG and high-res PNG."),
p("April 8, 2022: Add features to remove redundant pathways. Add filter to remove extrmely large or small pathways. Changed interface to always show KEGG tab."),
p("Mar. 7, 2022: Fixed an R library issue affected KEGG diagrams for some organisms."),
p("Feb. 26, 2022: Fixed a bug regarding the Plot tab when background genes are used. Background genes were not correctly
used to calculate the distributions of various gene characteristics. If these plots are important in your study, please re-analyze your genes."),
p("Feb. 19, 2022: R upgraded from 4.05 to 4.1.2. This solved the STRING API issues. Some Bioconductor packages are also upgraded.", style = "color:red"),
p("Feb. 8, 2022: ShinyGO v0.75 officially released. Old versions are still available. See the last tab.", style = "color:red"),
p("Nov. 15, 2021: Database update. ShinyGO v0.75 available in testing mode. It includes Ensembl database update, new species from Ensembl Fungi and Ensembl Protists, and STRINGdb (5090 species) update to 11.5."),
p("Oct25, 2021: Interactive genome plot. Identificantion of genomic regions signficantly enriched with user genes."),
p("Oct.23, 2021: Version 0.741 A fully customizable enrichment chart! Switch between bar, dot or lollipop plots. Detailed gene informations with links on the Genes tab."),
p("Oct. 15, 2021: Version 0.74. Database updated to Ensembl Release 104 and STRING v11. We now recommends the use of background genes in enrichment analysis. V.0.74 is much faster with even large set of background genes."),
h5("6/6/2021: V0.66 Adjusted interface. "),
h5("6/2/2021: V0.66 add customized background genes."),
h5("5/23/2021: V0.65 Database update to Ensembl 103 and STRING-db v11."),
h5("11/3/2019: V 0.61 Improved visualization based on suggestions from reviewers. Interactive networks."),
h5("5/20/2019: V0.60 Upgraded to Ensembl Biomart 96. Add annotation from STRING-db v10"),
h5("3/29/2019: V0.51 Update annotation to Ensembl release 95. Interface change. Demo gene lists. Error messages."),
h5("9/10/2018: V0.5 Upgraded to Ensembl Biomart 92"),
h5("4/30/2018: V0.42 changed figure configurations for tree."),
h5("4/27/2018: V0.41 Change to ggplot2, add grid and gridExtra packages"),
h5("4/24/2018: V0.4 Add STRING API, KEGG diagram, tree display and network.")
)
), # tabsetPanel
bsModal("ModalExamplePPI", "Protein-protein interaction(PPIs) networks ", "ModalPPI",
size = "large",
h5("By sending your genes to the STRING website,
shinyGO is retrieving a sub-network, calculating PPI enrichment,
and generating custom URLs to the STRING website containing your genes. This can take 5 minutes. Patience will pay off! "),
sliderInput("nGenesPPI", label = h5("Genes to include:"), min = 0, max = 400, value = 50, step = 10),
# ,htmlOutput("stringDB_network_link")
# ,tags$head(tags$style("#stringDB_network_link{color: blue; font-size: 15px;}"))
plotOutput("stringDB_network1")
), # bsModal 1
bsModal("InteractiveNetwork", "Interactive enrichment networks ", "GONetwork",
size = "large",
fluidRow(
column(2, actionButton("layoutButtonStatic", "Change layout")),
column(2, downloadButton("enrichmentNetworkPlotDownload", "Download")),
column(2, checkboxInput("wrapTextNetworkStatic", "Wrap text", value = FALSE))
),
plotOutput("enrichmentNetworkPlot")
), # bsModal 2
bsModal("BackgroundGenes", "Customized background genes (recommended)", "backgroundGenes",
size = "large",
tags$textarea(
id = "input_text_b",
placeholder = "
Paste all genes from which the gene list is derived. These are all
genes whose expression or other activity that you measured.
This could be all the genes on a DNA microarray or all the genes
detected by a proteomics experiment.
By default, we compare your gene list with a background of all
protein-coding genes in the genome. When your genes are not selected
from genome-wide data, customized background genes might yield more
accurate results for enrichment analysis. For gene lists derived from
a typical RNA-seq dataset, many use the subset of genes with detectable
expression, typically the genes passed a minimum filter.
We can also customize background genes to overcome bias in selection.
Currently only less than 30,000 genes are accepted.",
rows = 20,
""
)
), # bsModal 3
bsModal("geneIDexamples", "What the gene IDs in our database look like?", "MGeneIDexamples",
size = "large",
selectizeInput(
inputId = "userSpecieIDexample",
label = "Select or search for species", choices = NULL
),
tableOutput("showGeneIDs4Species")
), # bsModal 4
bsModal("orgInfoButton",
"Supported species",
"MorgInfo",
size = "large",
p("Search by common and scientific names, or NCBI taxonomy IDs.
If a species is annotated in both Ensembl and STRINGdb, please select Ensembl,
which provides more details. Species annotated in STRINGdb are marked as 'Homo Sapiens STRINGdb'."),
DT::dataTableOutput("orgInfoTable")
), # bsModal 5
bsModal("genomePlotStaticButton", "Static genome plot", "gPlotstatic",
size = "large",
h5("Your genes are marked in each of the chromosomes.
Note that the scale for each chromosomes are different."),
plotOutput("genomePlot", width = "100%")
) # bsModal 6
) # mainPanel
), # sidebarLayout
tags$head(includeScript("google_analytics.js")), # tracking usage
tags$head(includeHTML(("google_analytics_GA4.html")))
# ,tags$head(includeHTML(("../google_analytics_golem.html")))
) # fluidPage