-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.r
124 lines (101 loc) · 3.49 KB
/
app.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
library(shiny)
library(shinydashboard)
# Define UI
ui <- dashboardPage(
header = dashboardHeader(title = "Hemlock data", titleWidth = 350),
sidebar = dashboardSidebar(disable = TRUE),
body = dashboardBody(
withMathJax(),
fluidRow(
column(width = 4,
box(width = NULL,
status = "primary",
title = "Choose your model",
solidHeader = T,
radioButtons("eq", "model type",
c("Linear" = "linear",
"Log-linear" = "loglinear",
"Michaelis-Menton" = "mich")),
helpText("
$$
\\begin{align}
\\mu &= \\alpha + \\beta x \\\\
\\mu &= \\alpha + \\beta \\text{ln}(x) \\\\
\\mu &= \\frac{\\alpha x}{\\alpha / \\beta + x} \\\\
y &\\sim \\text{Normal}(\\mu, \\sigma)
\\end{align}
$$
"),
# Input: Slider for parameter alpha
sliderInput("alpha",
"alpha",
value = 0,
min = -10,
max = 200),
# Input: Slider for parameter beta
sliderInput("beta",
"beta",
value = 0,
min = -10,
max = 100),
sliderInput("sd",
"sigma",
value = 1,
min = .1,
max = 200)
)
),
column(width = 4,
box(width = NULL,
status = "primary",
h4("Model", align = "center"),
plotOutput(outputId = "data")
)
),
column(width = 4,
# Input: Select the model type
box(width = NULL,
status = "primary",
h4("Residuals", align = "center"),
plotOutput(outputId = "PDF")
)
)
)
)
)
# Define server logic for random distribution app ----
server <- function(input, output) {
# Load data
hemlock <- read.table("hemlock.txt", header = T)
x <- seq(min(hemlock[,1]), max(hemlock[,1]), length.out = 1000)
functional_form <- reactive({
switch(input$eq,
linear = function(xvar) input$alpha + input$beta * xvar,
loglinear = function(xvar) input$alpha + input$beta * log(xvar),
mich = function(xvar) input$alpha * xvar/(input$alpha/input$beta + xvar)
)
}
)
# Make the plots
output$data <- renderPlot({
plot(hemlock[,1], hemlock[,2], xlab = "Light availability (%)", ylab = "Annual growth (mm/yr)",
cex.axis = 1.5, cex.lab = 1.5)
lines(x, functional_form()(x), lwd = 2)
})
expected_residual <- reactive({
function(x) dnorm(x, mean=0, sd = input$sd)
})
# PDF
output$PDF <- renderPlot({
resid <- hemlock[,2] - functional_form()(hemlock[,1])
h <- hist(resid, breaks=10,
xlab="Observed - Predicted",
xlim = c(-200,200),
main="", freq = FALSE)
curve(dnorm(x, mean = mean(resid), sd = sd(resid)),
add = TRUE, col = "red")
curve(expected_residual()(x), add = TRUE, col = "blue")
})
}
# Create Shiny app ----
shinyApp(ui, server)