-
Notifications
You must be signed in to change notification settings - Fork 0
/
ui.R
112 lines (107 loc) · 5.66 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
library(shinycssloaders)
ui <- fluidPage(
titlePanel("Bayesian optimal group sequential design with time to event endpoint"),
"More details and instructions to use this app can be found ",
tags$a(href="https://github.com/Stat-Li/BayesianOptimalDesign",
"here."),
fluidRow(
column(3,
wellPanel(
h4("Design Type:"),
radioButtons("design_arm", label = ("Single-arm or two-arm RCT"),
choices = c("Single-arm",
"Two-arm RCT"),
selected = "Single-arm"),
radioButtons("design_stop", label = ("Stopping"),
choices = c("Futility stopping only",
"Futility and superiority stopping"),
selected = "Futility stopping only"),
numericInput("delta0",
label = ("Noninferiority Margin"),
value = 1.0, min = 1, max = 5, step = 0.1),
textInput("interim_timing", label = ("Information time"),
value = "0.5"),
helpText('Note: Seperate timing by space.', style = "font-size:10px"),
conditionalPanel(
condition = "input.design_arm == 'Two-arm RCT'",
numericInput("ss_ratio",
label = ("Experimental arm and control arm sample size ratio"),
value = 1, min = 0.1, max = 10, step = 0.1)
)
),
wellPanel(
h4("Simulation Setting:"),
numericInput("delta1",
label = ("Desired hazard ratio"),
value = 0.6, min = 0, max = 1, step = 0.1),
numericInput("type1",
label = ("Type I Error"),
value = 0.1, min = 0, max = 1, step = 0.1),
numericInput("type2",
label = ("Type II Error"),
value = 0.2, min = 0, max = 1, step = 0.1),
numericInput("weibull_shape",
label = ("Weibull shape parameter"),
value = 0.5, min = 0, max = 3, step = 0.1),
conditionalPanel(
condition = "input.design_arm == 'Single-arm'",
textInput("gamma_a", label = ("Gamma prior shape parameter"),
value = "2 5 10")
),
conditionalPanel(
condition = "input.design_arm == 'Two-arm RCT'",
textInput("sigma2_0", label = ("Normal prior variance parameter"),
value = "0.5 0.2 0.1")
),
# textInput("gamma_a", label = ("Gamma prior shape parameter"),
# value = "2 5 10"),
helpText('Note: Multiple values allowed. Seperate each shape by space.', style = "font-size:10px"),
numericInput("ta",
label = ("Accrual duration (years)"),
value = 4, min = 0, max = 10, step = 1),
numericInput("tf",
label = ("Follow-up duration (years)"),
value = 2, min = 0, max = 10, step = 1),
# numericInput("surv_3year",
# label = ("3-year survival probability for control"),
# value = 0.53, min = 0, max = 1, step = 0.01),
h5('x-year survival probability for control'),
div(style="display: inline-block;vertical-align:top; width: 100px;",
numericInput("x_year", label = "Year", value = 3, min = 0, max = 10, step = 0.1)),
div(style="display: inline-block;vertical-align:top; width: 100px;",
numericInput("surv_3year", label = ("Survival prob."), value = 0.53, min = 0, max = 1, step = 0.01)),
numericInput("search_gamma",
label = withMathJax("Tuning parameter \\(\\gamma\\) upper bound"),
value = 0.5, min = 0, max = 10, step = 0.1),
numericInput("n_sims",
label = ("Number of simulation trials"),
value = 2000, min = 0, max = 100000, step = 100),
actionButton("go", "Submit", icon("redo"))
)
),
column(9,
# wellPanel(
# h4("Frequentist operating characteristics:"),
# # dataTableOutput('out_table')
# shinycssloaders::withSpinner(
# dataTableOutput('out_table')
# ),
# span('PRN: probability of rejecting null. PET: probability of early stopping.
# ES: expected sample size. EE expected number of events.')
# )
mainPanel(
# Output: Tabset w/ plot, summary, and table ----
tabsetPanel(type = "tabs",
tabPanel("Operating characteristics", shinycssloaders::withSpinner(
dataTableOutput('out_table_ops')
),
span('PRN: probability of rejecting null. PET: probability of early stopping.
ES: expected sample size. EE expected number of events.')),
tabPanel("Stopping cutoff", dataTableOutput('out_table_stop'),
span('Optimal stopping boundary that minimize the expected sample size
under null hypothesis.')),
)
)
)
)
)