aboutsummaryrefslogtreecommitdiff
path: root/apps/rappor-sim/ui.R
diff options
context:
space:
mode:
Diffstat (limited to 'apps/rappor-sim/ui.R')
-rwxr-xr-xapps/rappor-sim/ui.R92
1 files changed, 92 insertions, 0 deletions
diff --git a/apps/rappor-sim/ui.R b/apps/rappor-sim/ui.R
new file mode 100755
index 0000000..9a1eb63
--- /dev/null
+++ b/apps/rappor-sim/ui.R
@@ -0,0 +1,92 @@
+library(shiny)
+
+shinyUI(pageWithSidebar(
+ headerPanel("RAPPOR Simulation"),
+ sidebarPanel(
+ tabsetPanel(
+ tabPanel("RAPPOR",
+ selectInput("size", "Bloom filter size:",
+ c(4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096),
+ selected = 128),
+ selectInput("hashes", "Number of hash functions:",
+ c(1, 2, 4, 8, 16, 32),
+ selected = 2),
+ selectInput("instances", "Number of cohorts:",
+ c(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024),
+ selected = 8),
+ br(),
+ br(),
+ sliderInput("N", "Number of samples to generate:",
+ min = 100000, max = 10000000,
+ value = 1000000, step = 100000),
+ br(),
+ helpText(actionButton("sample", "Rerun Simulations"), align = "center"),
+ br(),
+ br(),
+ helpText("Version 0.1", align = "center"),
+ helpText(a("RAPPOR Repository", href="http://github.com/google/rappor"), align = "center")),
+ tabPanel("Privacy",
+ sliderInput("p", "Probability of reporting noise (p):",
+ min = .01, max = .99, value = .5, step = .01),
+ sliderInput("q", "Probability of reporting signal (q):",
+ min = .01, max = .99, value = .75, step = .01),
+ sliderInput("f", "Probability of lies (f):",
+ min = 0, max = .99, value = .5, step = .01),
+ br(),
+ htmlOutput("epsilon"),
+ br(),
+ helpText("* In addition to p, q and f, the number of hash functions (set in the RAPPOR tab) also effects privacy guarantees."),
+ br(),
+ br(),
+ br()
+ ),
+ tabPanel("Population",
+ sliderInput("nstrs", "Number of strings:",
+ min = 100, max = 10000, value = 300, step = 100),
+ br(),
+ sliderInput("nonzero", "Proportion of non-zero strings:",
+ min = .1, max = 1, value = 0.5, step = .1),
+ br(),
+ selectInput("decay", "Decay of non-zero strings",
+ c("Linear", "Exponential", "Constant"),
+ selected = "Exponential"),
+ br(),
+ conditionalPanel(condition = "input.decay == 'Exponential'",
+ sliderInput("expo", "Rate of exponential decay",
+ min = 1, max = 200, value = 10, step = 1)),
+ sliderInput("background", "Frequency of background strings:",
+ min = 0, max = .2, value = .05, step = .01),
+ br(),
+ br(),
+ br()
+ ),
+ tabPanel("Decoding",
+ sliderInput("alpha", "Alpha - probability of false positive:",
+ min = .01, max = .3, value = .05, step = .01),
+ br(),
+ selectInput("correction", "Multiple testing correction",
+ c("None", "Bonferroni", "FDR"),
+ selected = "FDR"),
+ br(),
+ sliderInput("missing", "Proportion of non-zero strings missing from decoding:",
+ min = 0, max = 1, value = 0, step = .1),
+ br()
+ )
+ )),
+ mainPanel(
+ tabsetPanel(
+ tabPanel("Life of a Report",
+ actionButton("new_user", "New Participant"),
+ actionButton("new_value", "New Value"),
+ actionButton("new_report", "New Report"),
+ plotOutput("example", height = "600px")),
+ tabPanel("Population", plotOutput("probs", height = "600px")),
+ tabPanel("Results", helpText(h3("Summary")), htmlOutput("pr"), br(), br(), dataTableOutput("tab")),
+ tabPanel("True Bits", plotOutput("truth", height = "800px")),
+ tabPanel("Estimated Bits", plotOutput("ests", height = "800px")),
+ tabPanel("Estimates vs Truth", plotOutput("ests_truth", height = "600px")),
+ # tabPanel("Lasso", plotOutput("lasso", height = "600px")),
+ tabPanel("Residuals", plotOutput("resid", height = "600px"))
+ )
+ )
+ ))