1
votes

I have this code and I want to have a Select Input option to select from two different ways of plotting the graphic.

I want that if you choose the "level" option "fit 2" gets plotted instead of just fit.

this is fit2.

plot(forecast(fit2,



    #Confidence Interval %

              level = c(70,90)),
 sub= "Confidence Interval 70% ~ 90%
     or Determined by user",
 ylab= "Y Axis Variable",

 main= "Forecast Linear Structural Model @ Level-Wise",

     ylim = c(0,400))

This is the Shiny code.

library(forecast)
library(shiny)
timese <- ts(WWWusage, start= c(2008,1), end= c(2016,1), frequency=12)
fit <- StructTS(timese,"trend")
fit2 <- StructTS(timese,"level")




   ui <- fluidPage(
  (titlePanel("app | Forecast Models", windowTitle = "app")),


  #Select input
  selectInput(inputId = "select", label = "Select Forecast",
              choices = c("Trend","Level"),

                     plotOutput(outputId = "hist")),

 #Range Input

  sliderInput(inputId = "range",
              label = "Set Confidence Interval. Up to 99%",
              min = 0,max = 99, value = c(60,90)),

  mainPanel(plotOutput(outputId = "plot"))

)



server <- function(input, output) {

  output$plot <- renderPlot({

    plot(forecast(fit, #Confidence Interval %
                  level = c(input$range)),
         sub= "Confidence Interval 70% ~ 90% or Determined by user", 
         ylab= "Y Axis Variable",
         main= "Forecast Linear Structural Model @ Trend-Wise",
         ylim = c(0,400))
  })

}

shinyApp(ui, server)
1

1 Answers

1
votes

Like

server <- function(input, output) {

    output$plot <- renderPlot({
        if(input$select=="Trend")
            plot(forecast(fit, #Confidence Interval %
                          level = c(input$range)),
                 sub= "Confidence Interval 70% ~ 90% or Determined by user", 
                 ylab= "Y Axis Variable",
                 main= "Forecast Linear Structural Model @ Trend-Wise",
                 ylim = c(0,400))
        else
            plot(forecast(fit2,
                          #Confidence Interval %
                          level = c(70,90)),
                 sub= "Confidence Interval 70% ~ 90% or Determined by user",
                 ylab= "Y Axis Variable",
                 main= "Forecast Linear Structural Model @ Level-Wise",
                 ylim = c(0,400))
    })

}

Basically you'd decide based on the input$select what to plot inside render plot.

A slightly more elegant version would be.

server <- function(input, output) {

    output$plot <- renderPlot({
        if(input$select=="Trend")
            method <- fit
        else 
            method <- fit2
        plot(forecast(method, #Confidence Interval %
                      level = c(input$range)),
             sub= "Confidence Interval 70% ~ 90% or Determined by user", 
             ylab= "Y Axis Variable",
             main= "Forecast Linear Structural Model @ Trend-Wise",
             ylim = c(0,400))

    })

}

However, this makes the two plot "more similar". As you can see in title. So you would need to define additional vars in the if. This comes down to a trade off