library(shiny)
library(ggplot2)
library(broom)
library(dplyr)
#Tänusõnad TÜ CITIS
#teen tühja faili / empty dataframe
points <- as.data.frame(cbind(x=vector("numeric", 0), y=vector("numeric", 0)))
ui <- fluidPage(
titlePanel("Joonistab regressioonimudeli / Draws regression line"),
#joonis, kust võetakse mudeli punktid ja joonistatakse tulemused
plotOutput("joonis", width = 600, height = 500,
click = "plot_click"),
#nupp, mis teeb andmestiku nulliks / resets data
actionButton("nullipunktid", "Nulli punktid / Reset data"),
br(), br(),
#mudeli väljund / model summary
verbatimTextOutput("mudelsummary") ,
#br(), br(),
#andmed ja regressioonimudeli diagnostikud / data and diagnostics
DT::dataTableOutput(outputId = "andmed", width = '600px')
)
server <- function(input, output) {
#nullib andmed / resets data
observeEvent(input$nullipunktid, {
points <<- as.data.frame(cbind(x=vector("numeric", 0), y=vector("numeric", 0)))
})
#Lisame andmestikule järjest punkte juurde ja saadame joonisele ja mudelisse
#Add rows to the data
pointsdf <- reactive({
input$nullipunktid
points <<- rbind(points, as.data.frame(cbind(x=input$plot_click$x, y=input$plot_click$y)))
points
})
#joonis/ graph
output$joonis <- renderPlot({
ggplot(data=pointsdf(), aes(x=x, y=y)) +
geom_point() +
geom_smooth(method = "lm", fullrange = TRUE)+
scale_x_continuous(limits = c(-10,10)) +
scale_y_continuous(limits = c(-10,10)) +
geom_hline(yintercept=0) + geom_vline(xintercept=0)
})
#OLS
mudel <- reactive({
if(nrow(pointsdf())>2) { # if at least 3 observations, present results
mudel <- lm(y ~ x, data=pointsdf())
mudel
}
})
#presents results
output$mudelsummary <- renderPrint({
if(nrow(pointsdf())>2) {
summary(mudel())
}
}, width = 400)
#Andmed koos diagnostikaga / Data with diagnostics
output$andmed <- DT::renderDataTable({
round(mudel() %>%
augment(), 3)
})
}
shinyApp(ui = ui, server = server)