diff options
Diffstat (limited to 'apps/rappor-sim/ui.R')
-rwxr-xr-x | apps/rappor-sim/ui.R | 92 |
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")) + ) + ) + )) |