library(shiny)
library(caret)
data(advertising, package="jrPredictive")
ui = fluidPage(
titlePanel("Examine the advertising data set"),
sidebarLayout(
sidebarPanel(
textInput("formula","Predictor terms",value = "TV + Radio"),
selectInput("method", "Method", choices = c("lm","knn","rpart","rf")),
checkboxInput("points", "Include Points?",value = FALSE),
uiOutput("extra"),
sliderInput("angle","Z Axis rotation", value = 30, min = 0, max = 360)
# submitButton("GO!")
),
mainPanel(
plotOutput("surface")
)
)
)
server = function(input, output){
grid = reactive({
if(input$method == "knn")
data.frame(k = input$k)
else if(input$method == "rpart")
data.frame(cp = input$k)
else if(input$method == "rf")
data.frame(mtry = 2)
else NULL
})
slider = reactive({
if(input$method == "knn")
sliderInput("k","# Nearest Neighours", value = 10, min = 1, max = 200)
else if(input$method == "rpart")
numericInput("k", "Complexity parameter", value = 0.1)
})
output$extra = renderUI(slider())
modelformula = reactive({
as.formula(paste("Sales~",input$formula))
})
modelfit = reactive({
train(modelformula(), data = advertising, method = input$method,
trControl = trainControl(method="none"), tuneGrid = grid(),
preProcess = c("center","scale"))
})
output$surface = renderPlot({
plot3d(modelfit(),xvar = advertising$TV,
yvar = advertising$Radio,
zvar = advertising$Sales,
points = input$points,
col = 5,
theta = input$angle, zlim = range(advertising$Sales))
})
}
shinyApp(server=server, ui=ui)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.